如何在JMeter中为每个请求添加唯一性
How to add unique to each request in JMeter
我有一个 JSON 数组,其中包含 n 个元素,例如 productName、productId。我想在 productId 中为每个元素和每个请求生成唯一的 ID。
目前,我正在从 .csv
文件中读取 productId
但对于每个请求,相同的 productId 应用于所有元素.例如:
test.csv
productId
10
11
12
13
14
在 JMeter 中,它像下面这样替换请求 1:
[
{
"productName": "Apple",
"productId": "10"
},
{
"productName": "Apple",
"productId": "10"
},
{
"productName": "Apple",
"productId": "10"
},
{
"productName": "Apple",
"productId": "10"
}
]
请求 2:
[
{
"productName": "Apple",
"productId": "11"
},
{
"productName": "Apple",
"productId": "11"
},
{
"productName": "Apple",
"productId": "11"
},
{
"productName": "Apple",
"productId": "11"
}
]
但我期望的方式是,第一个请求应该是
[
{
"productName": "Apple",
"productId": "10"
},
{
"productName": "Apple",
"productId": "11"
},
{
"productName": "Apple",
"productId": "12"
},
{
"productName": "Apple",
"productId": "13"
}
]
第二个请求应该像下面这样,依此类推,
[
{
"productName": "Apple",
"productId": "14"
},
{
"productName": "Apple",
"productId": "15"
},
{
"productName": "Apple",
"productId": "16"
},
{
"productName": "Apple",
"productId": "17"
}
]
productId 应该为每个请求生成一些随机 ID,并为 json 中的所有元素应用随机 ID。我们如何在 JMeter 中实现这一点?
您可以使用 JMeter function __UUID
生成一个随机的唯一编号
将 productId 替换为以下内容
${__UUID}
例子
[
{
"productName": "Apple",
"productId": "${__UUID}"
},
{
"productName": "Apple",
"productId": "${__UUID}"
},
{
"productName": "Apple",
"productId": "${__UUID}"
},
{
"productName": "Apple",
"productId": "${__UUID}"
}
]
另一个解决方案可能是使用 __CSVRead function instead of CSV Data Set Config 元素。
注:
- 您必须删除列名称。即第一行
- 确保 CSV 文件中有足够的测试数据
[
{
"productName": "Apple",
"productId": "${__CSVRead(productIds.csv,0)}${__CSVRead(productIds.csv,next)}"
},
{
"productName": "Apple",
"productId": "${__CSVRead(productIds.csv,0)}${__CSVRead(productIds.csv,next)}"
},
{
"productName": "Apple",
"productId": "${__CSVRead(productIds.csv,0)}${__CSVRead(productIds.csv,next)}"
},
{
"productName": "Apple",
"productId": "${__CSVRead(productIds.csv,0)}${__CSVRead(productIds.csv,next)}"
}
]
根据 CSV Data Set Config 文档:
By default, the file is only opened once, and each thread will use a different line from the file. However the order in which lines are passed to threads depends on the order in which they execute, which may vary between iterations. Lines are read at the start of each test iteration. The file name and mode are resolved in the first iteration.
如果你想生成一个随机数,你可以选择 __Random() function,它会在给定范围内生成一个随机数:
[
{
"productName": "Apple",
"productId": "${__Random(1,2147483647,)}"
},
{
"productName": "Apple",
"productId": "${__Random(1,2147483647,)}"
},
{
"productName": "Apple",
"productId": "${__Random(1,2147483647,)}"
},
{
"productName": "Apple",
"productId": "${__Random(1,2147483647,)}"
}
]
有关 JMeter 函数概念的更多信息:Apache JMeter Functions - An Introduction
我有一个 JSON 数组,其中包含 n 个元素,例如 productName、productId。我想在 productId 中为每个元素和每个请求生成唯一的 ID。
目前,我正在从 .csv
文件中读取 productId
但对于每个请求,相同的 productId 应用于所有元素.例如:
test.csv
productId
10
11
12
13
14
在 JMeter 中,它像下面这样替换请求 1:
[
{
"productName": "Apple",
"productId": "10"
},
{
"productName": "Apple",
"productId": "10"
},
{
"productName": "Apple",
"productId": "10"
},
{
"productName": "Apple",
"productId": "10"
}
]
请求 2:
[
{
"productName": "Apple",
"productId": "11"
},
{
"productName": "Apple",
"productId": "11"
},
{
"productName": "Apple",
"productId": "11"
},
{
"productName": "Apple",
"productId": "11"
}
]
但我期望的方式是,第一个请求应该是
[
{
"productName": "Apple",
"productId": "10"
},
{
"productName": "Apple",
"productId": "11"
},
{
"productName": "Apple",
"productId": "12"
},
{
"productName": "Apple",
"productId": "13"
}
]
第二个请求应该像下面这样,依此类推,
[
{
"productName": "Apple",
"productId": "14"
},
{
"productName": "Apple",
"productId": "15"
},
{
"productName": "Apple",
"productId": "16"
},
{
"productName": "Apple",
"productId": "17"
}
]
productId 应该为每个请求生成一些随机 ID,并为 json 中的所有元素应用随机 ID。我们如何在 JMeter 中实现这一点?
您可以使用 JMeter function __UUID
生成一个随机的唯一编号将 productId 替换为以下内容
${__UUID}
例子
[
{
"productName": "Apple",
"productId": "${__UUID}"
},
{
"productName": "Apple",
"productId": "${__UUID}"
},
{
"productName": "Apple",
"productId": "${__UUID}"
},
{
"productName": "Apple",
"productId": "${__UUID}"
}
]
另一个解决方案可能是使用 __CSVRead function instead of CSV Data Set Config 元素。
注:
- 您必须删除列名称。即第一行
- 确保 CSV 文件中有足够的测试数据
[
{
"productName": "Apple",
"productId": "${__CSVRead(productIds.csv,0)}${__CSVRead(productIds.csv,next)}"
},
{
"productName": "Apple",
"productId": "${__CSVRead(productIds.csv,0)}${__CSVRead(productIds.csv,next)}"
},
{
"productName": "Apple",
"productId": "${__CSVRead(productIds.csv,0)}${__CSVRead(productIds.csv,next)}"
},
{
"productName": "Apple",
"productId": "${__CSVRead(productIds.csv,0)}${__CSVRead(productIds.csv,next)}"
}
]
根据 CSV Data Set Config 文档:
By default, the file is only opened once, and each thread will use a different line from the file. However the order in which lines are passed to threads depends on the order in which they execute, which may vary between iterations. Lines are read at the start of each test iteration. The file name and mode are resolved in the first iteration.
如果你想生成一个随机数,你可以选择 __Random() function,它会在给定范围内生成一个随机数:
[
{
"productName": "Apple",
"productId": "${__Random(1,2147483647,)}"
},
{
"productName": "Apple",
"productId": "${__Random(1,2147483647,)}"
},
{
"productName": "Apple",
"productId": "${__Random(1,2147483647,)}"
},
{
"productName": "Apple",
"productId": "${__Random(1,2147483647,)}"
}
]
有关 JMeter 函数概念的更多信息:Apache JMeter Functions - An Introduction