对CSV中的每个元素执行请求,而不是每个用户

时间:2017-07-25 14:25:06

标签: jmeter

我正在使用jMeter 3.2编写一些测试。我有一个包含测试帐户信息的CSV文件。每行包含用户的登录信息。每个用户都需要请求在以后的请求中使用的令牌。

我的测试计划:

Test plan

获取令牌请求检索令牌。登录请求登录用户并返回另一个令牌。选择客户卡选择客户并返回最终令牌。 postprocesser的代码是(我没有经验,所以任何建议都表示赞赏):

import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

// Check if our map already exists
if (props.get("map") == null) {

    JSONObject obj = new JSONObject();
    obj.put("${department}", new String(data));
    log.info("Adding department to map. Department: ${department}. Token: " + new String(data));

    props.put("map", obj.toJSONString());

} else {

    // Retrieve the current map
    map = props.get("map");
    JSONParser parser = new JSONParser();
    JSONObject jobj = (JSONObject) parser.parse(map);

    // Add the new department (with it's token) to the map
    jobj.put("${department}", new String(data));
    log.info("Updating map for department. Department: ${department}. Token: " + new String(data));

    props.put("map", jobj.toJSONString());
}

尝试1: 我正在设置一个只有一个控制器来登录用户并检索令牌。

现在假设我的CSV文件中有10行但在我的测试中我只想使用3个用户并循环10次。发生的是发送3个登录请求(每个用户一个)。这适用于第一次迭代。在2.迭代中,3个线程将使用没有令牌的行4-6,从而失败。

尝试2: 我正在使用if控制器来检查令牌是否已设置。我根本没有工作。我在控制器中添加了一个beanshell预处理器,我尝试检索令牌。如果它为null或为空,我将令牌变量设置为“”。在if控制器中,我检查这个值。但是,是的。没有运气了。

尝试3 在Beanshell中,检查是否已创建令牌。如果没有,请调用检索它的测试片段。不幸的是,这似乎不可能。

值得注意的是,我将令牌存储在属性中,以便所有线程都可以访问它。

如果您需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。实质上,我尝试做的是为数据文件中的每一行存储一个令牌。

我通过创建在其他线程组之前执行的setUp Thread Group来完成此操作。在这里,我遍历数据并为每个数据存储一个令牌。现在所有其他线程组可以在它们运行时访问它们。