【问题标题】:Execute request for each element in CSV, not per user对 CSV 中的每个元素执行请求,而不是每个用户
【发布时间】:2017-07-25 14:25:05
【问题描述】:

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

我的测试计划:

获取令牌请求检索令牌。登录请求登录用户并返回另一个令牌。选择客户卡选择客户并返回最终令牌。后处理器的代码是(我没有这方面的经验,所以任何建议都值得赞赏):

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 预处理器。如果它为空或为空,我将令牌变量设置为“”。在 if 控制器中,我检查此值。但是,是的。还没有运气。

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

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

如果您需要更多信息,请告诉我。

【问题讨论】:

  • 你能展示你的测试计划吗?
  • 我已经添加了我的测试计划
  • 什么是数据?您如何获取数据并期望它成为令牌?还有你如何在 BeanShell 中调用测试片段?
  • Data 显然是我的 http 请求的响应。这不是我编造的。不幸的是,我无法从 Beanshell 调用测试片段。如果可以的话,它会解决我的问题。
  • 您在 BeanShell 中检查/打印数据是否有效且不为空?

标签: jmeter


【解决方案1】:

我想出了一个解决方案。本质上,我试图做的是为数据文件中的每一行存储一个令牌。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 2018-10-21
    • 2014-09-13
    相关资源
    最近更新 更多