快速掌握jmeter(一)——实现自动登录与动态变量

jmeter作为性能测试中最常见的一种工具,如果接口数量不在很多的情况下,通过在jmeter中直接进行录入即可。

当遇到需要对许多接口处理的场景,想要做到简单高效,往往就需要借助jmeter中提供的组件来进行配合使用。

这里根据我这几天遇到的一些场景,对jmeter中比较常用的几个使用组件进行一个记录。

自动登录

有时可能需要在jmeter中模拟多个用户进行访问,所访问的接口中也需要带上登录后的token信息。

举个例子:
输入用户名和密码后,返回一个token,之后每个接口调用时需要将此token放到请求的header中。

知识点

实现方式

这里以一个登录接口和一个获取用户信息接口为例

登录接口:

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生成的测试报告看一下运行结果:

从报告中也可以看出每个测试接口也都执行了3次,说明变量信息生效了。 

猜你喜欢

转载自blog.csdn.net/lzz718719/article/details/130806882