首页 > 解决方案 > 在 JMeter 后处理器中保存匹配的值

问题描述

在刚开始使用 JMeter 时,我试图设置 taskId_1、taskId_2、taskId_3 形式的变量(在“用户定义的变量”中定义)并在 HTTP 示例(REST 请求)中使用它们。当我运行后处理器时,我的 JSON 提取器或正则表达式提取器都没有保存匹配的值(我使用 RegExp 测试器测试了提取的正则表达式。)

从我正在解析的 GET 请求发送的响应看起来像(为便于阅读而编辑):

{
    "case-data": {
        "Description": "100 parallel tasks",
        "Workflow": {
            "com.MyCompany": {
                "workflow-case-id": null,
                "stages": [
                    {
                        "stage-guid": "470D2E00-A9E1-11EB-887B-4226FC2CA371",
                        "tasks": [
                            {
                                "task-name": "Stage1Task1P",
                                "user-group-id": "Joe",
                                "task-id" : 52
                            },
                             {
                                "task-name": "Stage1Task2P",
                                "user-group-id": "Joe",
                                "task-id" : 73
                            },
                                                        {
                                "task-name": "Stage1Task3P",
                                "user-group-id": "Joe",
                                "task-id" : 123
                            }
                        ]
                    } ] }}}}

按照 BlazeMeter 教程,对于我使用的正则表达式提取器

Apply To "Main sample and sub-samples"
Field to check "Response Message"
Name of created variable taskId
Regular expression task-id"\ :\ (.\d+)$
$1$

(我也尝试过 taskId_1 - 我理想的解决方案是一次设置所有 taskId)。

对于我刚刚尝试过的 JSON 提取器,我使用:

Names of created variables: taskId
JSON Path Expressions: $."task-id"  (LOG ALL indicates Could not find JSON Path - so I will revise)
Match No: -1
Default Values: taskId not matched

就好像这些字符串都没有匹配过,所以没有设置值 - 甚至没有默认值。我还有一个调试示例、调试后处理器和一个包含在父逻辑控制器中的查看结果树 - 但看不到任何地方设置的变量值(即使在日志中)。

我有其他 JSON 提取器试图从顶部向下遍历对象树,但它们也没有设置我的用户变量,尽管 LOG ALL 表明它们正在设置同名的变量。

  1. 我的匹配表达式和赋值参数有什么问题?
  2. 如何更改对调试采样器/后处理器/查看结果树/属性和变量查看器(其中 JMeter 变量 = True)的使用来观察变量?
    在此处输入图像描述
  3. 有没有办法通过单击 UI 元素一次运行一个测试计划(例如,一个预处理器、一个请求、一个后处理器,然后是另一个后处理器)?

标签: jmeter

解决方案


  1. 正则表达式提取器

    "task-id"\s*:\s*(\d+)
    

    在此处输入图像描述

    更多信息:JMeter 正则表达式

  2. JSON提取器

    $..task-id
    

    在此处输入图像描述

    更多信息:Jayway JsonPath

  3. 要查看生成的变量,只需在脚本底部的某处添加 Debug Sampler 并添加 View Results Tree 侦听器,以便 Debug Sampler 在其范围内,请参阅如何调试 Apache JMeter 脚本以获取更多详细信息。


推荐阅读