当前位置: 首页 > 知识库问答 >
问题:

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

鲁旭
2023-03-14

嗨,我正在使用SoapUI Pro来测试一组Soap网络服务。

我有一个 testRunListener,它将我的 soap 请求的请求和响应记录到它在运行测试时创建的文件中。在这里,我有一个if语句,该语句在记录请求和响应之前检查测试步骤的名称..

if(testStepResult.testStep.label==("createShipment_1") || testStepResult.testStep.label==    ("printLabel_1") 
|| testStepResult.testStep.label==("updateShipment_1_StatusAllocated") || testStepResult.testStep.label==    ("cancelShipment") 

而不是使用单个请求的名称,我想使用更通用的东西,例如请求的类型,可以是 createShipping 或 cancelShipping。这是因为我有多个测试步骤使用相同的请求类型,但名称不同,例如 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

我的问题是我如何访问此属性,以便我可以在我的时髦脚本“if condition”中使用它?

我看到这也出现在 SoapUI Pro 的 TestRequest 属性中,称为“操作”?

谢谢

共有2个答案

武睿
2023-03-14

我就此联系了Smartbear,他们的解决方案是使用testStep属性“Response”

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

测试了这个,它可以工作。

谢谢

章承
2023-03-14

测试步骤请求的属性中的操作wsdl:操作而不是SOAPActionSOAPAction在wsdl中被定义为的属性,并在测试步骤请求中作为超文本传输协议标头传递,查看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>

因此,要获取带有时髦测试步骤的 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

请注意,我假设您在问题中使用的< code>testStepResult是com . EVI ware . soap ui . impl . wsdl . teststeps . wsdltestrequeststepresult的实例

希望这有帮助,

 类似资料:
  • 问题内容: 我正在尝试检索JSP页面中servlet设置的属性值,但是我对参数by的运气还不错。我不确定该怎么做。也许它很简单,但是我还无法处理。 在JSP中,我一直试图检索“ attribValue”,但是没有成功: 如果我在所有过程(调用页面,servlet和目标页面)中都传递了一个参数,则它的效果很好。 问题答案: 它已经在默认的EL范围内可用,因此 应该做。 如果您想明确指定范围(EL将依

  • 如何在JAX-RS中实现WriterInterceptor接口时访问请求头? 完整的代码如下:

  • 我正在编写一个处理多个系统的应用程序。用户可以选择他想使用的系统,我将该系统ID存储在会话(客户端会话)中 现在我有了服务类,比如说CustomerService。 我想使用 Guice 将客户实例注入控制器。但是我想使用存储在会话中的系统ID实例化客户服务。 如何访问<code>请求。Guice模块中的会话? 编辑: 简化了我上面的代码。我的实际代码使用接口。我如何使用辅助注射? 这给了我:客户

  • 问题内容: 我有一个像这样的对象: 现在,当我尝试访问键“ 0”的值时,例如: …我遇到了错误。(也许这不是正确的方法吗?) 如何访问数字键的值(如上)? 问题答案: 这应该工作: (是的替代语法。) 您会收到此错误,因为在JavaScript中,标识符不能以数字开头。 JavaScript标识符必须以字母,下划线(_)或美元符号($)开头;后续字符也可以是数字(0-9)。因为JavaScript

  • 问题内容: 我打算在两个响应结构的标头和主体中同时使用HTTP状态代码。不要在没有设置状态码的情况下将其设置为功能参数的两倍,并再次为结构设置以避免冗余。 该参数的是允许两个结构被接受的接口。编译器将引发以下异常: 因为响应字段必须没有状态属性。是否有另一种方法可以避免两次设置状态代码? 问题答案: 键入的是。在Go中,您需要显式声明基础结构的类型,然后访问该字段: 但是,更好的方法是为响应定义一

  • 客户端通过使用按附录B“application/x-www-form-urlencoded”格式在HTTP请求实体正文中发送下列UTF-8字符编码的参数向令牌端点发起请求: grant_type 必需的。值必须设置为“client_credentials”。 scope 可选的。如3.3节所述的访问请求的范围。 客户端必须如3.2.1所述与授权服务器进行身份验证。 例如,客户端使用传输层安全发起如