【问题标题】:JMeter: Which to use: CSV, Array, or Array List?JMeter:使用哪个:CSV、数组或数组列表?
【发布时间】:2016-03-10 13:47:15
【问题描述】:

首先让我用 1) 我不是天生的开发人员,以及 2) 我使用 JMeter 才不到 1 个月。

我正在对我们的 API 进出我们的数据库执行基本的 CRUD 测试。由于表约束,被测表中的每条记录都必须具有唯一的 typeId 和 groupId,其中 typeId/groupId 组合在其他地方预定义。

我需要在基本创建时执行以下操作:

路径:/.../.../.../crud/QualificationExpression 方法:POST

{
    "id": null,
    "displayName": "crudTest: ${__Random(1,10000000, randomNumber)}",
    "functionName": null,
    "displayableSourceExpression": "TRUE",
    "clobObjId": null,
    "typeId": xxx,
    "groupId": yyy,
    "typeCode": null
}

我正在尝试找出最好的方法:

  • CSV 文件
  • 数组
  • 数组列表

搜索论坛和其他在线资源,当人们使用 CSV 时,他们通常使用它来存储随机登录的用户名|密码。这导致他们使用参数而不是帖子正文。

数组示例似乎都包含一个单列数组,它们从数组中提取随机值。但是,我有一对:如果 typeId = x,那么 objectId 必须 = y。

然后我看到一个数组列表示例,我完全感到困惑:

ArrayList listOfPairs = new ArrayList();
    ArrayList pair1 = new ArrayList();
       pair1.add(203);
       pair1.add(303);
       listOfPairs.add(pair1);
    ArrayList pair2 = new ArrayList();
       pair2.add(204);
       pair2.add(304);
       listOfPairs.add(pair2);
    ArrayList pair3 = new ArrayList();
       pair3.add(205);
       pair3.add(305);
       listOfPairs.add(pair3);

    for (int i = 0; i < listOfPairs.size(); i++) {
        ArrayList pair = (ArrayList)listOfPairs.get(i);
        System.out.println("pair:" + pair.get(0) + " " + pair.get(1));
    }

我希望没有 CSV 文件,最好让测试计划 .jmx 独立,而不依赖于存在的“有效负载”文件。

希望有更多经验和知识的人可以提供一些指导和见解。

【问题讨论】:

    标签: jmeter


    【解决方案1】:

    选择Functions,从性能角度来看,最好尽可能使用内置组件。

    如果你:

    • 需要预先定义(非随机)typeIdgroupId 组合 - 您需要将这些对保存在某处
    • 不想要外部文件 - 您需要将这些文件存储在测试计划本身中,即在 User Defined Variables
    • 需要 typeIdgroupId 对是唯一的 - 最明显的解决方案是使用当前虚拟用户号作为前缀或后缀,例如:

      • 在用户定义的变量中:

      • 在请求正文中使用__threadNum()__V() 函数组合,如:

        "typeId": "${__V(typeId_${__threadNum})}",
        "groupId": "${__V(groupId_${__threadNum})}",
        
    • 计划运行多次迭代的测试 - 使用 __counter() 函数作为额外的后缀

    请参阅How to Use JMeter Functions 系列文章以获取有关上述和其他 JMeter 功能的全面信息。

    【讨论】:

    • 非常感谢。在阅读了您关于函数的 Blazemeter 博文后,我还有一个问题:如果您只使用 1 个线程并且不想使用相同的类型/组对,会发生什么情况?起初,我通过传入循环计数器来递增${__FileToString(${payloads}/${__eval(groupRequest_${LoopCounter1})}.json,,)} 。然后切换到读取 csv "grouptypeId": ${P_grouptypeId}, | "groupId": ${P_groupId}, | 现在使用 __threadNum(),我现在总是抓取相同的类型/组对。 ${__V(groupType_${__threadNum})}
    【解决方案2】:

    您的要求与this post 中的要求差不多。

    当您一次又一次地发送相同的 HTTP 请求时 - 只需更改不同的参数,在您的情况下键入 id 和组 id - 绝对使用 CSV data set config 是一个非常好的选择,如果它在数据库中,则使用 JDBC Request。我不明白你为什么不喜欢 CSV 文件的方法。如果我是你,我会尽量让数据完全远离测试脚本。以后维护起来会很方便。

    假设您正在使用arraylist(为什么是arraylist?您的意思是Map?)!突然,如果您需要为一组新的 1000 个类型 id 和组 id 运行测试,您会更新脚本以将这些 id 添加到 Array 或 Map 中吗?如果您使用 CSV 数据集配置,只需将文件路径更改为指向新的 CSV。而已。你很好!

    不要通过包含 beanshell/其他采样器来创建测试数据等来增加测试计划的复杂性。保持测试计划非常简单。 JMeter 的工作应该很简单——发送请求并获得响应。它不应该花时间创建测试数据。

    【讨论】:

    • 不使用 CSV 数据集的原因是客户端要求它是一个独立文件,不依赖于其他文件。这不是测试逻辑,而是新的多租户数据库环境中 2 个应用程序之间的连接。 (即,数据库架构中的 CRUD 功能)因此,通过在用户定义的变量部分中定义类型/组配对,没有 JMeter 经验的人可以在 Notepad++ 中打开 .jmx 并编辑主机名、端口号、组 ID、键入 ID 等,例如 .xml 文件,无需编辑其他文件或担心它们的存在/位置。
    猜你喜欢
    • 2019-12-06
    • 1970-01-01
    • 2012-08-09
    • 2010-09-29
    • 2016-05-06
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多