我正在设置jmeter负载测试,每个模拟用户将提交对自己独特内容源的引用。因此,在每次测试的开始,我将创建一个新的文件夹结构,其中的路径包括对每个模拟用户的数字引用。
该数字计划与jmeter ${__threadNum}
的值相对应。
测试运行后,每个模拟用户都会向API端点发送一个POST请求,该请求的主体将包含指向任何给定用户目录中每个文件的绝对路径。
示例: 如果测试模拟两个用户,我将创建以下文件夹结构:
/storage
/testfiles_user1
test_file_1
test_file_2
/testfiles_user2
test_file_1
test_file_2
然后,对于每个用户,POST请求的请求正文中将包含以下JSON
:
对于user1:
{
"files": [
"/storage/testfiles_user1/test_file_1",
"/storage/testfiles_user1/test_file_2"
]
}
对于user2:
{
"files": [
"/storage/testfiles_user2/test_file_1",
"/storage/testfiles_user2/test_file_2"
]
}
这是我的问题。
当我以以下方式在HTTP请求正文中对此路径进行硬编码时,调用${__threadNum}
{
"files": [
"/storage/testfiles_user${__threadNum}/test_file_1",
"/storage/testfiles_user${__threadNum}/test_file_2"
]
}
然后一切都按预期工作=>使用${__threadNum}
变量值更新路径,产生以下两个JSON
:
对于user1:
{
"files": [
"/storage/testfiles_user1/test_file_1",
"/storage/testfiles_user1/test_file_2"
]
}
对于user2:
{
"files": [
"/storage/testfiles_user2/test_file_1",
"/storage/testfiles_user2/test_file_2"
]
}
但是,当我尝试将HTTP请求正文JSON作为命令行参数传递时,${__threadNum}
在路径中呈现为普通文本,而jmeter却不将其视为变量,从而产生以下两个{{1} }:
对于用户1:
JSON
对于user2:
{
"files": [
"/storage/testfiles_user${__threadNum}/test_file_1",
"/storage/testfiles_user${__threadNum}/test_file_2"
]
}
您对如何解决此问题有任何建议吗?谢谢您的帮助!
答案 0 :(得分:0)
为了解析文件中或通过命令行参数传递的JMeter变量,您需要将调用包装到__eval() function
中例如,如果您以前有${__P(foo,)}
,则需要将其替换为${__eval(${__P(foo,)})}
-这样将调用嵌套的__threadNum() function。
演示: