从响应新请求SoapUI中提取详细信息

时间:2012-03-09 16:03:55

标签: soapui

我正在使用SoapUI 3.6.1。 我需要从响应中提取细节并将它们插入到下一个请求中。 我尝试通过'Property Transing'来做到这一点。 在第一个请求中我得到了一些细节,在回复中我可以看到“章节”。 这个“部分”可以包含许多“控件”,每个“控件”都有一些值。 我的回答是:

                ...
              <a:Section>
                 <a:Controls>
                    <a:Control>
                       <a:Code>11</a:Code>
                       <a:Id>11</a:Id>
                       <a:Label>bkBranded</a:Label>
                       <a:Mandatory>true</a:Mandatory>
                       <a:SortOrder>223</a:SortOrder>
                       <a:Type>RadioButton</a:Type>
                       <a:Values>
                          <a:Value>
                             <a:Code>bkBrandedWindow</a:Code>
                             <a:SortOrder>1</a:SortOrder>
                             <a:Value>Yes</a:Value>
                          </a:Value>
                          <a:Value>
                             <a:Code>bkBrandedWindow</a:Code>
                             <a:SortOrder>2</a:SortOrder>
                             <a:Value>No</a:Value>
                          </a:Value>
                       </a:Values>
                    </a:Control>
                     ...

主要条件是只获得强制性(真实)的'控制',并且只获得一个可用的'值'。 我需要进入下一个请求的详细信息如下:

  ... 
 <Values>
<Value>
    <ControlCode>8003</ControlCode>
    <Id>8003</Id>
    <Value>123</Value>
    <ValueCode>bkBranded</ValueCode>
</Value>
    <Value>
    <ControlCode>455</ControlCode>
    <Id>455</Id>
    <Value>1/2</Value>
    <ValueCode>bkOther</ValueCode>
</Value>
....

这意味着我需要来自回复的'代码','Id','价值','价值代码'。 也许有可能使用'If..Else'语句或其他。 提前谢谢。

1 个答案:

答案 0 :(得分:3)

  1. 在测试用例中创建一个名为ValuesXML
  2. 的新属性
  3. 使用原始请求添加一个步骤,即源数据
  4. 创建属性转移步骤
  5. 添加新转帐
  6. 从您的回复中选择来源作为xml
  7. 选中“使用XQuery”复选框
  8. 选择target作为属性ValuesXML
  9. 将以下代码添加到源窗口
  10. 在目标请求中添加一个步骤,您希望修改数据
  11. 在XML请求中,该子句应该放在$ {#TestCase#ValuesXML}
  12. GO!
  13. 代码,应该放在属性转移的“来源”

    <Values>
    {
        for $z in //Control
        where $z/Mandatory eq "true"    
        return 
            <Value>
                <ControlCode>{data($z/Code/text())}</ControlCode>
                <Id>{data($z/Id/text())}</Id>
                <Value>     
                {
                    let $values :=
                    for $x in //Value          
                    order by $x/SortOrder
                    return $x/Value 
    
                return $values[1]
                }
                </Value>
            <ValueCode>{data($z/Label/text())}</ValueCode>
           </Value>
    }
    </Values>
    

    注意:您可能必须在XQuery表达式的标记名称前添加“a:”,才能正确读取源数据。这还需要您声明“a”命名空间,这可以通过“声明”按钮轻松完成。