使用beanshell后处理器无法将特定文本写入文件,给出null?

时间:2017-07-31 09:53:39

标签: csv jmeter beanshell

我试图将数据写入csv文件,我能够将一些值写入csv文件,但无法写出一个句子中包含20个以上单词的值。

文字:<msg>Congratulations! Your hall eGift Card of 120000 INR has been redeemed successfully on all Merchant Your redemption transaction number is 188</msg>

代码:

import java.io.File;
import org.apache.jmeter.services.FileServer;


pramvalues=vars.get("paramvalues_2");

Result = "FAIL";
Response = prev.getResponseDataAsString();

if(Response.contains("Congratulations! Your hall eGift Card"))
    Result = "PASS";


f = new FileOutputStream("E:/ApacheJmeter/TestResults/Results.csv", true);
p = new PrintStream(f);

p.println(vars.get("mes")+","+Result);

p.close();
f.close();

我得到&#34; mes&#34; as&#34; null&#34;但在调试中,采样器数据即将到来。

请提供帮助。

1 个答案:

答案 0 :(得分:0)

使用Beanshell将行写入文件并不是最好的想法,好像你将与许多线程同时执行此操作,您将遇到竞争条件并且您的结果文件将被损坏。

我会推荐以下内容:

  1. 使用Response Assertion检查响应中是否存在Congratulations! Your hall eGift Card文字
  2. 使用Sample Variables属性&#34;告诉&#34; JMeter将mes变量值存储到.jtl结果文件中。你可以用两种方式做到这一点:

    • 将以下行添加到 user.properties 文件(位于JMeter&#39; s&#34; bin&#34;文件夹中)

      sample_variables=mes
      
    • 或通过-J command-line argument like

      传递
      jmeter -Jsample_variables=mes -n -t test.jmx -l resutl.jtl
      

      请参阅Apache JMeter Properties Customization Guide以了解有关JMeter属性以及设置和覆盖它们的方法的更多信息

      假设一切顺利,您应该在.jtl结果文件中看到一个名为mes的额外列,它将包含${mes}变量值。

  3. 如果您仍想使用脚本切换到JSR223 ElementsGroovy language,也可以使用Critical Section Controller来避免竞争条件。