如何通过 SOAPUI Testrunner getRunContext 在 Java 中指定哪个标签到 return
How to specify which tag to return in Java via SOAPUI Testrunner getRunContext
我目前正在使用以下通用方法访问 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>
如何在仍然使用 runner.getRunContext().expand
的同时将哪个 <email>
标记指定给 return?
也许其他人会不同意,但我发现缺少 SOAPUI API 文档。
您只需拥有 xpath
检索所需值的权利。
由于有可用的联系人列表,因此需要引用另一个相关元素才能获得正确的电子邮件。
例如:
- 使用 member phone id:检索联系人的电子邮件,其中 MEMBER_PHONE_ID
是 56789,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
的输出将是(假设 soapUITestCase
的值为 Test1):
${Test1#Response#//MEMBER_PHONE_ID[contains(text(),'56789')]/following-sibling::tag/text()}
然后调用 pass 那个 value
来扩展方法。
tagValue = runner.getRunContext().expand(value);
请注意,如果响应中涉及任何名称空间,您需要处理,当前提供的响应中没有任何 namcespaces。
我目前正在使用以下通用方法访问 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>
如何在仍然使用 runner.getRunContext().expand
的同时将哪个 <email>
标记指定给 return?
也许其他人会不同意,但我发现缺少 SOAPUI API 文档。
您只需拥有 xpath
检索所需值的权利。
由于有可用的联系人列表,因此需要引用另一个相关元素才能获得正确的电子邮件。
例如:
- 使用 member phone id:检索联系人的电子邮件,其中 MEMBER_PHONE_ID
是 56789,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
的输出将是(假设 soapUITestCase
的值为 Test1):
${Test1#Response#//MEMBER_PHONE_ID[contains(text(),'56789')]/following-sibling::tag/text()}
然后调用 pass 那个 value
来扩展方法。
tagValue = runner.getRunContext().expand(value);
请注意,如果响应中涉及任何名称空间,您需要处理,当前提供的响应中没有任何 namcespaces。