Groovy 如何在响应断言失败时将JMeter变量写入文件

Groovy 如何在响应断言失败时将JMeter变量写入文件,groovy,jmeter,jsr223,Groovy,Jmeter,Jsr223,我在HTTP请求下有一个响应断言,它检查用户登录时是否显示“访问不足”。这是一个简单的文本断言 仅在失败时,我希望将用户凭据写入文件。我正试图通过JS223后处理器来实现这一点,到目前为止,我只能找到关于如何使用它写入文件的信息,但是我找不到关于如何首先检查响应断言的任何信息 FileWriter fstream = new FileWriter("C:\\Loadtest\\log.txt",true); //Create New file with name &q

我在HTTP请求下有一个响应断言,它检查用户登录时是否显示“访问不足”。这是一个简单的文本断言

仅在失败时,我希望将用户凭据写入文件。我正试图通过JS223后处理器来实现这一点,到目前为止,我只能找到关于如何使用它写入文件的信息,但是我找不到关于如何首先检查响应断言的任何信息

    FileWriter fstream = new FileWriter("C:\\Loadtest\\log.txt",true); //Create New file with name "subid"
    
    BufferedWriter out = new BufferedWriter(fstream);
    
    // Need logic to check if response has failed and then do below steps
    if (assertionhasfailed)
    {
        out.write(vars.get("account"));
        out.write(System.getProperty("line.separator"));//insert new line
    }
    
    out.close();
    fstream.close();
编辑

我通过使用JS223断言解决了这个问题:

Boolean result = prev.getResponseDataAsString().contains("Insufficient privileges")

FileWriter fstream = new FileWriter("C:\\Loadtest\\log.txt",true); //Create New file with name "subid"

BufferedWriter out = new BufferedWriter(fstream);

if (result)
{
    out.write(vars.get("account"));//write value of variable 1
    out.write(System.getProperty("line.separator"));//insert new line
    AssertionResult.setFailure(true);
        AssertionResult.setFailureMessage("User has insufficient privileges");
}

out.close();
fstream.close();

现在的问题是,这是否是最好的方法?我这样问是因为我注意到在运行测试时,当它处理断言时有明显的延迟。这可能会扭曲性能指标。

在惯用Groovy中,您的代码看起来像:

new File("C:\\Loadtest\\log.txt").withWriter{ out ->
  boolean result = prev.responseDataAsString.contains 'Insufficient privileges'

  if (result) {
    out.println vars.account
    AssertionResult.failure = true
    AssertionResult.failureMessage = 'User has insufficient privileges'
  }
}

根据JMeter测试元素:

  • 配置元素
  • 预处理器
  • 计时器
  • 采样器
  • 后处理器(除非SampleResult为空)
  • 断言(除非SampleResult为空)
  • 侦听器(除非SampleResult为空)
  • 后处理器在断言之前执行,因此您无法访问采样器的实际状态

    您需要切换到,这样您就可以检查采样器是否成功,如下所示:

    if (!prev.isSuccessful()) {
        //your code here
    } 
    
    其中,
    prev
    代表previous

    更多信息: