1. 什么是性能测试
性能测试即通过工具来模拟用户请求,达到查看服务性能是否能满足实际生产需求的目标。系统性能好坏是一个相对概念,核心思想是能满足生产需求,因此进行性能测试时,需尽量模拟系统在生产环境中的使用情况。
2. 创建测试资源池
通过安装包安装 MeterSphere 后,系统默认使用当前节点创建了名为 LOCAL
测试资源池。
通过在测试资源池中添加多个测试执行节点的方式来支持分布式的性能测试。在我们向一个测试资源池中添加节点时,除了节点的 IP、端口信息外,还需要根据该节点的机器规格,配置该节点可以支持的最大并发数。当我们在执行性能测试的过程中选择了某个测试资源池时,MeterSphere 会将本次性能测试定义的并发用户数,按照所选测试资源池的节点支持的最大并发数进行按比例拆分。
3. 创建性能测试
性能测试脚本支持导入 JMeter JMX测试计划,还支持基于接口测试用例脚本和接口自动化场景一键转性能测试。
方法一:进入【性能测试】-> 【测试】页面。在性能测试列表中点击【创建性能测试】,在【场景配置】点击【引用接口自动化场景】,将已有的接口自动化场景添加到性能测试中。
方法二:进入【性能测试】-> 【测试】页面。在性能测试列表中点击【创建性能测试】,在【场景配置】点击【加载 JMX 文件】,即可上传 JMX 文件。
方法三:从接口 case 列表或场景列表中将需进行性能测试的用例,点击【创建性能测试】,即可一键转成性能测试用例。
4. 性能测试配置参数说明
4.1 线程组
支持两种模式。ThreadGroup 和 ConcurrencyThreadGroup。从发压模式来讲 ConcurrencyThreadGroup 是阶梯加压,ThreadGroup 直线指线性加压。
4.2 压力配置
点击【压力配置】设置压测基本的测试数据。资源、组合场景发压策略设定等信息。
- 资源池:指定测试的测试资源池,系统支持独立主机和 K8s 资源池配置,其可用资源池依据系统的资源池配置。
- 顺序执行场景:按照场景排列顺序,依次执行,因为系统支持多场景组合压测,对于有些场景是有顺序要求的,此需要把开关打开。
- 自动停止:用于当压测执行时长到达设置的时长,依然还有接口未执行完成时,延迟时间设置。
- 并发用户数:执行性能压测时,并行执行的用户数。
- 执行方式:1)按持续时间:设置本次压测需要持续执行多长时间,压测运行时长达到设定的时间就停止压力测试。目前系统提供按小时、分钟、秒来设置。2)按迭代次数:设置本次压测执行的次数,并且设置运行时间,压测运行次数达到设定的次数或者到达设置运行的时间,就停止压力测试。
- Ramp-Up:并发用户数到达指定个数所花费的时间,Step 是分几步达到。
- 压测时长:性能测试用例执行压测的时长。
- RPS:每秒请求数,用于避免短时间压力过大,如果设置了 RPS 上限,则发压达到这个值后,就不会再继续加压。
- 分配策略:性能测试线程分配到压力机的策略,1)自动分配:根据压力机当前资源使用情况,按资源池节点最大并发数占比比例分配。2)固定节点:设置资源池中固定的压力机来执行性能测试。3)自定义:自定义每个节点执行分配占比。
4.3 高级配置
进入性能测试脚本编辑页面,选择【高级配置】,进入性能测试高级配置页面。高级设置分为多部分:常规、域名绑定、CSVDataSet、自定义变量、JMeter Properties、System Properties、监控等。
- 连接超时:设置接口连接超时时间,连接时超过设置的时间就不在连接。
- 响应时间:设置接口响应超时时间,等待响应时超过设置的时间就不在等待响应。
- 聚合时间:表示报告采集时间也叫打点时间,是指测试报告刷新数据时间。
- 自定义响应码:表示指在这里设置的响应码,就不统计为失败的接口。系统支持添加多个响应码,按逗号分割。默认200为正确的响应码,应用于非标准接口响应状态码。
- 域名绑定:设置自定义域名解析,用于私有域名的解析。
- CSVDataSet:系统会根据压测策略自动来分割 CSV 数据文件里的参数,把不同的参数分配给不同的业务场景。1)csv分割:用于设置CSV文件分割配置,用于不同压力机执行CSV参数中不同段的参数,避免参数重复。2)包含表头:如果csv数据包含表头,不同压力机执行时,需要开启包含表头,否则除了第一个节点外其他节点读取不到参数值。
- 自定义变量:用于性能测试脚本中参数变量的配置。
- JMeter Properties:用于 Jmeter 配置文件中的配置项设置。
- System Properties:用于系统环境变量配置。例如:性能测试有用到证书,除了要在资源文件里添加外,还要在 System_Properties 里进行配置。
- 监控:MeterSphere 自带 Prometheus 服务,可添加自定义exporter及监控项进行压力机及被压服务的监控。
5. 性能测试执行
5.1 手动执行和定时任务执行
完成性能测试以上的相关配置,点击【保存】完成性能测试用例的创建,点击【保存并执行】系统会在保存后,直接运行该性能测试,也可以配置定时任务执行该测试。
6.性能测试报告
7. 性能指标分析和参数说明
7.1 请求统计参数说明
请求统计:性能测试所有请求情况的统计和分析。
- Samples:总请求数(samples样本个数)。
- Error%:出现错误的请求数/请求总数(百分比值)。
- Avg:平均响应时间(单位:毫秒)(所有请求的响应时间之和/总请求数)。
- Min(最小值):用户响应时间最小值。
- Max(最大值):用户响应时间最大值。
- Med(中位数):50%的用户响应时间小于这个值。
- 90%(90%百分位):90%的用户响应时间小于这个值。
- 95%(95%百分位):95%的用户响应时间小于这个值。
- 99%(99%百分位):99%的用户响应时间小于这个值。
- Throughput(吞吐量):简称TPS,吞吐量,默认情况下表示每秒处理的请求数,也就是指服务器处理能力,TPS越高说明服务器处理能力越好。
- Recd (接收KB/sec):每秒从服务器端接收到的数据量。
- Sent (发送KB/sec):每秒发送的数据量。
7.2 性能指标分析
在系统性能方面,用户一般的关注点在于如下三点:系统是否满足上线性能要求,系统极限承载能力,系统稳定性能力。因此针对上述三个关注点,需要搜集和监控系统的一些性能指标。
7.2.1 并发用户数
定义并发用户数指标时,要根据系统业务特点,分析有可能产生大量用户并发访问的功能点,以此功能为重点,分析平均并发用户数和最大并发用户数的要求。计算并发用户数的方法一般分为两类,一类为有业务数据参考,一类为无业务数据参考;
有业务数据参考:
方法一
- 平均并发用户数:C=nL/T
- 最大并发用户数:Ñ≈C+C根号3
其中:C代表平均并发用户数,Ñ代表最大并发用户数,n是访问系统用户数量(一般平均每天的用户访问量),L是用户访问系统平均 时间(单位分钟),T是用户使用系统时间段(单位分钟)。
方法二
- 并发用户数:系统最大在线用户数的8%到12%。
无业务数据参考:
方法一
- 公式为 C = (Think Time + RT)*TPS
其中:RT代表系统响应时间,Think Time代表用户思考时间。
7.2.2 吞吐量
吞吐量是指单位时间内系统能够完成的工作量,它衡量的是软件系统服务器的处理能力,就是在一秒中统计所完成的工作量。一个系统的吞度量(承压能力)与请求对CPU的消耗、外部系统接口、IO等等紧密关联。单个请求对CPU消耗越高,外部系统接口和IO速度越慢,系统吞吐能力越低,反之越高。
7.2.3 TPS(每秒事务数)
TPS是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。事务是用户某一步或几步操作的集合,这些操作共同构成一个有意义的业务场景。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数,TPS的预估方法如下(最大TPS计算一般是TPS*2~5):
普通计算方法:
- 计算公式:TPS=C/ (Think Time + RT)
二八原则计算方法:
- 计算公式: TPS = 总请求数 80% / (总时间20%)
无论TPS、QPS、HPS,此指标是衡量系统处理能力非常重要的指标,越大越好,具体数值还是要根据系统自身业务情况确定。
7.2.4 响应时间
响应时间指用户从客户端发起一个请求开始,到客户端接收到从服务器端返回的响应结束,整个过程所耗费的时间。在性能测试中一般以压力发起端到被压测服务器返回处理结果的时间为计量,单位一般为毫秒。
7.2.5 CPU指标
中央处理器是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Control Unit)。它的功能主要是解释计算机指令以及处理计算机软件中的数据。CPU Load:系统正在干活的多少的度量,队列长度。系统平均负载。CPU指标主要指的CPU使用率、利用率,包括用户态(user)、系统态(sys)、等待态(wait)、空闲态(idle)。CPU使用率、利用率要低于业界警戒值范围之内,即小于或者等于75%、CPU sys%小于或者等于30%,CPU wait%小于或者等于5%。单核CPU也需遵循上述指标要求。CPU Load要小于CPU核数。
7.2.6 内存指标
内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。现代的操作系统为了最大利用内存,在内存中存放了缓存,因此内存利用率100%并不代表内存有瓶颈,衡量系统内有瓶颈主要靠SWAP(与虚拟内存交换)交换空间利用率,一般情况下,SWAP交换空间利用率要低于70%,太多的交换将会引起系统性能低下。
7.2.7 磁盘指标
磁盘吞吐量是指在无磁盘故障的情况下单位时间内通过磁盘的数据量。磁盘指标主要有每秒读写多少兆,磁盘繁忙率,磁盘队列数,平均服务时间,平均等待时间,空间利用率。其中磁盘繁忙率是直接反映磁盘是否有瓶颈的重要依据,一般情况下,磁盘繁忙率要低于70%。
7.2.8 网络I/O
网络吞吐量是指在无网络故障的情况下单位时间内通过的网络的数据数量。单位为Byte/s。网络吞吐量指标用于衡量系统对于网络设备或链路传输能力的需求。当网络吞吐量指标接近网络设备或链路最大传输能力时,则需要考虑升级网络设备。网络吞吐量指标主要有每秒有多少兆流量进出,一般情况下不能超过设备或链路最大传输能力的70%。