2011-10-26 2 views
2

SoapUI를 사용하여 실제 웹 서비스에 액세스하기 전에 응용 프로그램 (APP)을 테스트하기 위해 웹 서비스를 모의합니다.비동기 서비스를 비웃는 SoapUI

미리 정의 된 응답을 반환하는 동기 모의 서비스를 만드는 것은 간단합니다. 하지만 비동기식 서비스가 요청을 보내면 SoapUI가 즉시 확인 (예 : SUCCESS)으로 응답 한 다음 미리 정의 된 간격 후에 SoapUI가 응용 프로그램을 다시 호출합니다 (APP는 서버로 작동 함).). 첫 번째 단계는 MockResponse이고 지연 후 MockRequest (우리의 앱을 호출하는) 인 테스트 케이스를 사용하여 관리했다.

위의 코드는 잘 작동하지만 테스트 사례를 사용하지 않으려면 모의 응답에서 직접 스크립팅하여 테스트하고 싶습니다. 나는 모의 서비스 (Mock Service)가 요청을 받으면 콜백을 시작하는 스크립트를 작성했다.

def project = result.mockOperation.mockService.project 
// The API documentation doesn't say what finish is supposed to do but I try (doesn't help) 
result.finish() 
// Request that will be returned back - THE CALLBACK 
def request = project.interfaces["LocationServicesOperation"].operations["ackLocation"].getRequestByName("Request 1") 
sleep(4000) 
request.submit(new com.eviware.soapui.impl.wsdl.WsdlSubmitContext(), false) 

위의 문제는 초기 요청에 대한 응답을 보내기 전에 콜백을 시작한다는 것입니다. SoapUI PRO에서 이벤트 처리를 사용하여 시도했지만 그 작업을 얻을 수 없습니다.

1) APP request -> SoapUI 
2) SoapUI callback -> APP 
3) APP confirms 2) -> SoapUI 
4) SoapUI confirms 1) -> APP 

가 있어야하지만 :

1) APP request -> SoapUI 
2) SoapUI confirms 1) -> APP 
3) SoapUI callback -> APP 
4) APP confirms 2) -> SoapUI 

위의 코드는 프로 SoapUI에서 MockRunListener.onMockResult 이벤트에서 실제로 와이어 샤크에서이 같은 통신을 볼 수 있습니다. result.finish()은 그 속임수를 쓰지 않습니다.

팁 주셔서 감사합니다!

답변

2

는 드디어 트릭 대신 테스트에 콜백 요청을 추가 한 다음 테스트를 호출 응답 스크립트 내에서 직접 요청을 파견했다 http://www.eviware.com/forum/viewtopic.php?f=5&t=3542&p=12474&hilit=asynchronous#p12474

에서 해결책을 발견했다. 그러면 모의 러너가 먼저 요청에 응답을 보내고 그 후에 테스트 케이스를 실행하게됩니다.

장점은 테스트 케이스가 동적으로 트리거되고 항상 실행될 필요가 없다는 것입니다.

관련 문제