带有 JDBC 结果集变量和计数器变量的 JMeter 嵌套变量参考

sup*_*ted 2 jdbc database-testing httpresponse jmeter httprequest

我需要查询 MYSQL 数据库以获取 siteID 和 siteURL 列表。我已在 JDBC 请求的变量名称字段中指定了这些名称。

然后我创建了一个 ForEach 逻辑控制器来循环访问 siteURL ${siteURL_1} 直到结果中的最后一条记录,如下所示:

Input Variable Prefix: siteURL
Start Index: 0
End Index: 40
Output Variable Name: newSiteURL
Run Code Online (Sandbox Code Playgroud)

然后我在 HTTP 请求的路径字段中使用它:

${newSiteURL}
Run Code Online (Sandbox Code Playgroud)

这工作正常并且 HTTP 请求正在处理。

现在,我想正确命名 HTTP 请求,以便更好地索引它们。为此,我决定使用结果集中的 siteID 字段。

为此,我创建了一个计数器变量,如下所示:

Start: 1
Increment: 1
Maximum: 40
Reference Name: siteIndex
Run Code Online (Sandbox Code Playgroud)

现在,为了从相应 HTTP 请求中显示的结果中获取 siteID,我将 HTTP 请求的 Name 字段编辑为:

${siteID_"({siteIndex})"}
Run Code Online (Sandbox Code Playgroud)

但我在查看结果树中的 HTTP 请求最终仍然显示为:

${siteID_"({siteIndex})"}
${siteID_"({siteIndex})"}
${siteID_"({siteIndex})"}
${siteID_"({siteIndex})"}
${siteID_"({siteIndex})"}
...
Run Code Online (Sandbox Code Playgroud)

而不是 HTTP 请求中相应 siteURL 的实际 siteID,例如:

21231
12315
21654
64574
76876
...
Run Code Online (Sandbox Code Playgroud)

Dmi*_*i T 5

你需要改变这一点:

${siteID_"({siteIndex})"}
Run Code Online (Sandbox Code Playgroud)

${__V(siteID_${siteIndex})}
Run Code Online (Sandbox Code Playgroud)

解释:

根据__V 函数文档

例如,如果有变量 A1,A2 且 N=1:

${A1} - 工作正常

${A${N}} - 不起作用(嵌套变量引用)

${__V(A${N})} - 工作正常。A${N} 变为 A1,__V 函数返回 A1 的值

有关如何使用有用的JMeter 函数完成工作的更多示例,请参阅使用 JMeter 函数帖子系列。