【问题标题】:Use Datasource Properties in XPath Expression of SoapUI在 SoapUI 的 XPath 表达式中使用数据源属性
【发布时间】:2014-05-08 03:37:02
【问题描述】:

我需要知道是否可以在 XPath 匹配配置的 XPath 表达式面板中使用数据源属性。例如,如果我们有以下 XML 文档:

<ns1:Ions>
  <ns1:Ion>UI</ns1:Ion>
  <ns1:IonType>X</ns1:IonType>
  <ns1:StartDate>2010-05-10</ns1:StartDate>
</ns1:Ions>
<ns1:Ions>
  <ns1:Ion>HH</ns1:Ion>
  <ns1:IonType>RI</ns1:IonType>
  <ns1:StartDate>1998-11-23</ns1:StartDate>
</ns1:Ions>
<ns1:Ions>
  <ns1:Ion>CF</ns1:Ion>
  <ns1:IonType>A</ns1:IonType>
  <ns1:StartDate>2000-06-10</ns1:StartDate>
</ns1:Ions>

我需要评估 IonType 的内容是否是 'A' 仅当其兄弟节点 Ion 的值为 'CF '。我希望通过如下设置 XPath 匹配配置来实现这一点:

XPath 表达式(DataSourceInput#ION 是 'CF')

declare namespace ns1='http://my.namespace.com';
//ns1:Ions[ns1:Ion[text()=${DataSourceInput#ION}]]/ns1:IonType/text()

预期结果(DataSourceInput#ION_TYPE 为“A”)

${DataSourceInput#ION_TYPE}

运行测试会导致 SoapUI [Pro] 出错,Missing content for xpath declare。如果我将${DataSourceInput#ION} 替换为实际值,即'CF',则测试会相应地工作(我什至尝试在${DataSourceInput#ION} 周围加上单引号,但它不起作用)。

在 SoapUI 中是否有另一种方法来实现这一点?

【问题讨论】:

    标签: xpath properties soapui


    【解决方案1】:

    我试试你所做的,如果我在属性周围加上单引号,它对我有用:

    declare namespace ns1='http://my.namespace.com';
    //ns1:Ions[ns1:Ion[text()='${DataSourceInput#ION}']]/ns1:IonType/text()
    

    您是否检查过 testStep 名称是否正是 DataSourceInput?如果 TestStep 名称中有空格(即您的 testStep 名称是 Data Source Input,您必须输入 ${Data Source Input#ION})。

    无论如何我给你另一种方法,你可以在你得到&lt;Ions&gt;response的testStep之后添加一个groovy脚本类型的testStep,并在此处检查断言,如下所示:

    // get xml holder
    def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context);
    def ionsHolder = groovyUtils.getXmlHolder("IonsTestStepName#response");
    
    // generate xpath expression
    def xpathExpression = "//*:Ions[*:Ion[text()='" + context.expand('${DataSourceInput#ION}') + "']]/*:IonType/text()";
    log.info xpathExpression;
    
    // get the node value
    def nodeValue = ionsHolder.getNodeValue(xpathExpression);
    
    // check expected value
    assert nodeValue == context.expand('${DataSourceInput#ION_TYPE}'),'ERROR IONS VALUE';
    

    希望这会有所帮助,

    【讨论】:

    • 谢谢。我不知道为什么将属性放在单引号内最初不起作用,但在实施了一个非常相似的 Groovy 脚本解决方案后,我重新创建了一个断言匹配并能够相应地提取数据。尽管如此,由于没有提供属性内容的可能性,并且不希望断言由于属性值不存在而失败,我不得不在脚本中实现逻辑来处理这种情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    相关资源
    最近更新 更多