文章目录
- 1 发送请求
- 2 添加HTTP信息头管理器
- 3 查看结果
- 4 断言
- 5 用户参数&函数助手
- 5.1 用户自定义变量
- 5.2 函数生成变量
- 5.3 BeanShell变量
- 5.4 CSV数据文件变量
- 6 正则匹配
- 7 JMeter接口测试数据分离驱动应用
- 7.1 HTTP请求默认值
- 7.2 HTTP信息头管理器
- 7.3 循环控制器
- 7.4 CSV数据文件设置
- 7.5 IF控制器处理GET请求
- 7.5.1 添加IF控制器
- 7.5.2 在IF控制器下添加HTTP请求
- 7.5.3 给HTTP请求添加响应断言及查看结果树
- 7.6 IF控制器处理POST请求
- 8 Cookie的介绍与应用
- 9 授权设置
- 9.1 Basic Auth
- 9.2 Digest Auth
- 10 接口测试报告讲解
- 10.1 聚合报告
- 10.2 HTML报告
安装:
JMeter详细安装教程
打开:双击ApacheJMeter.exe即可
1 发送请求
右击测试计划 - 添加 - 线程(用户)- 线程组 >> 右击线程组 - 添加 - 取样器 - HTTP请求
2 添加HTTP信息头管理器
右击HTTP请求 - 添加 - 配置元件 - HTTP信息头管理器
3 查看结果
右击HTTP请求 - 添加 - 监听器 - 查看结果树
4 断言
右击HTTP请求 - 添加 - 断言 - 响应断言
各个匹配模式含义如下:
- 包括:响应内容包括需要匹配的内容即代表响应成功,支持正则表达式。
- 匹配:响应内容要完全匹配需要匹配的内容即代表响应成功,不区分大小写,支持正则表达式。
- 相等:响应内容要完全等于需要匹配的内容才代表成功,区分大小写,需要匹配的内容是字符串正则表达式。
- 字符串:返回结果包含指定结果的字符串,不支持正则表达式。
- 否:不进行匹配
5 用户参数&函数助手
JMeter支持以下类型变量:
- 用户自定义变量
- 函数生成变量
- BeanShell变量
- 数据文件变量
5.1 用户自定义变量
右击HTTP请求 - 添加 - 前置处理器 - 用户参数。例如:设置变量名为app,值为weather.today,在请求时引用变量格式为:${app}
5.2 函数生成变量
JMeter由许多内置的函数,可以生成随机数。
点击菜单栏”工具“选项 - 函数助手对话框 - 下拉选择Random函数。
5.3 BeanShell变量
什么是Bean Shell?
BeanShell是一种完全符合Java语法规范的脚本语言,并且拥有自己的一些语法和方法;
BeanShell是一种松散类型的脚本语言(这点和JS类似);
BeanShell是用Java写出的一个小型的、免费的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精简;
BeanShell执行标准Java语句和表达式,另外包括一些脚本命令和与语法。
官网:https://beanshell.github.io/intro.html
JMeter有哪些Bean Shell?
- 定时器:BeanShell Timer
- 前置处理器:BeanShell PreProcessor
- 采样器:BeanShell Sampler
- 后置处理器:BeanShell PostProcessor
- 断言:BeanShell断言
- 监听器:BeanShell Listener
BeanShell常用内置变量:
JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下:
- vars -(JMeterVariables)操作JMeter变量这个变量实际引用了JMeter线程中的局部变量容器,本质上是Map)它是测试用例与BeanShell交互的桥梁,常用方法:
//定义JMeter变量
vars.put(String key, String value);
//从JMeter中获取变量
vars.get(String key);
- log - 写入信息到JMeber.log文件
log.info("hello JMeter!");
BeanShell实践案例
右击HTTP请求 - 添加 - 前置处理器 - BeanShell预处理程序
5.4 CSV数据文件变量
CSV数据文件变量是指从外部csv文件读取数据出来作为变量。
设置步骤:
- 创建CSV数据文件(推荐用Notepad++创建,文件编码为UTF-8)
- 右击HTTP请求 - 添加 - 配置元件 - CSV数据文件设置 - 浏览
6 正则匹配
问题思考:接口测试过程中经常需要接口之间关联调用,比如获取上一个接口的返回值,作为另一个接口的请求参数,那么该如何处理呢?
操作案例:从“实时天气-当天”请求的响应数据中匹配weaid的值,然后创建“实时天气-未来7天”请求引用weaid作为参数。
设置步骤:右击HTTP请求 - 添加 - 后置处理器 - 正则表达式提取器,字段说明如下:
- 引用名称:请求要引用的变量名称,如填写weaid,则可用${weaid}引用它。
- 正则表达式:匹配需要的内容。
- 模板:用
$num$
引用起来,如果在正则表达式中有多个匹配数据,num表示匹配到第几个值给变量,如:$1$
表示匹配到的第1个值存储在变量中。 - 匹配数字:0代表随机取值,1代表全部取值。
- 缺省值:如果参数没有取到值,那默认给一个值让它取。
正则表达式说明:
- ()括起来的部分就是要提取的。
- .匹配任何字符串。
- +一次或多次。
- ?在找到第一个匹配项后停止。
7 JMeter接口测试数据分离驱动应用
CSV数据文件:
7.1 HTTP请求默认值
设置步骤:右击线程组 - 添加 - 配置元件 - HTTP请求默认值
7.2 HTTP信息头管理器
设置步骤:右击线程组 - 添加 - 配置元件 - HTTP信息头管理器
7.3 循环控制器
设置步骤:右击线程组 - 添加 - 逻辑控制器 - 循环控制器
7.4 CSV数据文件设置
设置步骤:右击循环控制器- 添加 - 配置元件 - CSV数据文件设置
7.5 IF控制器处理GET请求
7.5.1 添加IF控制器
设置步骤:右击循环控制器 - 添加 - 逻辑控制器 - IF控制器
7.5.2 在IF控制器下添加HTTP请求
设置步骤:右击IF控制器 - 添加 - 取样器 - HTTP请求
7.5.3 给HTTP请求添加响应断言及查看结果树
设置步骤:右击HTTP请求 - 添加 - 断言 - 响应断言
设置步骤:右击HTTP请求 - 添加 - 监听器 - 查看结果树,运行结果如下:
7.6 IF控制器处理POST请求
添加IF控制器
在IF控制器下添加HTTP请求
给HTTP请求添加响应断言
给HTTP请求添加查看结果树,运行结果如下:
8 Cookie的介绍与应用
- 介绍
如果你有一个HTTP请求,器返回结果里包含一个cookie,那么使用JMeterCookie管理器会自动将该cookie保存起来,而且以后所有对该网站的请求都使用同一个cookie。每个JMeter线程都有自己独立的cookie保存区域。 - 应用
接口文档:http://httpbin.org/ 请求url:http://httpbin.org/cookies/set,该请求会返回cookie,Cookie内容可以通过自定义参数设置。这里我们设置Cookie内容如下: - 添加Cookie管理器:右击线程组 - 添加 - 配置元件 - HTTP Cookie管理器,运行之后我们可以在查看结果树中看到cookie:
- 禁用HTTP Cookie管理器则不会保存cookie:
- 自定义添加cookie
9 授权设置
很多时候,处于安全考虑我们的接口并不希望对外公开,这个时候就需要使用授权(Authorization)机制。授权过程验证您是否具有访问服务器所需数据的权限。当发送请求时,您通常必须包含参数,以确保请求具有访问和返回所需数据的权限。JMeter提供授权类型,可以轻松地在JMeter本地应用程序中处理身份验证协议。
9.1 Basic Auth
基本身份验证是一种比较简单的授权类型,需要经过验证的用户名和密码才能访问数据资源。这就需要我们输入用户名和对应的密码。
实践案例
请求接口为:http://httpbin.org/basic-auth/{username}/{password},设置用户名为test,密码为2022
- 新建HTTP请求名称为basic-auth设置如下:
- 添加HTTP授权管理器:右击HTTP请求 - 添加 - 配置元件 - HTTP授权管理器,配置如下:
- 执行之后请求内容中带有授权信息Authorization: Basic dGVzdDoyMDIy,而dGVzdDoyMDIy这个数值就是用用户名:密码经过Base64编码后计算出来的。
9.2 Digest Auth
Digest Auth是一个简单的认证机制,最初是为HTTP协议开发的,因此也常叫做HTTP摘要。其身份验证机制非常简单,它采用哈希加密方法,以避免用明文传输用户的口令。摘要认证就是要核实参与通信的两方都知道双方共享的一个口令。
实践案例
请求接口为:http://httpbin.org/digest-auth/{qop}/{username}/{password},{qop}这个参数规定server支持哪种保护方案。client能从列表中(auth, auth-int)选择一个。
- auth表示仅仅进行身份查验。
- auth-int表示进行查验外,另一些完整性保护。
- 新建HTTP请求:digest-auth,设置用户名为test,密码为2022,配置如下:
- 添加HTTP授权管理器,配置如下:
- 执行之后查看响应结果:
禁用HTTP授权管理器则会运行失败,如下:
10 接口测试报告讲解
批量执行完接口测试之后,我们需要查看测试报告,在之前单个接口调试我们是通过”查看结果树“查看结果,但是当大批量执行接口测试之后依旧这样查看肯定会很低效,那么该如何设置呢?
10.1 聚合报告
聚合报告是一个比较精简的报告元件,可以查看每个接口的性能情况与执行结果。
设置步骤:右击线程组 - 添加 - 监听器 - 聚合报告
报告各个参数含义如下:
- Samples:本次场景中一共完成了多少个请求
- Average:平均响应时间(单位:ms)
- Median:响应时间的中值(单位:ms)
- 90%Line:所有请求中90%的响应时间。
- Min:最小响应时间(单位:ms)
- Max:最大响应时间(单位:ms)
- Error:出错率
- Troughput:吞吐量
- Received:响应数据大小
- KB/sec:以流量做衡量的吞吐量
10.2 HTML报告
有时候我们需要将测试报告以HTML附件形式发送给各个项目成员,那么需要生成HTML报告。JMeter3.0以后引入了Dashboard Report,用于生成HTML格式图形化报告的扩展模块。
- 生成步骤:
打开cmd进入jmeter\bin目录执行命令:jmeter -n -t E:\JMeterProject\report.jmx -l E:\JMeterProject\report.jtl -e -o E:\JMeterProject\report
- 命令的参数:
-n:以非GUI形式运行JMeter(直接用命令行模式启动)
-t:jmeter脚本路径
-l:result.jtl运行结果保存路径(.jtl)此文件必须不存在
-e:在脚本运行结束后生成html报告
-o:用于存放html报告目录(目录需存在),不加该参数默认生成到bin\report-output - 生成的测试报告样式如下: