JMeter / AMQ - 从JSON文件读取字符串时替换子字符串

时间:2012-10-12 11:58:46

标签: json scripting jms activemq jmeter

自从周一以来,我一直在抨击这个砖墙,当时客户告诉我,为了性能测试,我们需要模拟多达50,000个伪并发实体。这是设置。我有充满JSON对象的文本文件,其中包含看起来像这样的JSON数据:

{"customerId"=>"900", "assetId"=>"NN_18_144", "employee"=>"", "visible"=>false,
 "GenerationDate"=>"2012-09-21T09:41:39Z", "index"=>52, "Category"=>2...}

这是一条线的一个对象。我正在使用JMeter的JMS发布者按顺序读取这些行:

${_StringFromFile(${PATH_TO_DATA_FILES}scenario_9.json)}

来自每个包含不同场景。

我需要做的是读取文件并用50,000个非顺序预生成字符串的列表中的随机选择值替换assetId的值(我不可能为每个assetId创建一个单独的文件,如这将涉及在50,000个文件中乱丢负载注入器并在JMeter中为每个文件配置一个线程组。以编程方式,执行替换是一件微不足道的事情,但是在JMeter中动态执行它并不是那么简单。

通常情况下,我认为这是一个有趣的技术挑战,并花了几天的时间来解决它,但我只有周末,我怀疑我会在办公室过夜睡觉。

有人可以帮帮我吗?

感谢。

2 个答案:

答案 0 :(得分:1)

要阅读资产,请使用CSV Data SetConfig,我认为assetId将是变量名称。

修改表达式:

   ${_StringFromFile(${PATH_TO_DATA_FILES}scenario_9.json, lineToSubstitute)}

要进行替换,请添加Beanshell samplerJSR223_Sampler J(使用groovy)并对替换进行编码:

   String assetId = vars.get("assetId");
   String lineToSubstitute = vars.get("lineToSubstitute");
   String lineSubstituted = ....;
   vars.put("lineSubstituted", lineSubstituted);

答案 1 :(得分:1)

如果您的JSON正文总是相同或者您的变化很小,那么您应该:

  • 使用带有RAW POST Body的HTTP采样器

  • 将JSON正文放入资产ID的变量

  • 将资产ID放入CSV数据集配置

避免使用$ {_ StringFromFile},因为它有成本。

如果您需要编写脚本,请在外部文件+缓存中使用带有脚本的JSR223后处理器(自2.8起可用),以便编译脚本。