【性能测试】JMeter的使用介绍
1、性能测试的相关概念
-
负载: 模拟业务操作对服务器造成压力的过程
-
性能测试(performance Testing): 模拟用户负载来测试系统在负载的情况下,系统的响应时间,吞吐量等是否满足性能要求+负载测试(Load Testing):在一定软硬件环境下,通过不断加大负载来确定在满足性能指标情况下能承受的最大用户数
-
压力/强度测试(Stress Testing):在一定的软硬件环境下,通过高负载的手段来使服务器资源处于极限状态,测试系统在极限状态下长时间运行是否稳定
-
稳定性测试(Endurance Testing): 在一定的软硬件环境下,长时间运行一定的负载,确定系统在满足性能指标的前提下是否运行稳定
2、Jmeter主要元件
2.1、测试计划
2.2、线程组
一般都会建立线程组,可以实现多线程,loadrunner里面有多进程的方式
逻辑控制器和取样器必须放到线程组下,其他元件位置不同作用域不同。
还有 setDown线程组 和 tearDown线程组
一般是 取样器前准备工作,一般是创建用户什么的和线程结束后的收尾工作
2.3、逻辑控制器
if控制器
把取样器放在其下,满足if控制器的条件才会执行取样器
事务控制器
把多个取样器放到一个事务控制器下,例如登录的取样器,放到登录的事务下,然后可以选中聚合报告里面显示事务还是取样器
循环控制器
就是制定某些取样器循环执行次数的。
交替控制器
在线程循环的时候,交替执行子控制器里的取样器
有忽略子控制器块的选项,意思就是交替控制器下面的子控制器不起作用
2.4、取样器
http请求
建立在线程组下面,参数和消息体数据对应param和url中的数据
基础
高级
Debug 取样器
除了可以显示Jmeter变量值外,还可以显示Jmeter属性,有时候要用到Jmeter或者系统变量,可以通过Debug 取样器,再用正则表达式提取器获取
JDBC取样器
数据库交互,通过配置数据库信息(配置元件里有JDBC Connection Configuration),设置sql语句(可以设置变量),将结果指定给变量,就可以查看了
2.5、配置文件
Http请求默认值
就是取样器的默认值,别的取样器空值就会用这个默认值
Http Cookie管理器
放到测试计划下面,就可以自动的记录cookie,给线程组里的线程添加cookie了
Http Cache管理
又叫缓存管理器,也是放到测试计划下面。
简单的来说有部分资源是缓存到本地的,服务器根据反馈的时间来看是否需要更新,不需要更新就返回304状态码,使用本地的缓存。
需要更新就返回200
Http授权管理器
就是记录登录信息的,省的每次都需要登录
用户定义变量
和测试计划里的定义变量功能是一样的
CSV Date Set Config
从文件中读取数据用的,一般多个用户登录的时候,账户信息放到其中
JDBC Connection Configuration
2.6、前置处理器
作用在线程组下面,作用域就是全部线程组,某个取样器下就是对应的取样器
用户参数
有一个勾选的每次迭代更新一次,就是说如果在循环控制器里面,每次线程循环更新一次变量,循环控制器内,所有取样器变量值相同。(是针对于可变的函数的时候用,如果都是固定值,那没什么影响)
2.7、后置处理器
在取样器执行之后执行,作用域和前置处理器一样,需要注意的是,后置处理器是在断言之前执行的,所以不能访问断言的结果
正则表达式提取器
和java的正则表达式基本一样
XPath提取器
和selenium里的path一样
2.8、定时器
固定定时器
统一随机定时器(Uniform Random Timer)
高斯随机定时器
同步定时器,就是集合到一定的线程统一释放,方便并发
固定吞吐量定时器
2.9、断言
取样器之后执行,作用域和定时器一样
响应断言:
可以对返回体设置断言,可以是文本等等格式,这样就知道为什么错误的请求为什么错了。
Xpath断言
BeanShell断言
2.10、监听器(重要)
监听显示保存测试结果
察看结果树:
分析查看具体某一个请求的详情(可以选择仅查看错误或仅查看成功):
- 请求头,请求体
- 返回头,返回体
- 分析错误原因
(需要注意的是,性能测试的时候是不能用察看结果树的,因为它会占用大量的资源)
表格查看结果:
没有聚合报告那么详细,但是有接口启动时间,能看到请求规划
聚合报告(重要):
- 请求数、响应时间(90%的线程响应时间低于,95%,99%,min, max)单位是ms
- 错误率 (错误的请求/所有的请求)
- 吞吐量(每秒的请求数)
- 发送/接收 带宽 (即每秒多少kb)
3、Jmeter 属性、执行顺序和作用域
3.1、属性
Jmeter的属性文件有:
jmeter.properties
system.properties
user.properties
属性是全局的,可以在命令行里使用的
调用属性的方式:{__P(threadnum,1)} (注意这里是两个下划线)
3.2、作用域
像配置文件里的cookie、缓存管理等,建立了多个也只会执行一个
3.3、执行顺序
3.4、非GUI模式执行脚本
例子:jmeter -n -t 禅道.jmx -Jthreadnum=600 -l log.jtl -e -o D:\Jmeter\脚本文件\禅道\resultDir