从JMeter中具有动态名称的文件中读取字符串

时间:2012-10-10 19:40:12

标签: jmeter

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

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

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

  • 用户名
  • 密码
  • GROUP_ID

用户可以根据其group_id访问问题。我想在每个帖子中为不同的问题添加10条评论。

我的想法是构建一个像questions_by_group_${group_id}.txt这样的文件,其中包含${group_id}可以访问的一些问题ID。然后我可以在POST参数值中${__StringToFile(questions_by_group_${group_id}.txt)}添加注释。使用__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)})})}

但没有任何作用。

1 个答案:

答案 0 :(得分:0)

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

你可以这样组织你的csv:

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

然后将CSV数据集配置放在Once Only Controller之前。

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

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

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

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

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

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

    JMeterUtils.setProperty(propertyName, propertyValue);
    

然后在您的控制器中,使用Beanshell采样器来使用以下内容获取ID:

    JMeterUtils.getProperty(propertyName);

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