jmeter作为性能测试中最常见的一种工具,如果接口数量不在很多的情况下,通过在jmeter中直接进行录入即可。
当遇到需要对许多接口处理的场景,想要做到简单高效,往往就需要借助jmeter中提供的组件来进行配合使用。
这里根据我这几天遇到的一些场景,对jmeter中比较常用的几个使用组件进行一个记录。
自动登录
有时可能需要在jmeter中模拟多个用户进行访问,所访问的接口中也需要带上登录后的token信息。
举个例子:
输入用户名和密码后,返回一个token,之后每个接口调用时需要将此token放到请求的header中。
知识点
- HTTP_Header_Manager
- Functions and Variables
- JSON_Extractor
实现方式
这里以一个登录接口和一个获取用户信息接口为例
登录接口:
http://localhost:8080/user/login
其参数为username和password,当用户名和密码匹配成功后,会返回一个token。访问其他接口时需要带着这个token传入到请求的header中
获取用户信息接口:
http://localhost:8080/user/info
在jmeter中想要做到登录后自动获取出token信息,可利用jmeter中的变量和json_extractor来进行搭配,做到自动提取出token信息。
具体操作如下图:
JSON Extractor后置处理
在登录接口中添加一个后置处理器(post processor)中的JSON Extractor,在JSON Path expressions中填写对应的提取语句
以下面这个返回json结构为例
{
"code": "200",
"data": {
"token": "thisistoken"
}
}
其对应的json路径(详细语法说明可以参考JsonPath)表达式则为:$.data.token
同时在Name of created variables中输入一个变量名称,名称可以随便取,如这里将它命名为token
这样处理好了之后,当执行完了登录接口后,后置处理器就会将服务端返回的token定义为变量token了,之后便可以在其他地方使用这个变量
变量使用
在需要用到变量的地方,使用系统中的变量,如在获取用户信息接口中需要传入token信息,则在对应的请求头管理器中传入使用即可。如上图中的${token}
变量详细使用方式可参考:Functions and Variables
当完成操作后,点击运行,便可看到最终的运行结果情况了。从上图的步骤3中可以看出,自动登录到接口访问一气呵成了。
对于复杂流程,登录部分也可以使用控制器中的Only Once Controller包装一下再进行使用。
变量信息由用户启动时传入
如果是在GUI界面中打开jmeter,我们仔细观察的话,是可以看到有这么一段话的:
================================================================================
Don't use GUI mode for load testing !, only for Test creation and Test debugging.
For load testing, use CLI Mode (was NON GUI):
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
& increase Java Heap to meet your test requirements:
Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file
Check : https://jmeter.apache.org/usermanual/best-practices.html
================================================================================
主要注意这句话:Don’t use GUI mode for load testing !, only for Test creation and Test debugging.
主要是说:
不要在GUI模式下进行压力测试,GUI模式下仅仅用于测试用例的创建和调试
当在命令行模式下运行jemter时,由于没有界面,想要让某些信息在每次运行jmeter命令时进行传入,如果传入的参数不多,则可以用-J参数来进行处理。
知识点
- __P
- -J
- How to reference variables and functions
实现方式
这里以动态设置线程数为例,想要做到线程数量由运行时输入,我们可以这样操作:
先在jmeter中添加一个Config Element中的User Defined Variables,在其中对变量信息进行管理。如上图中定义了一个名为threadNum的变量,其值为:
${__P(threadNum,1)}
它的意思是指threadNum的值通过用户传入,默认值为1。
随后在使用到需要使用到它的地方直接使用用户变量即可。
这里仍然以前面用户登录和获取用户信息的实例,来测试一下。
输入jmeter的运行命令:
.\jmeter -n -t C:\Users\ping\Desktop\temp\jmeterTest.jmx -l C:\Users\ping\Desktop\temp\report\result.txt -e -o C:\Users\ping\Desktop\temp\report -JthreadNum=3
其中-t后面为jmeter的测试用例jmx文件的路径,-l为本次测试的日志文件输出路径,-o后为测试报告生成的路径。
具体参数信息可以查看官方的说明文档:options
-JthreadNum=3为变量threadNum的值,这里指定为3。对应上面的实例,对应的每个接口所运行的线程数也为3个。
执行结果
运行完后,打开jmeter生成的测试报告看一下运行结果:
文章来源:https://www.toymoban.com/news/detail-544749.html
从报告中也可以看出每个测试接口也都执行了3次,说明变量信息生效了。文章来源地址https://www.toymoban.com/news/detail-544749.html
到了这里,关于快速掌握jmeter(一)——实现自动登录与动态变量的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!