如何访问Soap Web请求的SOAPAction属性?

时间:2014-09-22 15:50:15

标签: groovy soapui

您好我正在使用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'?

感谢。

2 个答案:

答案 0 :(得分:0)

测试步骤请求的属性中的operationwsdl:operation而非SOAPActionSOAPAction被定义为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

请注意,我认为您在问题中使用的testStepResultcom.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequestStepResult的实例

希望这有帮助,

答案 1 :(得分:0)

我联系了Smartbear,他们的解决方案是使用testStep属性&#34;响应&#34;

if( context.currentStep.hasProperty("Response") ){testStepResult.writeTo(pw)}

经过测试,确实有效。

感谢。