2016-11-21 141 views
3

我正在运行JSR223声明,在此我使用groovy将预期响应与实际响应进行比较。如果不相等,断言失败。 这里是代码JMeter断言结果

import groovy.json.JsonSlurper; 

JsonSlurper slurper = new JsonSlurper(); 
boolean set_assertion = true; 

def expected_response = slurper.parseText("<JSON response goes here>"); 
def actual_response = slurper.parseText(prev.getResponseDataAsString()); 

if (expected_response != actual_response) 
{ 
    set_assertion = false; 
    log.error("expected_response != actual_response"); 
    assert set_assertion == true; 
    SampleResult.setSuccessful(false); 
} 

现在,断言确实失败。但我认为它失败了,因为我在日志中遇到了内部错误。 这是我的断言结果。 Assertion Results 这里是日志

ERROR - jmeter.threads.JMeterThread: Error processing Assertion Assertion failed: 

assert set_assertion == true 
     |    | 
     false   false 

    at org.codehaus.groovy.runtime.InvokerHelper.assertFailed(InvokerHelper.java:402) 
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.assertFailed(ScriptBytecodeAdapter.java:650) 
    at Script48.run(Script48.groovy:16) 
    at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:352) 
    at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:153) 
    at javax.script.AbstractScriptEngine.eval(Unknown Source) 
    at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:206) 
    at org.apache.jmeter.assertions.JSR223Assertion.getResult(JSR223Assertion.java:47) 
    at org.apache.jmeter.threads.JMeterThread.processAssertion(JMeterThread.java:755) 
    at org.apache.jmeter.threads.JMeterThread.checkAssertions(JMeterThread.java:746) 
    at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:490) 
    at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:410) 
    at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:241) 
    at java.lang.Thread.run(Unknown Source) 

理想我应该不会有错误,我应该断言失败,应具有以下结果“断言错误:错误”和“断言失败:真”。

请你帮我理解我犯了什么错误。我最关心的是日志中的错误。谢谢!

+0

你想要做断言,但没有它会抛出错误?不要以为我明白...只是不要做断言行 –

+0

@tim_yates它不应该错误吗?我有一个响应断言失败,但不会给我一个错误。 – Dummy

回答

3

发生了什么事:

你正在使用Groovy“断言”。正如下面的比较是错误的:

expected_response != actual_response

你失败告终于:

assert set_assertion == true;

这将引发org.codehaus.groovy.runtime.powerassert.PowerAssertionError这是一个子类或java.lang.Error的这被困在这里:

所以JMeter的执行这段代码是你会得到什么:

 assertionResult = new AssertionResult("Assertion failed! See log file."); 
     assertionResult.setError(true); 
     assertionResult.setFailureMessage(e.toString()); 

这似乎没什么问题,但为什么使用Groovy断言这里?这将是更有效的,只是这样做:

if (expected_response != actual_response) 
{ 
     log.error("expected_response != actual_response"); 
     AssertionResult.setFailure(true); 
     AssertionResult.setFailureMessage("expected_response != actual_response"); 
} 

您可以了解更多关于断言阅读本blog