问题描述
需要使用以下格式从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会出现堆空间不足的情况。有没有更好的方法来处理这么大的字符串?无法减少长度。
解决方法
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文章。更多细节。