您好我正在使用SoapUI Pro来测试一组Soap Web服务。
我有一个testRunListener,它将我的soap请求的请求和响应记录到运行测试时创建的文件中。在这里我有一个if语句,它在记录请求和响应之前检查测试步骤的名称..
if(testStepResult.testStep.label==("createShipment_1") || testStepResult.testStep.label== ("printLabel_1")
|| testStepResult.testStep.label==("updateShipment_1_StatusAllocated") || testStepResult.testStep.label== ("cancelShipment")
而不是使用各个请求的名称,我想使用更通用的东西,例如可能是createShipment或cancelShipment的请求类型。这是因为我有多个测试步骤使用相同的请求类型,但命名方式不同,例如printLabel_shipmentStatusCancelled等我不希望在if语句条件中列出所有这些。
我在信息中看到记录到文件中有一个名为'SOAPAction'的属性,这是一种请求,在我的情况下(createShipment,cancelShipment,printLabel)等。
---------------- Request ---------------------------
Request Headers: Host : testapi.royalmail.com
Content-Length : 1718
SOAPAction : "cancelShipment"
Accept-Encoding : gzip,deflate
User-Agent : Apache-HttpClient/4.1.1 (java 1.5)
Connection : Keep-Alive
Content-Type : text/xml;charset=UTF-8
我的问题是如何访问此属性,以便我可以在我的groovy脚本中使用它'if condition'?
我看到这也出现在TestRequest Properties中的SoapUI Pro中并被称为'Operation'?
感谢。
答案 0 :(得分:0)
测试步骤请求的属性中的operation
是wsdl:operation
而非SOAPAction
,SOAPAction
被定义为soap:operation
的属性wsdl并在测试步骤请求中作为http标头传递,请查看wsdl描述的以下片段以查看差异:
<wsdl:operation name="myOperation"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<soap:operation soapAction="mySoapAction" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
因此,要使用groovy测试步骤获取SOAPAction
,请获取请求的所有http标头,然后选择SOAPAction
,如下所示:
// get the test request
def testStep = testRunner.testCase.getTestStepByName("Test Request")
// execute
def testStepResult = testStep.run(testRunner,context)
// get the header, and get the SOAPACtion
def headers = testStepResult.requestHeaders
def soapAction = headers.get("SOAPAction")
log.info soapAction
请注意,我认为您在问题中使用的testStepResult
是com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequestStepResult的实例
希望这有帮助,
答案 1 :(得分:0)
我联系了Smartbear,他们的解决方案是使用testStep属性&#34;响应&#34;
if( context.currentStep.hasProperty("Response") ){testStepResult.writeTo(pw)}
经过测试,确实有效。
感谢。