Jmeter 5.3 + 金牛座 1.16。将 YAML 文件中的 属性 正确插入到 HTTP 请求中

Jmeter 5.3 + Taurus 1.16. Correctly insert property from YAML file to HTTP request

我当前的测试套件要求我向 API 发送一些 HTTP POST 请求,其中一些请求需要通过 HTTP 请求发布特定对象。当 运行 Taurus 中的 Jmeter 时,我试图从我的 YAML 文件中获取这些对象时遇到了一些问题。

我将在此处附上我的 YAML 文件的一部分以供参考(出于保密原因,不得不删除或更改某些属性):

  jmeter:
    properties:
      number.of.users: 1000
      rampup.period: 300
      loop.count: 1
      client.id: "23id"
      array.of.clients: ["id1","id2","id3"]
      ids: [1,2,3]
      rq:
        - "number": "7312sa1"
          "signed": "2020-06-08T00:00:00.000+0000"
          "crmClientId": "1-32D1P"

问题是:当我尝试像这样将字符串属性传递给我的 HTTP 请求时:

{
    "id": 1986,
    "jsonrpc": "2.0",
    "method": "method",
    "params":
      {
        ${__P(rq,)}
      }
}

所有属性都用单引号括起来,这导致请求在 return 中收到错误 400,因为获取 属性 后的请求看起来像这样:

{
    "id": 1986,
    "jsonrpc": "2.0",
    "method": "method",
    "params":
      {
        'rq':
          'number': '7312sa1'
          'signed': '2020-06-08T00:00:00.000+0000'
          'crmClientId': '1-32D1P'
      }
}

有没有办法将字符串属性传递给带有双引号的请求或以某种方式构造我的 YAML 文件,这将根据此示例构造请求:

{
    "id": 1986,
    "jsonrpc": "2.0",
    "method": "method",
    "params":
      {
        rq:
          "number": "7312sa1"
          "signed": "2020-06-08T00:00:00.000+0000"
          "crmClientId": "1-32D1P"
      }
}

我尝试使用 groovy replaceAll() 方法,但它不适用于复杂的对象。我现在唯一的解决方案是 运行 setUp 线程中的某种 groovy 脚本,然后通过 groovy jmeter 函数

获取它们是 HTTP 请求

您正在发送 Python 的 dictionary 的字符串表示形式,您需要将其作为简单字符串发送。

查看 YAML Multiline Strings 并选择最适合您的选项。

用法示例:

modules:
  jmeter:
    properties:
      rq: >
        \n"number": "7312sa1"\n
        "signed": "2020-06-08T00:00:00.000+0000"\n
        "crmClientId": "1-32D1P"\n

Taurus is presumably built to make testers and/or devops lives easier,看来不是你的情况,也许你应该考虑改用没有任何包装器的 JMeter?