2

我目前正在使用以下通用方法来访问 SOAPUI 响应中的单个 xml 标记:

public class SoapUIAPI {
private String soapUITestCase;
private String tagValue;
private TestRunner runner;

public String getWebServiceResponseTagValue (String tag){
    tagValue = runner.getRunContext().expand("${"+soapUITestCase+"#Response#//*:"+tag+"}");
    return tagValue;
}

runner.getRunContext().expand几乎似乎正在使用 xpath 表达式(但不完全是?)我的问题是我有一个看起来像这样的 xml 响应:

<content>
  <memNum>123456</memNum>
  <displayName>Mr John Smith</displayName>
  <prefName>John</prefName>
  <dob>11/09/1948</dob>
  <occDesc>Truck Driver</occDesc>
  <IRDNumber>19-211-314</IRDNumber>
  <contactDetails>
     <contact>
        <MEMBER_PHONE_ID>123456</MEMBER_PHONE_ID>
        <contactType>Mobile 2</contactType>
        <countryCode>(+64)</countryCode>
        <std>021</std>
        <number>54545454</number>
     </contact>
     <contact>
        <MEMBER_PHONE_ID>34567</MEMBER_PHONE_ID>
        <contactType>Business Phone</contactType>
        <countryCode>(+36)</countryCode>
        <std>04</std>
        <number>8756845</number>
        <ext/>
     </contact>
     <contact>
        <MEMBER_PHONE_ID>45678</MEMBER_PHONE_ID>
        <contactType>Preferred Email 1</contactType>
        <email>Test@gmail.com</email>
     </contact>
     <contact>
        <MEMBER_PHONE_ID>56789</MEMBER_PHONE_ID>
        <contactType>Preferred Email 2</contactType>
        <email>test@test.com</email>
     </contact>
  </contactDetails>
  <branch>New York</branch>
  <adviser>Warren Duck</adviser>
</content>

如何<email>在仍在使用的同时指定要返回的标签runner.getRunContext().expand

也许其他人会不同意,但我发现缺少 SOAPUI API 文档。

4

1 回答 1

1

您所需要的只是有权xpath检索所需的值。

由于有可用的联系人列表,因此需要引用另一个相关元素才能获得正确的电子邮件。

例如:
- 使用会员电话 id:检索联系人的电子邮件,其中MEMBER_PHONE_ID56789 xpath 看起来像:
//MEMBER_PHONE_ID[contains(text(),'56789')]/following-sibling::email/text()

因此,您需要传递其他信息才能获取特定的电子邮件。

relativeTag(MEMBER_PHONE_ID)、relativeTagValue(56789)除了现有的tag

String value = "${"+soapUITestCase+"#Response#//" + relativeTag + "[contains(text(),'" + relativeTagValue+"')]/following-sibling::" + tag + "/text()}";

的输出将是value(假设值为Test1):soapUITestCase

${Test1#Response#//MEMBER_PHONE_ID[contains(text(),'56789')]/following-sibling::tag/text()}

然后你调用 passvalue来扩展方法。

tagValue = runner.getRunContext().expand(value);

请注意,如果响应中涉及任何命名空间,您需要处理,提供的当前响应中没有任何命名空间

于 2016-09-26T05:23:44.960 回答