Jmeter快速上手之接口测试
目录
- 1、前言
- 2、简介
- 3、安装
- 4、环境变量
- 4.1、Windows环境
- 4.2、Mac环境
- 5、启动程序
- 6、目录说明
- 7、操作示例
- 7.1、Get请求
- 7.2、Post请求
- 7.3、依赖请求
1、前言
压测工具 Jmeter 除了可以做性能测试,还可以做接口测试。当接口测试趋向于自动化方向时,就可以使用很典型的接口自动化测试框架 Jmeter Ant Jenkins。
本篇将讲解如何快速使用Jmeter来进行接口测试。
2、简介
Jmeter 是 Apache 组织开发的基于 Java 的压力测试工具。用于对软件做压力测试,它最初被设计用于 Web 应用测试,但后来扩展到其他测试领域。
它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器等等。
Jmeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,Jmeter 能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活性,Jmeter 允许使用正则表达式创建断言。
官网地址:
https://jmeter.apache.org/
3、安装
官网下载地址:
https://jmeter.apache.org/download_jmeter.cgi
下载解压包版本即可。
注意:需要Java 8 (JDK 1.8 )以上的支持。
关于 JDK 的安装与配置,可点击 Java-安装 文章进行查阅。
例如本次讲解系统所带的JDK版本为1.8.0_261。
例如下载apache-jmeter-5.4.1.zip
下载完成后,解压到自己指定的路径里即可。
例如:
Windows系统,解压到C盘根目录下。
路径为C:apache-jmeter-5.4.1
Mac系统,解压到/Users/wangmeng目录下。
路径为/Users/wangmeng/apache-jmeter-5.4.1
4、环境变量
4.1、Windows环境
【我的电脑】右键 ---> 属性 ---> 高级系统设置 ---> 环境变量 ---> 系统变量
新建 JMETER_HOME 值为 C:apache-jmeter-5.4.1
编辑 CLASSPATH 的变量(如果没有则新建),值为
%JMETER_HOME%libextApacheJMeter_core.jar;%JMETER_HOME%libjorphan.jar
编辑 PATH 新增值为 %JMETER_HOME%bin
保存后,以管理员身份打开命令行,输入jmeter -v
环境变量配置成功
4.2、Mac环境
打开终端,编辑 .bash_profile 文件。
代码语言:javascript复制vim .bash_profile
添加以下配置:
代码语言:javascript复制export JMETER_HOME=/Users/wangmeng/apache-jmeter-5.4.1
export PATH=${PATH}:$JMETER_HOME/bin
export CLASSPATH=:$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar
保存退出,使 .bash_profile 文件内容生效。
代码语言:javascript复制source ~/.bash_profile
重新打开终端,输入jmeter -v
环境变量配置成功
5、启动程序
1、打开命令行或终端输入jmeter,即可启动程序(前提已配置成功环境变量)。
2、或者打开Jmeterbin目录下的应用程序来进行启动。
Windows系统,双击jmeter.bat即可。
Mac系统,双击jmeter即可。
6、目录说明
- backups:备份目录,是将自己的 jmx 脚本进行备份,每次保存都会将该脚本保存到该目录下,保存多次便会保存多个同样的文件,文件名进行默认递增更改。
- bin:包含启动、配置等相关命令。
- binjmeter.properties:核心配置文件,各种配置基本在这完成。
- docs:官方接口文档。
- extras:辅助库。
- lib:存放各种 Jmeter 核心库的源码 jar 包,存放自己二次开发的 jar 包。
- libext:官方提供的第三方插件。
- LICENSE:许可说明。
- licenses:许可证等。
- NOTICE:简单信息说明。
- printable_docs:离线的帮助文档,可以查看函数等内容。
- README.md:官方基本介绍。
7、操作示例
本篇模拟接口请求链接使用 moco 生成。
关于 moco 的部署与使用等,可点击 moco 系列章节进行查阅。
1、添加线程组
【测试计划】右键 ---> Add ---> Threads(Users) ---> Thread Group
2、设置线程数(并发用户数)与循环次数
本篇为接口测试讲解,模拟一个用户进行一次接口请求,所以用户数和循环次数均为1即可。
7.1、Get请求
接口请求地址:http://localhost:8083/getdemo
如图所示:先使用Postman,访问此接口。
GET请求,2个参数username、password
返回数据为“操作成功”
1、添加HTTP请求
【线程组】右键 ---> Add ---> Sampler ---> HTTP Request
填写相关配置信息。
方式一:
- 接口名称:demo01
- 协议:http
- 服务器名称或IP:localhost
- 端口号:8083
- 方法:GET
- 路径:/getdemo
- 内容编码:utf-8
- Parameters:填写对应的参数名与参数值
方式二:
- 接口名称:demo01
- 协议:http
- 服务器名称或IP:localhost
- 端口号:8083
- 方法:GET
- 路径:/getdemo?username=admin&password=123456
- 内容编码:utf-8
2、添加响应断言
【demo01】右键 ---> Add ---> Assertions ---> Response Assertion
输入断言匹配的内容。
根据示例接口,返回的文本内容若等于“操作成功”,则就算是Pass
3、添加断言结果
【demo01】右键 ---> Add ---> Listener ---> Assertion Results
4、添加查看结果树
【demo01】右键 ---> Add ---> Listener ---> View Results Tree
5、运行脚本
运行方式一:【线程组】右键 ---> Start
运行方式二:点击运行按钮即可。
6、运行结果
查看断言结果,验证通过,Pass
查看结果树,可查看请求与响应数据,验证通过,Pass
7.2、Post请求
接口请求地址:http://localhost:8083/postdemo
如图所示:先使用Postman,访问此接口。
POST请求,2个参数username、password
返回数据为“操作成功”
1、添加HTTP请求
【线程组】右键 ---> Add ---> Sampler ---> HTTP Request
填写相关配置信息。
- 接口名称:demo02
- 协议:http
- 服务器名称或IP:localhost
- 端口号:8083
- 方法:POST
- 路径:/postdemo
- 内容编码:utf-8
- Parameters:填写对应的参数名与参数值
2、添加响应断言
【demo02】右键 ---> Add ---> Assertions ---> Response Assertion
输入断言匹配的内容。
根据示例接口,返回的文本内容若等于“操作成功”,则就算是Pass
3、添加断言结果
【demo02】右键 ---> Add ---> Listener ---> Assertion Results
4、添加查看结果树
【demo02】右键 ---> Add ---> Listener ---> View Results Tree
5、运行脚本
运行方式一:【线程组】右键 ---> Start
运行方式二:点击运行按钮即可。
6、运行结果
查看断言结果,验证通过,Pass
查看结果树,可查看请求与响应数据,验证通过,Pass
7.3、依赖请求
有两个接口,接口1执行后返回的数据里有接口2需要用到的请求参数,则执行接口2时,要先执行接口1获取返回的指定数据。
接口1请求地址:http://localhost:8083/demo?aaa=123&bbb=456&ccc=789
如图所示:先使用Postman,访问此接口。
GET请求,3个参数aaa、bbb、ccc
返回json数据为:
{
"mystatus": "操作成功",
"mytoken": "eyJhbGciOiJIUzI1NiJ9"
}
接口2请求地址:http://localhost:8083/demo2
如图所示:先使用Postman,访问此接口。
POST请求,请求头有2个参数Content-Type、mytoken
返回json数据为:
{
"mystatus": "操作成功",
"mystatusid": "1"
}
发送的json串。
1、添加用户参数
接口1和接口2都有参数ccc,且值都是789,可以设置为公共用户变量,方便统一提取。
【线程组】右键 ---> Add ---> Pre Processors ---> User Parameters
填写参数ccc与参数值789
2、添加HTTP请求(接口1)
【线程组】右键 ---> Add ---> Sampler ---> HTTP Request
填写相关配置信息。
- 接口名称:demo03-1
- 协议:http
- 服务器名称或IP:localhost
- 端口号:8083
- 方法:GET
- 路径:/demo
- 内容编码:utf-8
- Parameters:填写对应的参数名与参数值,${ccc}为引用用户参数ccc的值。
(1)添加响应断言
【demo03-1】右键 ---> Add ---> Assertions ---> Response Assertion
输入断言匹配的内容。
根据示例接口1,返回的文本内容若包括所指定的“操作成功”,则就算是Pass
(2)添加断言结果
【demo03-1】右键 ---> Add ---> Listener ---> Assertion Results
(3)添加查看结果树
【demo03-1】右键 ---> Add ---> Listener ---> View Results Tree
(4)添加正则表达式提取器
用于提取接口1返回的指定数据,接口2会调用此数据。
【demo03-1】右键 ---> Add ---> Post Processors ---> Regular Expression Extractor
填写相关正则表达式信息。
- 引用名称:其他地方引用时的变量名称,这里定义为 my_token,引用方法:${引用名称}
- 正则表达式:数据提取器,()括号里为要获取的值。"mytoken":"( 相当于LR的左边界, )" 相当于LR的右边界。而括号里 .*? 为正则表达式,"mytoken":"(.*?)" 匹配最短的,以 "mytoken":" 开始,以 " 结束的字符串。
- 模板:用于从找到的匹配项创建字符串的模板。这是一个带有特殊元素的任意字符串,用于引用正则表达式中的组。引用组的语法是:1引用组1,2引用组2,等等。0引用整个表达式匹配的内容。
- 匹配数字:正则表达式匹配数据的所有结果可以看做一个数组,匹配数字即可看做是数组的第几个元素。-1表示全部,0随机,1第一个,2第二个,以此类推。若只要获取到匹配的第一个值,则填写1
- 缺省值:匹配失败时的默认值。
(5)添加调试后处理器
方便在调试脚本时实时查看是否正确的提取到了所要的信息。
【demo03-1】右键 ---> Add ---> Post Processors ---> Debug PostProcessor
3、添加HTTP头管理器(接口2)
接口2有请求头信息要进行设置,所以要添加HTTP头管理器。
【线程组】右键 ---> Add ---> Config Element ---> HTTP Header Manager
填写相关配置信息。
${my_token}为引用正则表达式my_token提取接口1返回的指定值。
4、添加HTTP请求(接口2)
【线程组】右键 ---> Add ---> Sampler ---> HTTP Request
填写相关配置信息。
- 接口名称:demo03-2
- 协议:http
- 服务器名称或IP:localhost
- 端口号:8083
- 方法:POST
- 路径:/demo2
- 内容编码:utf-8
- Body Data:填写对应的键值,${ccc}为引用用户参数ccc的值。
{
"id":"1",
"username":"test",
"password":"123456",
"ccc":"${ccc}"
}
(1)添加响应断言
【demo03-2】右键 ---> Add ---> Assertions ---> Response Assertion
输入断言匹配的内容。
根据示例接口2,返回的文本内容若包括所指定的“操作成功”,则就算是Pass
(2)添加断言结果
【demo03-2】右键 ---> Add ---> Listener ---> Assertion Results
(3)添加查看结果树
【demo03-2】右键 ---> Add ---> Listener ---> View Results Tree
5、运行脚本
运行方式一:【线程组】右键 ---> Start
运行方式二:点击运行按钮即可。
6、运行结果
接口1,查看断言结果,验证通过,Pass
接口1,查看结果树,可查看请求与响应数据,验证通过,Pass
接口1,查看结果树,正则表达式所提取接口1的返回数据
接口2,查看断言结果,验证通过,Pass
接口2,查看结果树,可查看请求与响应数据,验证通过,Pass