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


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

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

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

    自动登录

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

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

    知识点

    实现方式

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

    登录接口:

    http://localhost:8080/user/login

    其参数为username和password,当用户名和密码匹配成功后,会返回一个token。访问其他接口时需要带着这个token传入到请求的header中

    login接口

    获取用户信息接口:

    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"
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    其对应的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
    ================================================================================
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    主要注意这句话:Don’t use GUI mode for load testing !, only for Test creation and Test debugging.

    主要是说:
    不要在GUI模式下进行压力测试,GUI模式下仅仅用于测试用例的创建和调试

    当在命令行模式下运行jemter时,由于没有界面,想要让某些信息在每次运行jmeter命令时进行传入,如果传入的参数不多,则可以用-J参数来进行处理。

    知识点

    实现方式

    这里以动态设置线程数为例,想要做到线程数量由运行时输入,我们可以这样操作:

    添加变量

    先在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次,说明变量信息生效了。

  • 相关阅读:
    【图像分割】图像检测(分割、特征提取)、各种特征(面积等)的测量和过滤(Matlab代码实现)
    OPPO也要自研芯片?欲采用台积电3nm工艺
    翻译Excel文档名不求人:详细指南
    信号和电源隔离的有效设计技术
    搜索技术领域的“奥林匹克”,飞桨支持“第二届百度搜索创新大赛”正式启动!...
    你们公司每次迭代周期多久?加班多么?
    VOLTE:MIUI14无5G信号、通话质量差、短信收不到的原因之一
    【MTK】 配置GPIO控制前置闪光灯
    考虑阶梯式碳交易机制与电制氢的综合能源系统热电优化(Matlab代码实现)
    【初阶数据结构】带头双向循环链表(C语言实现)
  • 原文地址:https://blog.csdn.net/puhaiyang/article/details/126091686