浅谈前置处理器之正则表达式用户参数

浅谈前置处理器之正则表达式用户参数

正则表达式用户参数(RegEx User Parameters) 是一种前置处理器(Pre-Processor),它允许用户根据正则表达式从响应数据中提取值后进行应用,并将这些值作为参数传递给后续的HTTP请求或其他需要的地方。此功能对于处理动态内容、会话ID、令牌等具有高度灵活性,是实现自动化测试脚本的关键组成部分。

使用场景

  1. 动态参数处理:当目标系统在每次请求中生成不同的动态参数(如会话ID、时间戳等),需要提取后续并使用这些参数继续后续请求。
  2. 测试数据个性化:根据响应内容个性化后续请求的参数,比如从登录响应中提取用户ID用于后续的个人资料查询请求。
  3. 数据迭代:如果响应中包含多组匹配项,可以配置处理器循环提取后应用于多个请求,适用于测试列表或搜索结果页面。

配置步骤

  1. 添加正则表达式用户参数:
    ○ 在JMeter的工作台或测试计划中,选中一个HTTP请求或其他需要参数化的取样器。
    ○ 右键点击选择“添加” > “前置处理器” > “正则表达式用户参数”。
  2. 配置参数:
    ○ Regular Expression Reference Name:正则表达式提取器中的变量名称,此处的名称必须要与正则表达式中的一致。
    ○ Parameter names regexp group number:参数名字的组号,后续样例详细说明。
    ○ Parameter values regex group number:参数名称组对应值,后续样例详细说明。

实例说明

我们使用SpringBoot编写如下部分接口代码

 @PostMapping(value = "/login",produces = "application/json;charset=UTF-8")
    public String authenticate(@RequestBody JSONObject request) {

        String validUsername = "admin";
        String validPassword = "password";
        String response = "{\"total\":2,\"data\":[{\"id\":123,\"name\":\"John Doe\",\"email\":\"johndoe@example.com\",\"phone\":\"123-456-7890\",\"address\":{\"street\":\"123 Main St\",\"city\":\"New York\",\"state\":\"NY\",\"zip\":\"10001\"},\"interests\":[\"sports\",\"music\",\"travel\"]},{\"id\":456,\"name\":\"Jane Smith\",\"email\":\"janesmith@example.com\",\"phone\":\"987-654-3210\",\"address\":{\"street\":\"456 Elm St\",\"city\":\"Los Angeles\",\"state\":\"CA\",\"zip\":\"90001\"},\"interests\":[\"reading\",\"cooking\",\"hiking\"]}]}";


        if (request.getString("username").equals(validUsername) && request.getString("password").equals(validPassword)) {
            return response;
        } else {
            return response;
        }
    }

然后我们编写以下脚本
在这里插入图片描述
线程组:保持默认
HTTP请求1:协议http,服务器名称或者IP127.0.0.1,端口号8091,方法POST,路径/login,内容编码utf-8,消息体数据

{
    "username": "admin",
    "password": "password"
    }

正则表达式提取器:设置的参数为引用名称var,正则表达式"id"😦.?),“name”:"(.?)",“email”(可以根据样例代码中的内容可知),而我们的目的是提取到id和name,匹配数字设置为-1,缺省值为NotFound
此时我们可以先禁用HTTP请求2和正则表达式用户参数,然后运行脚本,查看结果树的调试取样器,在响应数据的Response Body中可以看到如下结果

JMeterVariables:
JMeterThread.last_sample_ok=false
JMeterThread.pack=org.apache.jmeter.threads.SamplePackage@4fa1cf1
START.HMS=165132
START.MS=1720515092259
START.YMD=20240709
TESTSTART.MS=1720578466746
_jm__线程组__idx=0
_jmeter.U_T
=线程组 1-1
var=NotFound
var_1=
var_1_g=2
var_1_g0=“id”:123,“name”:“John Doe”,“email”
var_1_g1=123
var_1_g2=John Doe
var_2=
var_2_g=2
var_2_g0=“id”:456,“name”:“Jane Smith”,“email”
var_2_g1=456
var_2_g2=Jane Smith
var_matchNr=2

上述内容我们可以看到对应的正则表达式提取的关于var变量的值,此时我们可以继续验证正则表达式用户参数这个前置处理器的应用,继续设置其他组件参数。
HTTP请求2:协议http,服务器名称或者IP127.0.0.1,端口号8091,方法POST,路径/login,内容编码utf-8,然后参数中添加两个参数,名称分别填写123,456,先不用管具体的意义,这里先卖个关子。
正则表达式用户参数:Regular Expression Reference Name设置为var,这里的参数名称一定要与上述正则表达式中的参数名称一致,Parameter names regexp group number设置为1,Parameter values regex group number设置为2,为什么要这么设置呢?我们可以这么理解,在HTTP请求2中我们不是设置了123和456嘛,Parameter names regexp group number设置为1可以理解为在var的参数中取var_1_g1和var_2_g1的参数,当我们HTTP请求2中填写的参数跟这里面的参数一致以后,我们就对应上参数与数据的关系,为Parameter values regex group number设置为2铺垫,我们可以很好的理解当Parameter values regex group number设置为2时,取到的参数变成var_1_g2和var_2_g2。
接下来就是验证我们的结果,运行脚本查看结果树中HTTP请求2中Request Body的post data数据,总体上看我们的请求是失败的,但是这个没关系,我们只是验证了我们需要验证的内容,跟结果无关

POST http://127.0.0.1:8091/login
POST data:
123=John+Doe&456=Jane+Smith
[no cookies]

从上述POST data可以看到对应的数据已经在请求中体现。

注意事项

● 作用域:正则表达式用户参数只对紧随其后的HTTP请求或取样器生效,若需全局应用,请考虑使用“正则表达式提取器”并配合变量。
● 调试:利用“查看结果树”监听器检查正则表达式的匹配情况,确保正确提取数据。

总结

正则表达式用户参数是JMeter中一个强大的特性,它简化了动态数据的处理流程,提升了测试脚本的灵活性和自动化程度。正确配置和利用这一功能,可以有效应对复杂系统的性能测试需求。

相关推荐

  1. [项目]C++表达式

    2024-07-12 01:48:03       44 阅读
  2. Shell 编程表达式与文本处理器

    2024-07-12 01:48:03       24 阅读
  3. linux表达式^

    2024-07-12 01:48:03       51 阅读
  4. linux表达式*

    2024-07-12 01:48:03       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 01:48:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 01:48:03       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 01:48:03       58 阅读
  4. Python语言-面向对象

    2024-07-12 01:48:03       69 阅读

热门阅读

  1. 力扣题解(乘积最大子数组)

    2024-07-12 01:48:03       23 阅读
  2. synchronized (userAccount.intern())知识点

    2024-07-12 01:48:03       23 阅读
  3. 网络协议与标准

    2024-07-12 01:48:03       24 阅读
  4. Haproxy搭建Web群集

    2024-07-12 01:48:03       23 阅读
  5. 24.6.30

    24.6.30

    2024-07-12 01:48:03      18 阅读
  6. 裸金属服务器适用于哪些场景?

    2024-07-12 01:48:03       19 阅读
  7. 如何理解李彦宏说的“不要卷模型,要卷应用”

    2024-07-12 01:48:03       22 阅读
  8. 【算法】字符串的排列

    2024-07-12 01:48:03       22 阅读
  9. 大模型学习笔记0-前言

    2024-07-12 01:48:03       22 阅读
  10. 【C++编程】程序流程结构

    2024-07-12 01:48:03       19 阅读
  11. 力扣215 数组中第k大的数

    2024-07-12 01:48:03       25 阅读