众所周知,借助于jmeter工具可以进行接口测试和性能测试。本文主要是介绍一下jmeter性能测试,以下面的流程图为主线进行主要模块的简单介绍。
jmeter 下载安装
- 官网下载 http://jmeter.apache.org/
- 正则表达式测试器下载地址: http://deerchao.net/tools/regester/index.htm (关联时会用到正式表达式)
线程组
1.线程组,或者可以叫用户组,进行性能测试时的用户资源池。
2.是任何一个测试计划执行的开始点。
3.“控制器”和“HTTP请求”(采集器)必须在线程组内;监听器等其他组件,可以直接放在测试计划下。
- 线程数:发送请求用户数
- Ramp-up period: 每个请求发生的总时间间隔,单位是秒
- 循环次数:请求发生的重复次数
逻辑控制器
循环控制器、事务控制器如下图,建议事务控制器放在要测试的请求前面、循环控制器以内,这样请求数和事务数一致。
线程组和循环控制器使用说明,如下图配置了两个线程组(参数化了两个用户)、但循环设置了2次,所以循环控制器内的接口调用次数=线程组*循环次数
配置元件——User Defined Variables
点击线程组添加配置元件→ User Defined Variables(用户定义的变量)
PS:User Defined Variables中定义的参数值在test plan执行过程中不能发生取值的改变,因此一般仅将test plan中不需要随迭代发生改变的参数(只取一次的参数)设置在此处;例如:被测应用的host和port值。
设置用户自定义变量后,所有的接口请求就可以直接引用变量,方法:${变量名}
好处:以后访问地址变更,直接修改自定义的变量值即可。
添加http请求
在控制器上右键添加---Sampler---HTTP请求,输入服务器名称、路径、方法一般是post
协议如果是https,直接在http采集器中协议部分填写https
如果请求体采用parameters方式,不需要添加http信息头管理器;如果是body data, 一般采用json串格式,需要添加http信息头管理器
http信息头管理器
如果请求体是body,需要添加http信息头管理器运行时请求才能成功,body一般是json串格式,所以配置Content-Type对应的值application/json
用户请求的headers中一般都需要携带用户登录信息,也可以以变量形式写在信息头管理器中,登录响应结果提取见关联部分介绍。
关联
接口请求之间存在参数调用,为了保存这个参数,需要建立关联。有两种方式,个人比较喜欢用正式表达式。
正则表达式:
- 正则表达式提取器:通过正则表达式提取器 取响应值存储到变量中,供后续接口调用;
- 数据提取器,一般简单的通用语法就是:左边界(.*?)右边界,左右边界就是为了能准确定位到想匹配的内容;
- *代表0次或多次匹配前面的表达式,+代表1次或多次匹配。
- 模板:$1$表示取第一组
- 匹配数字:1代表第一个匹配
用到此参数的接口,参数值直接用${引用名称}即可。
借助插件:json path extractor,具体操作没继续研究。
- json path extractor:jmeter通过安装json path extractor插件来处理json串,提取json串中的字段值。
- 插件的下载地址:https://jmeter-plugins.org/?search=jpgc-json,下载完成,解压后,直接把lib文件夹放到jmeter相应目录下面
Parameters的两种参数化方法
参考文章 https://testerhome.com/topics/12113 此文章写的比较详细,此处不再赘述
- 函数助手参数化
- 借助jmeter中的配置元件:CSV Data Set Config --适用于JSON格式参数化
Synchronizing Timer(集合点)
在控制器右健添加---定时器---Synchronizing Timer, 添加如下集合点组件。
注意:集合点要放在请求前面才能生效。
Number of Simulated Users to Group by:集合多少人后再执行请求
Timeout in milliseconds:多少秒没集合到指定人数 算超时
- 可以在线程组的任意位置添加集合点。集合点可以和线程组的“线程属性”和“调度器”结合使用,主要是为了保证所有的用户到达集合点并能发生并发。
-
Synchronizing timer 仅作用于同一个JVM中的线程,所以,如果使用并发测试,确保"Number of Simultaneous Users toGroup by"中设置的值不大于它所在线程组包含的用户数,通常设置和线程组包含的用户数相同即可。
-
使用中发现最后一批线程数不够集合点数目时,jmeter会停止不动,所以按照 线程用户数%集合并发数=0 的规则来设置两者间关系,才能保证运行成功。
断言
(1)路径:断言----响应断言:主要对请求的结果的是否包含指定内容进行判断
(2)监听器----断言结果:如果失败会有失败提示,便于查看结果。
察看结果树
线程组右键添加---监听器---察看结果树
整个线程组运行完成后,点击察看结果树可以看到每个接口运行情况。
Aggregate Report(聚合报告)
线程组右键添加---监听器---Aggregate Report
-
Average --平均响应时间单位ms,默认情况下是单个request的平均响应时间
-
Throughput --吞吐量,默认情况下表示第秒完成的请求数(Request Per Second)
jmeter自带的报告比较简单,如果想要监控cpu、内存、IO资源等,主要有两种方式:
1、去官网下载jmeter集成的监控插件PerfMon,serverAgent 部署在被测服务器
2、Nmon 监控软件
此处不再展开描述,有空再单独分析。
来源:https://www.cnblogs.com/yangls/p/10804555.html