如何在 Jmeter 中处理更大长度的随机字符串

How to handle bigger length of random string in Jmeter

需要post来自 Jmeter 的具有以下格式的负载,

示例 HTTP 负载:

[
  {
    "audit": {
        "id": "${id}",
        "timestamp": "${time}",
        "type": "input",
        "entry": "File retrieved, validated and processed successfully",
        "message": {
          "headers": "${headrer_payload}",
          "payload": "${message_payload}",
          "type": "csv",
          "protocol": ""
        },
        "keys": [
          {
            "name": "file-archive-location",
            "value": "Performance Test From Jmeter"
          }
        ]
      },
      "context": {
        "transactionId": "${trans_id}",
        "messageId": "${messageid}",
        "customerId": "Test",
        "studyId": "TEST1234"
      }
    },
    "dataVersion": "1.0",
    "metadataVersion": "1"
  }
]

此处 headrer_payload & message_payload 我在 JSR223 预处理器中使用 Jmeter 随机函数,长度如下,

def header = "${__RandomString(30500,abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890=,)}"
def payload = "${__RandomString(30500,abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890=,)}"

    vars.put("headrer_payload",header);
    vars.put("message_payload",payload);

我担心此脚本何时会 运行 更长时间 JMeter 有一个堆 space c运行ch。有没有更好的方法来处理这么大的字符串?无法减少长度。

Don't inline JMeter Functions or Variables into Groovy scripts, you can insert JMeter Functions directly into HTTP Request采样器的“Body数据”区域:

[
  {
    "audit": {
        "id": "${__UUID}",
        "timestamp": "${time}",
        "type": "input",
        "entry": "File retrieved, validated and processed successfully",
        "message": {
          "headers": "${__RandomString(30500,abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890=,)}",
          "payload": "${__RandomString(30500,abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890=,)}",
          "type": "csv",
          "protocol": ""
        },
        "keys": [
          {
            "name": "file-archive-location",
            "value": "Performance Test From Jmeter"
          }
        ]
      },
      "context": {
        "transactionId": "${__UUID}",
        "messageId": "${__UUID}",
        "customerId": "Test",
        "studyId": "TEST1234"
      }
    },
    "dataVersion": "1.0",
    "metadataVersion": "1"
  }
]

此外,如果您勾选了“缓存编译脚本”框,则意味着相同的值将用于所有后续迭代,而不是生成一个新值。

将函数注入 HTTP 请求采样器 body 将允许您避免在 JMeter 变量中保存 60 KB 的数据,因此堆使用量将减少该因素。

一般情况下,您可以拥有 2 GB 的字符串而不会出现任何问题,因为它们适合您的 JVM 堆,并且在任何情况下,只要您有足够的 RAM,就可以为 JMeter 分配更多的堆,请参阅 9 Easy Solutions for a JMeter Load Test “Out of Memory” Failure文章了解更多详情。