【问题标题】:SoapUi: Transferring a response value to a temporary property (missing a non persisting target scope)SoapUi:将响应值传输到临时属性(缺少非持久性目标范围)
【发布时间】:2014-07-09 14:55:35
【问题描述】:

使用 SoapUI Pro 5.0

我知道如何将响应值传输到任何范围属性(测试套件、测试用例等)。

我的问题是,这样的作用域属性:

  1. 必须已经存在于目标范围内
  2. 保存在项目配置文件的末尾。所以每次运行后这个配置文件都会改变,这对源代码管理来说简直就是一场噩梦。

我只需要一个或两个步骤之后的这个值来进行复杂的验证(使用 Script-TestStep)。

“属性转移”-TestStep 对于从已知来源中提取并转移到已知目标非常强大。作为目标,甚至可以从同一个 TestCase 中选择一个 Script-TestStep。但是我没有找到任何提示如何将要传输的值绑定到目标脚本中的声明变量。

使用上下文(例如 context.getProperties().put( 'MY_PROP_NAME', transferValue )会很好,但上下文在“Property Transfer”-TestStep 中不可用。我想出的唯一可能是遵循脚本代码在 Script-TestStep 中:

def xmlResponse = XMLNamespaceRemover.removeNamespaces(context.expand( '${mySoapTestStep#Response}' ));
def node = new groovy.util.XmlParser(false,false).parseText(xmlResponse);
def transferValue = node["Body"]["tag1"]["tag2"].text();
context.getProperties().put( 'MY_PROP_NAME', transferValue )

任何想法如何使用“属性转移”测试步骤解决这个问题?

【问题讨论】:

    标签: groovy soapui


    【解决方案1】:

    在您的脚本中,您可以使用:

    def MY_PROP_NAME = context.expand( '${mySoapTestStep#Response//*:Body/*:tag1/*:tag2}' )
    

    或者,您可以使用属性转移步骤将您的值转移到 TestCase 属性 - 正如您所指出的,该属性必须已经存在。为了解决您提到的持续存在并因此弄乱源代码控制的问题,您可以创建一个 TearDown 脚本:

    testRunner.testCase.setPropertyValue("MY_PROP_NAME", "default")
    

    【讨论】:

    • 第一个提案似乎不起作用(MY_PROP_NAME 中没有值)。我没有看到如何指定 tag1 和 tag2 的命名空间。
    • 拆解脚本的技巧似乎是一种有价值的方法。
    • 添加了命名空间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    • 2021-05-18
    相关资源
    最近更新 更多