Jmeter做接口测试
Jmeter脚本编写一般分五个步骤:
添加线程组
添加 http 请求
在 http 请求中写入接入 url、路径、请求方式和参数
添加查看结果树
调用接口、查看返回值
本次用来测试的接口地址的api:httpbin.org
一、实施1-2步骤:
添加线程组、http请求
二、配置http请求的相关参数
在 http 请求中写入接入 url、路径、请求方式和参数,当前选择请求的方式为GET方式。
三、调用接口,查看返回值
添加查看结果树
调用接口,得到返回值
四,请求方式改为post方式来进行请求
改为post进行测试,得到的响应数据
五,http请求默认值
通过上面两个请求我们发现,Web 服务器中的协议和服务器名称或 IP 这两个值都是一样,每次重复输入其实比较麻烦,因此我们可以使用 HTTP 请求默认值来管理这些公共的配置数据。
添加步骤:
线程组——添加——配置元件——HTTP 请求默认值
然后进行如下配置,并把该元件放置到请求前面。
经过请求默认值的配置后,后续我们增加新的请求,如果这两项值是一样的话,那么则无需再重复填入该值。
六,断言设置
Jmeter 可以针对每一个请求响应进行断言。
设置步骤:
选中一个请求,如 http-get,然后右键选择:
添加——断言——响应断言。
各个匹配模式含义如下
包括:响应内容包括需要匹配的内容即代表响应成功,支持正则表达式
匹配:响应内容要完全匹配需要匹配的内容即代表响应成功,大小写不敏感,支持正则表达式。
Equals:响应内容要完全等于需要匹配的内容才代表成功,大小写敏感,需要匹配的内容是字符串正则表达式
Substring:返回结果包含指定结果的字串,但是 subString 不支持正则字符串
如下图所示匹配返回的字符串是否包含:http://httpbin.org/get
如果断言成功,则查看结果树为绿色标志,如果断言失败则为红色显示,如下图所示:
七,参数设置
Jmeter 支持通过 Query String Parameters 或者 Request body 请求体来传递参数。
Query String Parameters
如果希望在请求 URL 中添加参数,则可以在 Http 请求界面的 Parameters 选项里面添加参数。该参数会通过 Query String Parameters 方式传递给服务器,也就是在 URL 中传递参数。 如下图如所示设置参数:
Request body
在 Post 请求中参数一般在 body 中传递,Jmeter 也支持在 body 中传递参数。如传递 Json 格式的参数,在 BodyData 编辑框输入如下参数:
{“username”:”Test1234”}
另外还需要指定参数的格式,因此需要添加 HTTP 信息头
添加步骤:
选定请求——添加——配置元件——HTTP 信息头管理器,然后在管理器里面添加参数类型
Content-Type :application/json 如下图所示:
八,变量
在请求过程中,有时我们需要在请求中设置一些变量来测试不同的场景。
Jmeter 支持以下类型变量:
用户自定义变量
函数生成变量
数据文件变量
(1) 用户自定义变量
设置步骤: 选中请求——添加——前置处理器——用户参数 设置变量名称为 user,值为 Test1234
在请求时引用变量如下所示: 变量引用格式为:${user}
(2)函数生成变量
Jmeter 有许多内置的函数,可以生成随机数。
创建步骤:
点击菜单栏选项——函数助手对话框——下拉选择__Random()函数 函数配置如下:
(3)CSV数据文件变量
CSV 数据文件变量是指从外部 csv 文件读取数据出来作为变量。
设置步骤:
选择请求——添加——配置元件——CSV 数据文件设置
创建 csv 文件: 注意文件编码为 UTF-8 文件内容如下:
Test1234,Test1234
data.csv
CSV 数据文件设置如下:
在 Post 请求中引用变量数据如下:
得到的请求数据
GET http://httpbin.org/?user=Test1234&pwd=Test1234
GET data:
Test1234Test1234{“username”:”Test1234”}
[no cookies]
(4)csv参数化
针对之前的 POST 接口进行如下参数遍历测试:
接口如下:
发送参数:user1.csv
user1,user1
user2,user2
user3,user3
在之前的 csv 数据文件设置需要需改配置如下:
表示把所有数据读取一遍,且不重复。
读取的数据:
九,用例分离
用例设计
之前我们的用例数据都是配置在 Jmeter Http 请求中,每次需要增加,修改用例都需要打开 jmeter 重新编辑,当 用例越来越多的时候,用例维护起来就越来越麻烦,有没有好的方法来解决这种情况呢?
其实我们可以将用例的数据存放在 csv 文件中,然后通过 csv 文件配置来读取用例中的数据,执行测试。用例数据如图所示:
用例名称变量含义:
1.${caseSeq}:用例编号
2.${apiType}:api 类型
3.${apiSeq} :api 版本号
4.${apiName}:api 名称
5.${priority}:优先级
6.${url}:api 路径
7.${methods}:请求方法
8.${parameter}: 请求参数
9.${expectValue}:期望值,用于断言
Jmeter设置步骤:
1.新建一个线程组,命名为:数据驱动
2.创建一个 http 请求默认值,设置如下:
3.添加一个循环控制器
步骤为:线程组——添加——逻辑控制器——循环控制器。
循环控制器的作用可以控制整个用例循环执行的次数。默认值是 1 根据用例数量可以修改为 4
4.在循环控制器节点下创建 CSV 文件设置,具体配置内容如下——注意csv文件为上面的用例设计这步
5.创建一个 if 控制器
步骤为:循环控制器——添加——逻辑控制器——if 控制器
if 控制器的作用为根据不同条件执行不同的用例,例如这里根据不同的接口请求类型,分别创建了 GET 和 POST 两个控制器。
GET 设置的条件语句如下:
条件语句为:**”${methods}”==”GET” 其中${methods}表示引用 csv 中的methods中的值**。
参数:
• Interpret Condition as Variable Expression?:如果这个选项被选中,将不会使用 js 解析;条件表达式的值必须是 true(忽略大小写),这里我们取消勾选状态。
Evaluate for all children:如果选中这一项,在每个子结点执行前都会计算表达式
6.创建 GET 请求类型的用例如下:
7.POST请求设置:POST 条件语句设置为:”${methods}”==”POST”
用例名称格式:${caseSeq}_ ${apiSeq}_${apiName}
断言设置如下:${expectValue}引用 csv 中对应的值。
十,测试报告
批量执行完接口测试之后,我们需要查看测试报告,在之前单个接口调试我们是通过查看结果树查看结果,但是当大
批量执行接口测试之后依旧这样查看那么肯定会很低效 那么该如何设置呢?
聚合报告
聚合报告是一个比较精简的报告元件,可以查看每个接口的性能情况与执行结果。 设置步骤:选中线程组——添
加——监听器——聚合报告。报告各个参数含义如下:
• Samples – 本次场景中一共完成了多少个请求
• Average – 平均响应时间(单位:ms)
• Median – 响应时间的中值(单位:ms)
• 90% Line – 所有请求中 90%的响应时间。
• Min – 最小响应时间(单位:ms)
• Max – 最大响应时间(单位:ms)
• Error – 出错率
• Troughput – 吞吐量
• Received–响应数据大小
• KB/sec – 以流量做衡量的吞吐量
HTML 报告
有时候我们需要将测试报告以 HTML 附件形式发送给各个项目成员,那么需要生成 HTML 报告。 JMeter3.0 以后引入了 Dashboard Report,用于生成 HTML 页面格式图形化报告的扩展模块。
生成步骤:
打开 cmd 进入 jmeter 目录 bin 目录
执行命令:
jmeter -n -t httpbin_test.jmx -l httpbin.jtl -e -o C:\Users\Administrator\Desktop\Report
命令的参数:
-n :以非 GUI 形式运行 Jmeter
-t :jmeter 脚本路径
-l :result.jtl 运行结果保存路径(.jtl)此文件必须不存在。
-e :在脚本运行结束后生成 html 报告
-o :用于存放 html 报告的目录,不加该参数默认生成到
参考拓展资料
https://blog.csdn.net/zhizunyu2009/article/details/79011413
https://blog.csdn.net/gld824125233/article/details/52842914
https://blog.csdn.net/defonds/article/details/53517247
https://blog.csdn.net/wuyou10206/article/details/77539791