我正在使用JMeter 3.2来创建一些性能测试。
我有一个设置,其中一个线程组有多个线程(用户),每次都执行多个循环请求资源,形成一个服务器。
每个线程都通过一个只有一个控制器,该控制器从服务器检索一个标识用户的标记,并且在所有后续请求中都是必需的。每次生成时令牌都不同,我无法将其存储在数据集(csv)中,因为它以后无效。
我有一个数据集(.csv文件),其中包含我的测试用户的用户名和密码。
到目前为止一直很好..现在线程需要在服务器上请求要求发送令牌的资源。它第一次顺利,但第二次开始搞乱。似乎每次迭代都使用数据集中下一行的数据,但检索到的令牌(来自一次性控制器)没有链接到使用的数据行(用户名和密码),所以会发生这样的事情:
thread1:data1 / token1 - good
thread2:data2 / token2 - good
也许thread2首先完成并开始新的迭代:
thread2:data1 / token2 - 错误
thread1:data2 / token1 - 错误
所以我的问题是:如何将检索到的令牌链接到数据集中的行(作为变量),以便每次将该数据用于请求时都会发送正确的令牌?
修改 我有个主意。使用数据集中的某些数据创建Hashtable,作为键,将令牌作为值,但我有一些问题。我创建了以下代码:
import java.util.Hashtable;
map = new Hashtable();
vars.putObject("map", map);
但是它会抛出以下错误:
java.util.Hashtable cannot be cast to java.lang.String
答案 0 :(得分:0)
我终于弄清楚了,虽然它可能不是最理想的解决方案。我所做的是创建一个属性(变量不起作用),这是一个JSONObject。在这里我可以存储一个id(对于我的数据)和链接到它的令牌。我将它转换为字符串并将其存储在属性中。
在需要令牌的http请求的预处理器中,我检索属性并将其解析回JSONObject,并可以使用id查找令牌。