当前位置: 首页 > news >正文

给你一个项目,你将如何开展性能测试工作?

一、性能三连问
1、何时进行性能测试?

性能测试的工作是基于系统功能已经完备或者已经趋于完备之上的,在功能还不够完备的情况下没有多大的意义。因为后期功能完善上会对系统的性能有影响,过早进入性能测试会出现测试结果不准确、浪费测试资源。因此,性能测试首先是基于功能测试的,必须了解其功能需求才能开展性能测试。

2、如何进行性能测试?
 

一个被测系统,我们需要分3部分来分析:

入口:需要怎么发送请求,施压方应该施加多大的压力,用什么方法施压;

被测系统:系统怎么应对单个请求,系统业务流程是怎么样的,系统网元节点、数据流向等,整体性能需求有没有,需要考察哪些指标,怎么监控;

出口:接收数据有哪些,怎么获取和比对; 

是不是感觉就和功能测试差不了多少?是的,就是先分析单个用户的功能流程以及系统的数据流向(包括后台的数据流向)结构图,然后再考虑大量的用户操作。

3、开展性能测试的步骤?

一般系统的性能测试步骤大体如下:

1.确认测试目标;

2.分析被测系统业务需求;

3.分析被测系统的系统结构;

4.分析被测系统的性能测试点;

5.设计测试方案、检测方案和测试案例;

6.选择测试工具;

7.测试开发;

8.测试执行;

9.测试结果分析;

10.测试调优、测试验证、测试分析;

11.输出测试报告;

二、性能测试开展前的准备
测试准备工作越充分,后期的测试执行越顺利,一般测试准备工作如下:

1.确认测试目标;

2.分析被测系统的业务;

3.分析被测系统的结构;

4.分析被测系统可能产生性能瓶颈的节点;

5.设计测试方案、检测方案和测试方案;

以下具体分析以上5个步骤:

1、确认测试目标

任何一个任务首先都要确认任务的目标是什么,如果不知道目标,任何努力得到的结果有可能都不是最终所需要的结果。性能测试也一样,首先需要确立明确的目标。无论是随机测试系统的当前性能情况,还是奔着对系统进行优化而去,或是检验一下系统的性能是否满足需求等等,这些都是开展性能测试之前的一个目标。之后的分析到方案和用例设计,到测试执行监控,再到最后的测试分析和报告,都是要围绕这个目标展开。所以,首要的任务就是确认测试的目标要求,需要达到怎样的一个测试目的和目标。

假如有一些测试任务没有明确的目标或者要求,并不说明它没有目的和目标,这需要我们进行沟通和分析。及时与项目组达成一致的目的要求,分析需求,分析系统,最后明确项目或者系统测试任务的目的要求。

2、分析被测系统的业务

朋友曾经在一次面试中,有一位面试官给了他这样一个题目:“有一个网站,只知道它的总访问量一天是300万,怎么测试它的性能?”

大家想一想要怎么设计方案?

猜想面试官是想面试者回答,正态分布、二八原理等基本的测试原则应用。朋友当时没有回答任何与正态分布、二八原理相关的东西。当时面试官对他的回答好像是“蔑视”的笑了笑,可能是觉着连基本的正态分布、二八原理都不知道,还搞性能测试?。其实,性能测试并不是想象的那样简单,并不是一个简单的原理的应用就行的,如果这么容易,那岂不是谁都能搞定。

性能测试的基础是基于系统的业务功能基本趋于稳定,首要的任务就是性能在系统满足业务功能需求上展开,因此我们必须要分析系统的业务。不管是普通的网站也好还是比较专业的系统也好,它都是有业务功能需求,所有的性能测试都要基于这些功能才能进行,脱离了业务功能的性能测试没有意义。性能测试首要的任务就是分析系统的业务功能,分析系统业务上的性能限制,也就是业务需求。

那么,怎么分析系统的业务需求呢?

如果有用户需求规格说明,首要的任务就是阅读和理解分析用户需求规格说明;

如果没有用户需求规格说明,那么就需要分析系统功能,提炼出系统的业务需求。如果可能,项目组比较熟悉的人讲述一遍是最好的了。

最后无论哪一种,最好的方法就是按照自己的理解画出系统的业务流程或者系统的功能结构图,拿到项目组进行确认。一定要进行确认,和整个项目组达成一致的认同。

有人会问,我们项目组没有可确认的业务需求时候怎么办?

首先依然需要从分析入手。如果不分析,你就不会知道系统的功能数据流向,请求的数据构成,系统的网元结构,以及系统可能出现的瓶颈在哪一个节点,你又怎么进行优化呢?

当然面对一种全新的知识领域的时候,可能需要我们多积累经验,更多的进行分析;我们可能需要结合实践,多次实际运行系统或者执行测试,在测试中不断的进行优化和完善我们的分析过程、分析结果、测试方案、测试开发甚至是测试执行等等。

分析被测系统的业务,有时候不是一蹴而就,需要我们进行多次反复的分析、确认和再分析、再确认,直到把系统弄明白,甚至有可能在测试执行的最后阶段你还需要再次进行分析和确认,然后重新规划测试。

3、分析被测系统的结构

系统的结构和系统的业务一样重要,不知道系统的网元结构可能就没有办法进行监控,就没有办法知道瓶颈在哪个节点,就不能进行优化。

分析系统的结构,最好的方法就是项目组提供系统的部署和构成图;如果项目组不能提供或者没有项目组,那就需要用TCPDUMP等抓包工具,分析数据流向。

TCPDUMP的使用:

bash
tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型;(2)-i eth1 : 只抓经过接口eth1的包;(3)-t : 不显示时间戳;(4)-s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包;(5)-c 100 : 只抓取100个数据包;(6)dst port ! 22 : 不抓取目标端口是22的数据包;(7)src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24;(8)-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析;

从第一个节点分析流向到哪,确定第二层的节点;然后从第二层每个节点分析第三层节点,逐层分析,完善系统的数据流向的所有结构层次和节点;再弄明白每个节点部署的应用程序或者进程队列;对每一个节点的应用程序或者进程队列进行测试监控;最后才能得出哪些应用或者进程队列需要进行优化。

弄明白系统的节点构成之外,还需要弄明白各个节点之间的通讯协议和数据格式,之后测试工具选择和测试数据准备以及测试脚本开发就需要以此作为依据。这一切的基础就是要分析和弄明白系统的所有节点,也就是要分析清楚系统的结构。

4、分析系统可能的性能瓶颈

分析系统的业务需求和系统的结构组成,同时预判系统可能存在的性能瓶颈,这是分析中的一个目标;得到预判的性能瓶颈后我们后面需要在监控的时候多注意一下这些节点。

当然有一些常见的可能会是系统瓶颈的节点我们需要注意:

1. 登录,一般系统登录要进行多种校验,可能数据交互比较频繁;

2.下单,抢单、抢红包这个时候会有一定量的并发需求;

3.大数据的查询、统计和报表分析,会对系统产生压力;

4.视频、动画等会对网络产生压力;

5.消息比较集中的系统功能节点,会对系统产生压力;

6.一些特殊的业务需求会对系统产生压力;

常见的瓶颈:

1. 数据库的瓶颈一般在磁盘IOPS过高造成进程阻塞;

2.系统进程数过多一般会消耗系统的内存空间;

3.消息队列和缓存服务,开启持久化后会需要考察磁盘IOPS,不开启持久化则需要考察内存占用;

4.频繁的管道开辟和销毁会导致CPU占用较高;

5. 有部分程序结构上不能利用多个CPU;

在分析业务和系统结构的过程中,我们就需要考虑这个业务点或者结构点会不会有大量的数据访问,会不会产生压力,我们的设计会不会产生性能瓶颈。

5、测试计划和测试用例的设计
 

测试计划的设计以及最后测试总结文档的形成,实际就是所有分析工作的总结。

写测试计划的过程就是明确测试目的、分析业务需求、系统结构以及评估测试方法、测试安排、测试风险等等的过程总结。而这些全部来源于在测试执行之前的分析,有时候可能你在测试过程中还需要做出一些分析和调整。

测试计划包含了分析和整理的各个方面,一个好的测试计划包含的内容:测试目的、测试目标、测试内容(可能包含业务性能、可靠性、稳定性等等),业务需求目标,系统业务构成,系统节点构成,测试方法流程,需要监控的指标要求和节点等等。

测试用例一般包含在测试计划中,测试用例实际上就是普通的业务操作流程,用测试工具或者其他测试手段来模拟大的数据量业务操作,并对系统的各个节点进行监控,获取监控数据。预期的监控数据和实际监控数据的对比,满足要求就是预期要求,实际对比结果就是测试结果。

6、测试前的准备
 

环境搭建:测试环境搭建这一步工作量不大,如果有必要可以请开发协助配置完成。

场景建模:考虑哪些场景下可能存在性能瓶颈,相应的设置对应的测试脚本和测试逻辑,以尽可能模拟生产环境( 一定要熟悉系统业务,因为需求的产生,就是用户+场景)。

测试数据准备:测试数据准备常用的有这两种方式:将生产数据复制一份过来、开发脚本预埋造数据(但无论哪种,一定要注意数据隔离,防止数据污染)。

测试脚本开发:首先,需要从开发那里获取开发接口文档和数据库表设计文档。然后,通过工具或者写测试脚本调试接口,先保证接口可以成功调用。

三、性能测试的正式开展

1、执行测试脚本

在保证接口可以成功调用之后,先进行单接口基准测试,即:对一个接口进行压力测试,不断加压,直到响应时间达到或超过指标,观察当前其并发数和TPS。同样的并发数,多执行几次,得到一个平均值或稳定值(即TPS和TRT曲线相对稳定的值),并记录下来。

记录的目的是通过直观的数据变化,得到单个接口的最大TPS和不同并发情况下的响应时间变化。

“80%的性能瓶颈可以通过分析TPS和TRT的数值变化得到”。虽然有点片面,但也不失为一种方法。比如按照上图记录的数值变化来看,很明显领券接口性能极差,这时候就可以告知开发,通过查看log、检查代码、SQL语句等方法来查询原因。当然个人能力足够的话,这些可以自己来做。

2、监控调试
 

所谓的监控调试,就是一个不断调整重复的过程,这个需要根据性能测试的目的去判断具体如何执行。

Jmeter本身就用监听器这个元件提供了一定的监听数值报告元件,但毕竟是开源工具,其本身的组件功能不够强大,可以通过下载支持jmeter的增强型功能插件来进行监控。

Jmeter插件下载地址:https://jmeter-plugins.org/

下载后可以解压缩,将plugins-manager.jar放入jmeter安装目录lib/ext,然后重启Jmeter即可,可以通过点击下图圈出来的按钮检验是否成功安装:

 无论是对服务器资源使用率还是测试数据报表生成,甚至TPS、TRT等的监听,该插件都提供了组件支持,具体使用方法自行探索。

3、分析和调优

性能测试除了为获取性能指标外,更多是为了发现性能瓶颈和性能问题,然后对性能问题和瓶颈进行分析和调优,在当今互联网高速发展的时代,性能调优的模型可以归纳总结如下图所示。

性能调优就是不断采集系统中的性能指标以及系统模型中各层的资源消耗,从中发现性能瓶颈和性能问题,然后对瓶颈和问题进行分析诊断来确定性能调优方案,最后通过性能压测进行验证调优方案是否有效,如果无效继续重复这个过程进行性能分析,直到调优方案有效,瓶颈和问题得到解决。这个过程一般是非常漫长,因为很多时候性能调优方案往往不是一次就能有效或者一次就能解决所有的瓶颈和问题,或者解决了当前的瓶颈和问题,但是继续性能压测又可能会出现新的瓶颈和问题。

4、输出测试报告

根据以上几个步骤,得到测试结果,分析系统存在的瓶颈,然后采用各种方法提出解决方案或优化建议,最后对本次性能测试进行一个完整的总结,这样,一次性能测试就完成了。在整个过程中,费时较长一般是在测试数据准备和测试执行以及监控调优阶段。

 总结:
感谢每一个认真阅读我文章的人!!!

 我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。欢迎大家点击下方名片免费领取,千万不要错过哦。

 文档获取方式:点击右边链接领取:软件测试全套资料分享     

相关文章:

给你一个项目,你将如何开展性能测试工作?

一、性能三连问 1、何时进行性能测试? 性能测试的工作是基于系统功能已经完备或者已经趋于完备之上的,在功能还不够完备的情况下没有多大的意义。因为后期功能完善上会对系统的性能有影响,过早进入性能测试会出现测试结果不准确、浪费测试资…...

点燃市场热情,让产品风靡全球——实用推广策略大揭秘!

文章目录 一、实用推广策略的重要性1. 提高产品知名度和认可度2. 拓展产品市场和用户群体3. 增强企业品牌形象和市场竞争力 二、实用推广策略的种类1. 社交媒体推广2. 定向推广3. 口碑营销4. 内容推广 三、实用推广策略的实施步骤1. 研究目标用户和市场需求,明确产品…...

Python操作Hive数据仓库

Python连接Hive 1、Python如何连接Hive?2、Python连接Hive数据仓库 1、Python如何连接Hive? Python连接Hive需要使用Impala查询引擎 由于Hadoop集群节点间使用RPC通信,所以需要配置Thrift依赖环境 Thrift是一个轻量级、跨语言的RPC框架&…...

客户收到报价后突然安静了,怎么办?

外贸人常常会有这样的经历:与意向度很高的客户数封邮件沟通报价之后,突然客户那边就沉静下来了,而不知所措,遇到这样的客户,应该怎么办呢? Vol.1 了解客户信息 首先自身要养成一个好习惯,针对…...

O2OA(翱途)常见知识之 mysql 数据库备份

概述 系统运行一段时间后,可能发生各种情况导致数据丢失,如硬件故障、人为错误、软件错误、病毒攻击等。定期备份可以帮助您保护数据免受这些风险的影响,以便在需要时能够恢复数据。 O2OA应用本身可以通过dump配置每天自定备份数据&#xff…...

如何让你的程序支持lua脚本

最近做了一个控制机械臂的程序,使用C语言开发的,调试的时候总是需要修改代码来调整运动轨迹, 总是要编译,实在烦人 不过有个方法就是使用lua来调试运动逻辑 代码如下 static int lua_up(lua_State*l) {size_t stepluaL_checkinteger(l,1);//向上动作up(step);return 0; }st…...

什么是系统架构师?什么是系统架构?

1. 什么是系统架构师? 系统架构设计师(System Architecture Designer)是项目开发活动中的关键角色之一。系统架构是系统的一种整体的高层次的结构表示,是系统的骨架和根基,其决定了系统的健壮性和生命周期的长短。 系统架构设计…...

大数据NoSQL数据库HBase集群部署

目录 1. 简介 2. 安装 1. HBase依赖Zookeeper、JDK、Hadoop(HDFS),请确保已经完成前面 2. 【node1执行】下载HBase安装包 3. 【node1执行】,修改配置文件,修改conf/hbase-env.sh文件 4. 【node1执行】&#xf…...

百乐钢笔维修(官方售后,全流程)

文章目录 1 背景2 方法3 结果 1 背景 在给钢笔上墨的途中,不小心总成掉地上了,把笔尖摔弯了(虽然还可以写字,但是非常的挂纸),笔身没有什么问题,就想着维修一下笔尖或者替换一下总成。 一般维…...

Redis 介绍安装

数据库 关系型数据库 关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。 SQL 语句(标准数据查询语言)就是一种基于关系型数据库的语言,用于执行对关系型…...

MyCat管理及监控

MyCat原理 在 MyCat 中,当执行一条 SQL 语句时, MyCat 需要进行 SQL 解析、分片分析、路由分析、读写分离分析等操作,最终经过一系列的分析决定将当前的SQL 语句到底路由到那几个 ( 或哪一个 ) 节点数据库,数据库将数据执行完毕后…...

滑动窗口算法题

更新结果 1、判断条件成立后更新结果 2、入窗口后即可更新结果 判断: 出窗口后状态更新,循环回去再判断。 1、长度最小的子数组 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台...

部署zabbix代理服务器、部署zabbix高可用集群

目录 部署zabbix代理服务器 1、环境设置 2、设置 zabbix 的下载源,安装 zabbix-proxy 3、配置Mariadb yum源,并下载marisdb数据库 4.、启动数据库,并初始化数据库 5、登录数据库,创建数据库并指定字符集,并进行…...

[stm32]外中断控制灯光

在STM32CubeMX中配置外部中断功能和参数 1、将上拉输入的引脚设置为:GPIO_EXTI功能 2、GPIO模式设为下降沿触发外部中断,使能上拉电阻,用户标签 3、要将NVIC的相关中断勾选 只有将中断源进行勾选,相关的中断请求才能得到内核的…...

huggingface下大模型最好的方案

一、背景: 搞模型应用,看看别家的模型,huggingface模型大市场,国际明星企业都在上发布开源大模型,一般5G,甚至10G更大,怎么下载呢? 二、方案 1、git clone 会把整个工程给下载下来…...

Maven 密码加密

一、简介 Maven支持服务器密码加密。该解决方案解决的主要用例是: 多个用户共享同一台生成计算机(服务器、CI 框)有些用户有权将 Maven 工件部署到存储库,有些则没有。 这适用于任何需要授权的服务器操作,而不仅仅是…...

Socks5代理和代理IP:网络工程师的多面利器

在数字时代,网络工程师的角色日益重要,他们需要应对跨界电商、爬虫、出海业务、网络安全和游戏等领域的技术挑战。而Socks5代理和代理IP技术作为他们的利器,发挥着至关重要的作用。本文将探讨这两种技术在不同领域的应用,展现其在…...

模拟信号隔离器在水处理控制系统中的应用方案

安科瑞 崔丽洁 摘要:水处理控制系统中,其控制、监测模块的非电量模拟量传感器采用信号隔离器的接线方式合理地解决了相关模拟量传感器供电电源安全和相对独立的问题,保证了监测模块的电源、模拟量采集模块和输出模块的相对隔离,降…...

XML是不是主要用做配置文件?

2023年10月11日,周三下午 这几天发现tomcat的配置文件主要是用XML文件来写的, 于是就有了这个问题。 是的,XML非常适合用来做配置文件。 XML作为配置文件的主要优点: 可读性强。XML使用标签结构组织数据,内容清晰易懂。跨语言和跨平台。XML作为纯文本…...

在 Elasticsearch 中实现自动完成功能 3:completion suggester

在这篇博文中,我们将讨论 complete suggester - 一种针对自动完成功能进行优化的 suggester,并且被认为比我们迄今为止讨论的方法更快。 Completion suggester 使用称为有限状态转换器的数据结构,该结构类似于 Trie 数据结构,并且…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线, n r n_r nr​ 根接收天线的 MIMO 系…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

快刀集(1): 一刀斩断视频片头广告

一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O…...