【问题标题】:Retrieve response from a "Run Test Step", using SoapUI/ Groovy?使用 SoapUI/Groovy 从“运行测试步骤”中检索响应?
【发布时间】:2019-09-12 20:40:32
【问题描述】:

在 SoapUI 中,我有一个主机测试用例,它使用“运行测试用例”测试步骤执行另一个外部测试用例(带有几个测试步骤)。我需要从我的主机 TC 中访问来自外部 TC 的响应,因为我需要对一些值进行断言。

我无法传输这些属性,因为它们是 XML 格式的。我能否获得一些关于如何利用 Groovy/SoapUI 来实现此目的的指示。

【问题讨论】:

  • 您能解释一下吗:“我无法传输这些属性,因为它们是 XML 格式的”?在 SoapUI 中,您可以传输任何您想要的内容,包括整个 XML 节点。
  • @SiKing,外部 TC 只有一个属性,我可以直接在“运行测试用例”测试步骤中转移。但是,我需要将 XML 响应从外部 TC 传输到我的主机 TC。
  • @SiKing 我知道我们可以传输 XML 节点,我在“传输属性”测试步骤中使用“响应为 XML”属性传输值。换句话说,您能帮我将 XML 响应从外部测试步骤中的测试步骤传输到主机 TC 吗?
  • 在您的外部 TC 中创建另一个属性,并在 TC 结束时使用传输属性步骤将您的 XML 节点传输到它。在您的主机 TC 中,只需像读取其他任何属性一样读取该属性。
  • @SiKing 听起来是个好主意(并且会计划使用它),但是有几个外部测试用例需要从主机 TC 执行。有没有办法在主机 TC 中使用一些 Groovy 来检索外部 TC 的响应?也许利用上下文或 testRunner 变量?

标签: testing groovy soapui


【解决方案1】:

对于响应,您可以使用以下代码。

testRunner.testCase.getTestStepByName("test step").testRequest.response.responseContent

【讨论】:

  • 太棒了!它对我帮助很大
【解决方案2】:

在您的外部 TC 中创建另一个属性,并在 TC 结束时使用传输属性步骤将您的 XML 节点传输到它。在您的主机 TC 中,只需像读取其他任何属性一样读取该属性。

我还环顾四周,看看这是否可以从 Groovy 完成。 SoapUI documentation 表示需要引用testsuite/testcase的外部名称:

def tc = testRunner.testCase.testSuite.project.testSuites["external TestSuite"].testCases["external TestCase"]
def ts = tc.testSteps["test step"]

但在那之后我找不到如何获得响应。

【讨论】:

    【解决方案3】:

    除了Guest和SiKing的答案,我分享一个我遇到的问题的解决方案: 如果您的步骤不是“request”类型而是“calltestcase”类型,则您不能使用访客回答。

    我有很多请求,每个请求都包含在一个测试用例中,而我的其他测试用例每次我需要启动一个请求时都会调用这些测试用例。

    我配置了我的请求 testCases,以便将响应作为我称为“testResponse”的自定义属性返回,这样我就可以轻松地从我的其他 testCases 中访问它。

    我在以下配置中遇到了问题: 我有一个“calltestcase”步骤,它给了我一个请求结果。 进一步在测试中,我有一个 groovy 脚本需要调用此步骤并获取响应值

    如果我使用这个解决方案:

    testRunner.runTestStepByName("test step")
    

    后跟testRunner.testCase.getTestStepByName("test step").testRequest.response.responseContent

    我被困住了,因为该类没有 testRequest 属性。

    有效的解决方案是:

    testRunner.runTestStepByName("test step")
    def response_value = context.expand( '${test step#testResponse#$[\'value\']}' )
    

    另一种解决方案是:

        testRunner.runTestStepByName("test step")
        tStep = testRunner.testCase.getTestStepByName("test step")
        response = tStep.getPropertyValue("testResponse")
    

    然后我从“响应”中提取相关值(在我的例子中,它是一个我必须解析的 json)。

    当然,它之所以有效,是因为我将请求响应作为我的请求测试用例的自定义属性。

    希望我说的够清楚

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多