环境搭建
1.安装java 8.0以上版本
2.下载jmeter并安装。安装参考网址:https://blog.csdn.net/wust_lh/article/details/86095924
3.打开JMeter中bin目录下面的jmeter.bat文件即可打开JMeter了,打开的时候会有两个窗口,Jmeter的命令窗口和Jmeter的图形操作界面,不要关闭命令窗口。(也可以配置环境变量,在cmd下使用jmeter启动)
Jmeter各组件的执行顺序
1、配置元件:配置一些全局参数
2、前置处理器:运行前需要处理的数据
3、定时器
4、取样器(sampler)
5、后置处理器 :处理响应结果
6、断言
7、监听器
请求并查看响应
a.添加线程组
添加取样器–HTTP请求
添加监听器,查看结果树。
6.
查看结果树:
get/delete/put请求
GET请求
put请求
delete请求
断言
想要看到断言结果,需要添加监听器,断言结果
添加响应断言
两个断言都失败了?为什么我这返回的没有百度一下。
响应结果的中文都是乱码了。
参考这篇文章解决
https://www.cnblogs.com/xiaxiaoxu/p/9607017.html
再次请求,一条断言成功,一条断言失败。
响应断言,JSON断言
https://www.jianshu.com/p/0ab3e5e22673
响应断言
响应断言的适用于返回的是HTML文本,或者是XML文本等格式,控制面板中允许添加要与请求或响应的各个字段进行比较的模式字符串。
json断言
json断言
1.json断言,请求结果需要是json格式的
注意这里$后面必须有一个点.
2.添加断言结果
断言失败才会在断言结果中显示。
配置元件
HTTP信息头
请求,会发现request headers有显示添加上的信息头
CSV data set config
配置元件之CSV数据文件配置
添加CSV Data Set Config
CSV数据文件配置
在变量名称处填写变量,如果需要忽略首行,则设置为True。
CSV文件
设置变量引用 ${变量名}
这个设置后,还需要设置线程组的数量,如测试数据有100个,则线程组设置100个,即可读取100个测试数据。
用户定义变量
21天Jmeter打卡day15 配置元件之用户定义的变量+抽离公共数据
https://www.jianshu.com/p/b2e40ff62952
添加配置元件,用户定义的变量
把协议和请求设置为用户自定义变量
设置引用
执行请求,读取变量成功
逻辑控制器
循环控制器
逻辑控制器之循环控制器
https://www.jianshu.com/p/53335b2ff9be
添加循环控制器,设置循环次数为2
这样设置,就是执行四次
注意循环控制器内的组件会被循环执行,如果组件不在循环控制器内,则不会被循环。
如图,HTTP请求和CSV配置,都在控制器内。
If控制器
逻辑控制器之if和简单控制
https://www.jianshu.com/p/9e3838cfb220
1.读取所有数据 循环控制器设置次数为6
2.添加if控制器 注意接口需要在if控制器下
3.登录名不等于IDO127
线程用户
setUp和tearDown
setup一般可用来请求登录接口,返回token.
其实学过unittest,就知道setup和teardown分别是测试类的初始准备工作和结束工作。
监听器
21天Jmeter打卡Day14 监听器之查看结果树+断言结果+聚合报告+图形结果+表格查看结果
https://www.jianshu.com/p/c81806d82142
先写文件路径,再执行线程。
jtl格式的打不开?
响应断言:
断言结果:
汇总报告:
聚合报告:
断言结果:如果没有写断言,或者成功,只显示请求名称。
图形结果:
表格查看结果:
断言结果写入文件:
后置处理器
json提取器、BeanShell后置处理程序接口关联
参数传递 token传递,接口关联
https://www.jianshu.com/p/e3a116f7bf6b
实现效果,把第一个请求的响应结果,提取出来,作为变量传入第二个请求。
1.在请求下添加【JSON提取器】和【BeanShell后置处理程序】。
可以在要提取的接口的响应结果通过json path 来测试下能不能取到值。
同线程组和不同线程组,用的变量不一样。同用的是vars,不同用的是props
//同线程组
vars :操作 jmeter 变量,它是测试用例与 BeanShell 交互的桥梁,常用方法:
vars.get(String key):从jmeter 中获得变量值
vars.put(String key,String value):数据存到 jmeter 变量
//跨线程组
props :操作 jmeter 属性,该变量引用了 JMeter 的配置信息,可以获取Jmeter
的属性,它的使用方法与 vars 类似,但是只能 put 进去 String 类型的值,而不能是一个对象。
props.get(“START.HMS”);START.HMS 为属性名,在jmeter.properties 中定义
props.put(“PROP1”,“1234”);
同线程组设置变量
在第二个请求中读取该变量,注意需要加双引号
也可以在信息头中读取该变量
查看结果。token成功读取到值。
请求头也成功读取到值。
后置处理器_JSON_正则表达式_边界提取器_完成删除场景模拟测试
https://www.jianshu.com/p/5c1d64e5d724
Json提取器见Day16
正则表达式
正则表达式提取器填写引用名称和表达式
BeanShell后置处理程序提取变量并赋值
在下一个接口引用变量
{
“blog_name”:“21天打卡”,
“bolg_title”:“Jmeter打卡之Day16”,
“blog_details”:“21天打卡”,
“token”:“${__P(loginName,)}”
}
前置处理器
前置处理器_熟悉常用组件
前置处理器使用场景
1、准备测试数据
2、数据加密–BeanShell 预处理程序
3、连接数据库取数据 --JDBC预处理程序
https://www.jianshu.com/p/84866b2315f8
BeanShell 预处理程序
这里引用了用户自定义变量中的passwd,并把这个值加密为passwd_base。
在登录接口请求中引用加密后的密码(我这里请求后失败了,没找到原因)
数据库连接
21天Jmeter打卡Day19 JDBC连接数据库增删改查,抛出变量
https://www.jianshu.com/p/2d1a3ae8cbd7
1.安装Mysql驱动
下载地址:https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.44.zip
解压后将.jar驱动文件拷贝到jmeter安装目录lib文件夹下
2.JDBC connection Configuration
添加JDBC connection Configuration
参数说明:
Variable Name:数据库连接池的名称,名字可自定义,但是必须与* * JDBC Request中的Variable Name保持一致
Database URL:数据url jdbc:mysql://主机ip或者机器名称:mysql监听的端口号/数据库名称,例如:jdbc:mysql://localhost:3306/sqltest
jdbc:mysql://localhost:3306
JDBC Driiver class:JDBC驱动
Username:数据库登录的用户名
Password:数据库登录的密码
3.添加JDBC Request
参数说明:
Variable Name:数据库连接池的名字,需要与JDBC Connection * * * Configuration 的 Variable Name Bound Pool 名字保持一致
SQL QUERY:多条sql语句,需要用“;”隔开
Select Statement:仅支持测试select语句,并且一次只能测试一条
Update Statement:支持测试费select语句,并且支持测试多条
若中夹杂select语句,会自动忽略若第一条语句为select语句,则会报错
Callable Statement:语法正确,支持多条任何语句,如果需同时执行多条语句,JDBC Connection Configuration 中 Database URL,配置中加上?allowMultiQueries=true,否则报错(例如:jdbc:mysql://localhost:3306/sqltest?allowMultiQueries=true)
Parameter valus:参数值
Parameter types:参数类型,(例如:int char varchar等)
Variable names:保存sql语句返回结果变量名
Result variable name:创建一个对象变量,保存所有返回的结果
Query timeout:查询超时时间
Handle result set:定义如何处理由callable statements语句返回的结果
4.运行线程,查看结果。
添加一个察看结果树,运行线程。
可以看到成功取出数据库表中的数据。
5.引用变量
在JDBC_Request中声明变量
在需要用到变量的请求中引用,注意这里_1表示取结果的第一个值。
在请求结果可以看到,成功取到第一个值。
作业场景
使用上述的操作方法,自行完成Jmeter操作数据库并取出里面的值(一个就好,有兴趣的可以取出所有的),并思考这个JDBC request能在测试中帮助我们做什么工作?
作用:取出数据库的测试数据
疑问,login_name_1只取出了第一个值,如果操作能将取出的所有值都赋值给同一个请求呢?–foreach控制器
ForEach控制器
参数说明:
输入变量前缀:本例中为login_name(与JDBC Requse中的返回结果Variable names变量名一致)
Start index for loop (exclusive):循环开始的索引(默认从0开始,如果填写是2,实际是从2+1个开始执行)
End index for loop(inclusive):循环结束的索引
输出变量名称:提供给其他控件引用,可自定义,调用时使用该参数
Add“-”before number:输入变量名称中是否使用-进行间隔。
将需要循环取值的请求放在ForEach控制器下,这里输入参数为${login_name},每次Foreach从数据库取出一个值,就执行一次请求。
执行请求,数据库一共15条数据,这里执行了15次请求,每次取出了一个loginname赋值给请求。
测试报告
生成HTML测试报告
参考:https://www.jianshu.com/p/bc42f8c69fee
方式一:GUI生成
方式二:CLI生成
修改JMeter 下 bin 目录中的jmeter.properties 配置文件
jmeter.save.saveservice.output_format=csv
在测试脚本文件路径下,执行cmd 命令:
参数说明:
参数 说明
-n 非GUI 模式执行JMeter
-t 执行测试文件所在的位置
-l 指定生成测试结果的保存文件,jtl 文件格式
-e 测试结束后,生成测试报告
-o 指定测试报告的存放位置
//1.无.jtl文件生成测试报告(注意修改路径)
jmeter -n -t test.jmx -l result.jtl -e -o html
//jmeter是执行命令, -n -t 参数,test.jmx是jmeter文件(可以带路径),-e -o 是参数 ,html是位置
这种方式以非GUI模式执行jmeter,先生成jtl文件,再生成html报告。
从测试报告可以看出,sorcefile是result.jtl
执行结果100%pass
JDBCRequest执行了一次,初始化退出request执行了15次。
//2.利用已有.jtl文件生成报告(注意修改路径)
jmeter -g test.jtl -o /path
生成的测试报告(自带的是性能测试报告,附带很多信息),官网详解:
https://jmeter.apache.org/usermanual/generating-dashboard.html
fiddler结合jmeter
参考 https://www.jianshu.com/p/b3dcc28108f0