jmeter工具介绍
一、原理
二、与loadrunner对比
三、目录结构
四、体系结构及控件使用
一、原理
向服务器提交请求,并从服务器取回请求返回的结果。
即建立一个线程池,多线程运行取样器产生大量负载,在运行过程中通过断言来验证结果的正确性,通过监听器来记录测试结果。
二、与loadrunner对比
-
loadrunner由c语言开发,jmeter纯java开发
-
jmeter开源,loadrunner收费
-
jmeter小巧,下载下来直接解压到指定目录下,配置jdk环境就可以了。
-
loadrunner太大,将近4GB
-
jmeter不支持ip欺骗,loadrunner支持。
三、目录结构
- bin目录
examples:存放jmeter使用实例
ApacheJMeter.jar :Jmeter源码包
jmeter.sh:启动文件
jmeter.properties:jmeter配置文件
jmerter-server:启动负载生成器文件
jmeter.log:
- /docs目录——帮助文档
- /extras目录——提供对Ant的支持文件,也用于持续集成
- /lib目录——jar包,安装插件也放这里
- /printable_docs目录——用户手册
四、体系结构及控件使用
1.结构
2.常用控件
测试计划(Test Plan)
一个jmx文件只能有一个测试计划,测试计划中可以定义变量(多是不常变化的数据,例如服务器ip,数据库ip等),引入jar包,编辑测试模式。
run thread groups consecutively:独立运行每个线程组
run teardown thread groups after shutdown of main threads:主线程结束后运行tear down线程组
functional test mode:函数测试模式(只有当你需要记录每个请求从服务器取得的数据到文件时才需要选择函数测试模式。选择这个选项很影响性能。)
工作台(最新版没有工作台,可用代理服务台【http代理服务器】)
控件暂存区,测试过程中把暂时不用的控件放到这里。这里的控件不会保存在jmx文件里,如果要保存,要及时把控件归位。
3.线程组(Thread Users)
一个测试计划内可以存在多个线程组。每个线程组之间的变量相互独立。
Thread Group
Name:线程组名称
Comments:描述/备注
Action to be taken after a sampler error:取样器错误后执行以下操作
continue/start next thread group/stop thread/stop test/stop test now:继续/启动下个线程/停止线程/停止测试/立刻停止
thread properties:线程属性
number of threads(users):线程数量
ramp-up period(in seconds):线程启动间隔时间
loop count:循环次数
scheduler configuration:调度器配置
duration:持续时间
startup delay:启动延迟
setup thread group
测试初始化操作,即线程组开始之前执行的内容,用于初始化测试环境,测试数据准备等。
tear down线程组
测试执行后操作,即线程组执行完成之后执行的内容。可用于清理测试环境,清空测试数据等。
4.Test Fragment 测试片段
与线程组同级别,但是默认不会执行。只有被模块控制器引用的时候才会执行。
5.Sampler 取样器(在线程组下add)
模拟用户操作,向服务器发出http请求、webservice或java请求等。
http请求(Http request)较为常用
例如:Get方法
post方法:
Flow control Action 测试活动(老版本叫Test Action)
请求的执行动作,放在取样器后定义,例如执行某个请求之后暂停等操作。
debug sampler 调试取样器
一般只需要改动name,把需要关注的变量填写在name里,多个变量用逗号隔开即可
6.Pre Processors 前置处理器
取样器请求前执行的操作,可以是获取测试数据,修改参数等。
平时很少用到,常用的是后置处理器。
7.Post Processors 后置处理器
请求执行后的处理,常用的是正则表达式提取器和jason提取器
regular expression extractor 正则表达式提取器
需要某个请求的response里的内容时,可以通过正则表达式来提取。用调试取样器来看正则取出来的内容对不对。
引用名称:提取的内容赋给变量,这里的引用名称就是变量名称
8.Logic Controller 逻辑控制器
if控制器
根据指定表达式的值决定是否执行该节点下的子节点,默认使用JavaScript的语法进行判断。如果if控制器里的语句为真,则继续执行。为假,不执行。
Interpret Condition as Variable Expression?:选中这一项时表示:判断变量值是否等于字符串true
Evaluate for all children:如果选中这一项,在每个子结点执行前都会计算表达式
注:新版本JMeter中的If Controller,在Expression输入框中直接输入判断的表达式,如1 == 1、${threadNum} > 2,而不做求值计算(true/false)就执行JMeter是没有效的,达不到预期的效果。利用JMeter自带的函数助手(Function Helper)中的__jexl3函数或__groovy函数,对判断条件的表达式进行求值计算,生成对应的求值运算函数,然后将此运算函数复制到If Controller的Expression输入框中即可
把条件结果改为真,再次执行,发现该控制器下的请求也执行了。
事务控制器
Generate parent sample:勾选后,该控制器下的所有结果将在父结点中展示,如图
Include duration of timer and pre-post processors in generated sample:选中这一项会统计定时器(timer)的时间,否则只统计采样器(sample)的时间——没用过,后续补充
- 循环控制器
指定该控制器下的请求执行次数,可以填写具体数值,也可以设置为变量。
选中永远,会一直循环执行。
while控制器
后续补充
once only controller 仅一次控制器
该控制器下的请求,针对每个线程只执行一次。
foreach controller foreach控制器
foreach控制器一般和用户自定义变量一起使用。该控制器下的请求,根据设置的参数,相应执行多少次。
input variable prefix:输入变量前缀
start index for loop(exclusive):开始循环字段(不包含)(注:该处不填,默认从1开始。若无1,不执行)
end index for loop(inclusive):结束循环字段(含)
output variable name:输出变量名称(注:每次执行前会把取到的变量值赋给输出变量名称,所以需要调用自定义变量的值时,应当要传输出变量名)
add"" before number:数字之前加上下划线
实例:如上,变量前缀是account,勾选了加下划线的选项,那用户自定义变量命名规范为account+数字,如下所示:
执行结果如下:
简单控制器
这是Jmeter里最简单的一个控制器,它可以让我们组织我们的采样器和其它的逻辑控制器(分组功能),提供一个块的结构和控制,并不具有任何的逻辑控制或运行时的功能。
switch控制器
通过给switch value赋值来指定执行哪个节点。
switch value可赋值为数值,指定执行该控制下某个节点。(注:switch控制器下的节点是从0开始计数的)
switch value 也可赋值为某个节点名称。
switch value如果不填,默认执行第一个节点
实例:
执行结果如下:
Throughput Controller 吞吐量控制器
控制其下的子节点的执行次数与负载比例分配
Total Executions:设置运行次数
Percent Executions:设置运行比例(1~100之间)
没用到,后续补充
7.Config Element 配置元件
CSV数据文件设置
多用于数据读取测试数据
实例:在这里插入图片描述
HTTP信息头管理器
定义信息头,在其覆盖下的所有元件都会使用该信息头。
HTTP cookie管理器
暂时没用到,后续补充,参照【链接】Jmeter使用入门
https://www.cnblogs.com/ceshisanren/p/5639895.html
JDBC Connection Configuration
只用于数据库连接操作。该控件通常要配合JDBC Request使用
实例:
填写数据库地址信息以及账号密码,选择mysql jdbc 驱动(注:事先下载的数据库jdbc驱动jar包放到jmeter安装路径的lib目录下即可)
添加取样器JDBC Request,填写相应的sql语句等相关信息
执行结果如下:
用户定义的变量略
8.Timer 定时器
类似思考时间,控制取样器的间隔时间。
固定定时器
固定定时器不计入单个取样器的响应时间,只计入事务控制器的时间。
高斯随机定时器
指定时间范围内随机。
同步定时器
loadrunner中集合点的存在,取样器到该定时器下会暂停,达到指定线程数后并发。
没用过,后续补充
9.断言
判断请求响应值是否正确的控件,常用的是响应断言。
实例:设置如果返回的code不是300,就判定为错误(注:断言要放在请求内部)
10.Listener 监听
查看请求执行结果的控件,常用的是察看结果树和聚合报告
察看结果树
可查看请求响应的结果、请求内容和响应数据。
可自定义把数据写入 某个文件内,请求很多的时候,可以通过查找功能进行定位查看
聚合报告
lable:sampler的名字
样本:每个sampler发出的请求数
平均值:平均响应时间,默认情况下是单个请求的平均响应时间,如果使用事务控制器,就是指单个事务平均响应时间。
中位数:50%用户的响应时间
90%百分位:90%用户的响应时间
95%百分位:95%用户的响应时间
99%百分位:99%用户的响应时间
最小值:最小响应时间
最大值:最大响应时间
注:以上单位为ms
异常%:错误请求所占百分比
吞吐量:默认表示每秒完成的请求数(TPS)
压测综合实例:
如果对软件测试有兴趣,想了解更多的测试知识,解决测试问题,以及入门指导,
帮你解决测试中遇到的困惑,我们这里有技术高手。如果你正在找工作或者刚刚学校出来,
又或者已经工作但是经常觉得难点很多,觉得自己测试方面学的不够精想要继续学习的,
想转行怕学不会的,都可以加入我们644956177。
群内可领取最新软件测试大厂面试资料和Python自动化、接口、框架搭建学习资料!