Jmeter不能替代HTTP请求的正文数据中的正则表达式引用

时间:2015-04-24 14:04:16

标签: regex json jmeter blazemeter

我想在json响应中提取ProductIdentifier的值,如下所示:

Reference Name: ProductToken
Regular Expression: "ProductIdentifier":" (.+?)"
Template $1$
Match No. 1

然后ProductToken引用将用于请求的有效负载(json)以进行验证。

有一些教程和视频可以描述如何替换参考名称,如下所示: jmeter-video-tutorial-error-checking-and-dynamic

目前,请求中的引用名称${ProductToken}未替换为其值(取自先前的响应),它被识别为引用名称的纯文本。

{"order":{"Token":null,"ProductIdentifier":"${ProductToken}","OrderToken":null,"Products": ...

请求中有超过30个变量,每次替换时,将它们作为参数而不是在Body Data中直接替换是浪费时间。

我无法在HTTP请求的正文数据中使用此引用名称。任何建议将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:0)

目前处理JSON响应的最舒适方式似乎是jmeter的自定义JSON utils(JSON Path Assertion,JSON Path Extractor,JSON Formatter),它们也是JMeter Plugins的一部分,应该可以工作与Blazemeter一起很好。

使用JSON Path而不是Regular Expression Extractor可以帮助您避免因json格式问题导致的处理错误。

如果ProductIdentifier外观在回复中是唯一的,则在这种特殊情况下,下列内容应该可以正常工作:

{
   "order":{
      "Token":null,
      "ProductIdentifier":"c1e8e382-771e-4fee-b7c2-0a24afe798df",
      "OrderToken":null,
      "Products":[
         "one",
         "two",
         "three"
      ]
   }
}
. . .
HTTP Request
    jp@gc - JSON Path Extractor
    Name: productToken
    JSON path: $.order.ProductIdentifier
HTTP Request
Body Data:
    {
       "order":{
          "Token":null,
          "ProductIdentifier":"${productToken}",
          "OrderToken":null,
          "Products":[
             "one",
             "two",
             "three"
          ]
       }
    }
. . .