4

我的测试计划包含一个看起来像这样的线程组:

  • 只有一次控制器:登录到应用程序
    • CSV 数据集配置:用于登录应用程序的信息
    • 只有一次控制器
      • HTTP 请求:POST 登录信息
    • 回路控制器(10次)
      • HTTP 请求:POST 向“问题”添加“评论”

我的 CSV 数据集包含以下字段:

  • 用户名
  • 密码
  • group_id

用户可以根据其 group_id 访问问题。我想为每个线程添加 10 条评论到不同的问题。

我的想法是构建一个文件,例如questions_by_group_${group_id}.txt包含一些${group_id}可以访问的问题的 id。然后我可以${__StringToFile(questions_by_group_${group_id}.txt)}在 POST 参数值中添加注释。使用__StringToFile函数应该在每次调用时遍历我的文件行。这样我就可以为许多不同的问题添加许多评论。

问题是 JMeter 似乎一次打开文件并为每个线程共享它(甚至认为我知道${group_id}每个线程的更改。

我尝试了很多事情,比如

  • ${__StringFromFile(questions_by_group_${group_id}.txt)}
  • ${__StringFromFile(${__eval(questions_by_group_${group_id}.txt)})}
  • ${__eval(${__StringFromFile(${__eval(questions_by_group_${group_id}.txt)})})}

但没有任何效果。

4

1 回答 1

1

StringFromFile 默认以这种方式工作,请阅读:

您可以像这样组织您的 csv:

  • 用户名、密码、group_id、commentID1、commentID2 ....

然后将 CSV Data Set Config 放在 Once Only Controller 之前。

例如,将共享模式设置为所有线程。

最后只使用变量而不是使用 __StringFromFile。

这不是最好的解决方案,因为您必须构建此文件并重复 group_id id。

如果您的组数不是很大,另一种选择是在setUp Thread Group中执行此操作:

  • 读取包含以下内容的 CSV 文件:

      groupID1, IDA1, IDA2,....
      groupID2, IDB1, IDB2,....
      ...
    
  • 每组设置一个属性__setProperty或在 Beanshell 采样器中调用它:

    JMeterUtils.setProperty(propertyName, propertyValue);
    

然后在您的控制器中,使用 Beanshell 采样器获取 id,使用:

    JMeterUtils.getProperty(propertyName);

我必须说我讨厌所有这些解决方案:-)

于 2012-10-10T20:01:05.813 回答