基于Jmeter的压力测试

Code 代码
2020年2月16日 ~

压力测试步骤

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界面显示为中文简体

标签

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.