2016-11-21 9 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 에러를 잡아서는 안된다? Response Assertion이 실패했지만 오류가 발생하지 않습니다. – Dummy

답변

3

다음은 어떤 일입니까 :

Groovy "assert"를 사용 중입니다. 비교 다음과 같이하면 false입니다

expected_response != actual_response

당신은에 실패 끝 :

assert set_assertion == true;

이 서브 클래스 또는 상위를하다 org.codehaus.groovy.runtime.powerassert.PowerAssertionError을 던지는 여기에 갇혀 :

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

이 나에게 좋은 것,하지만 왜 그루비 여기 주장 사용 : 그래서 JMeter를 당신이 무엇을 얻을 인이 코드를 실행? 그냥 이렇게하는 것이 훨씬 더 효율적입니다 :

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

당신이 blog를 읽고 주장에 자세히 알아볼 수 있습니다.