基于Jmeter的压力测试

Code 代码
2月 16, 2020 ~

压力测试步骤

1.确定压测需求目标,多少算合理
PS:通过和开发业务咨询,确定目标的并发数、TPS和响应时间
概念定义:
并发数:系统同时处理的事务数
TPS:每秒钟处理事务数
响应时间:一般取平均响应时间
TPS = 并发数/响应时间

2.编写jmeter脚本,调通接口,看接口是否能正常运行;

3.根据压测目标数,不断增加压力峰值,找到性能拐点,通常是通过系统吞吐量(TPS)来控制。
在不断增加压力下,到系统最高值,系统的吞吐量就上不去了,如果压力继续增大,系统的吞吐量反而会下降,此时最高点就是性能测试的拐点

4.在拐点处进行压测5min,查看数据库和服务器应用的性能情况
应用服务器:通过top(监控CPU),free(监控内存),iostat(监控磁盘swap),还有综合工具vmstat,超级监控工具dstat
数据库监控:通过配置数据库文件,开启慢日志查询,监控数据库CPU,内存,磁盘的IO等


软件安装过程在此省略,请自行百度

组件说明

微信截图_20200216205319

测试计划

整个测试依赖一个测试计划,相当于一个项目,里边可以包含多个以下组件

线程组

a.Number of Threads(users) :线程数,一个线程相当于一个虚拟用户

b.Ramp-Up Period(in second):线程启动开始运行的时间间隔,单位秒。即所有线程在多长时间内全部启动。例如线程60个,Ramp-Up Period设置为20s,那么每秒启动60/20=3个线程,不填写默认设置为0,即所有线程在开启场景后立即启动。

c.Loop Count:循环次数。勾选forever,将一直执行,除非手动停止或崩溃

d.Delay Thread creation until needed:延时创建线程直到该线程需要采样时。
勾选,例如50个线程Ramp-Up Period为10s,那么每隔1s启动50/10=5个线程并运行下面的请求(状态为running);不勾选,测试计划开始后启动所有线程(状态为new),但是不立即执行下面的请求。例如50个线程Ramp-Up Period为10s,那么计划开始后所有线程全部就绪,但第一秒只有5个线程开始运行请求。实际应用中选择哪种都可以,不影响测试结果。
个人理解:例如银行办业务10个人,勾选,柜台只有一个人在办理(running状态),剩下的人可以坐在位置上等候;不勾选,10个人都站在柜台外面排队等候(不是坐着),等待叫号。

取样器

各种不同的事件触发器,比如http请求 mqtt连接

监听器

用的较多的内容介绍如下

聚合报告

  • Label:请求的名称,就是我们在进行测试的httprequest sampler的名称
  • Samples:总共发给服务器的请求数量,如果模拟10个用户,每个用户迭代10次,那么总的请求数为:10*10 =100次;
  • Average:默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,以Transaction 为单位显示平均响应时间 ,单位是毫秒
  • Median: 50%用户的请求的响应时间,中位数
  • 90%Line:90%的请求的响应时间
  • 95%Line:95%的请求的响应时间
  • 99%Line:99%的请求的响应时间
  • Min:最小的响应时间
  • Max:最大的响应时间
  • Error%:错误率=错误的请求的数量/请求的总数
  • Throughput: 默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数
  • KB/sec: 每秒从服务器端接收到的数据量

查看结果树

用表格查看结果

逻辑控制器

类似编程语言中的逻辑判断

  • 循环控制器
  • 事务控制器

断言

预期的结果

配置元件

配置该测试计划的各种配置信息

前置、后置处理器

在请求前后做的事情

定时器

参数

函数助手
csv data

命令行

jmeter -g test.jtl -o /path
# -g:后跟test.jtl文件所在的路径
# -o:后跟生成的HTML文件存放的路径

jmeter -n -t ezCloud.jmx -l ezCloud.jtl -e -o d:\ezCloud
# -n:以非GUI形式运行Jmeter 
# -t:source.jmx 脚本路径 
# -l:result.jtl 运行结果保存路径(.jtl),此文件必须不存在 
# -e:在脚本运行结束后生成html报告 
# -o:用于存放html报告的目录    

示例

1.编写测试计划

2.录制测试脚本

  • badboy
  • jmeter自带的代理
  • fiddler或者wireshark抓包软件

3.添加线程组,添加取样器,增加监听器

3.执行测试
4.监控结果生成测试报告

Tips

jemter每次的测试结果是累加的 所以可以点击全部清除 清除掉上一次的测试结果

QA

语言切换

方法1
依次点击Options-->Choose Language-->Chinese(Simplified)即可配置成中文简体,需注意的是该方法只对当次生效,下次打开Jmeter依然是英文。如需永久生效,请使用下面两种方法。

方法2
——修改jmeter.properties文件
打开jmeter解压缩文件下的bin目录,找到jmeter.properties文件并用编辑器打开,
在#language=en下面插入一行language=zh_CN,修改后保存
重新启动Jmeter界面显示为中文简体

方法3
——修改jmeter.bat文件
使用编辑器打开JMeter启动文件jmeter.bat
将set JMETER_LANGUAGE=-Duser.language="en" -Duser.region="EN"修改成set JMETER_LANGUAGE=-Duser.language="zh" -Duser.region="CN",保存代码
重新启动Jmeter界面显示为中文简体

标签