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

问题描述

需要使用以下格式从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,)}"

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

我担心此脚本将运行更长时间时,JMeter会出现堆空间不足的情况。有没有更好的方法来处理这么大的字符串?无法减少长度。

enter image description here

解决方法

Don't inline JMeter Functions or Variables into Groovy scripts,您可以将JMeter Functions直接插入HTTP Request采样器的“ Body Data”区域:

[
  {
    "audit": {
        "id": "${__UUID}","timestamp": "${time}","type": "input","entry": "File retrieved,validated and processed successfully","message": {
          "headers": "${__RandomString(30500,abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890=,)}","payload": "${__RandomString(30500,"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 Request采样器主体将使您避免在JMeter变量中保存60 KB的数据,因此堆使用量将减少该因子。

通常,您可以有2 GB的字符串,只要它们适合您的JVM Heap,就不会有任何问题;在任何情况下,只要您有足够的RAM,就可以将更多的堆分配给JMeter,有关详细信息,请参见9 Easy Solutions for a JMeter Load Test “Out of Memory” Failure文章。更多细节。