【问题标题】:SoapUI: Conditional Goto not working with json answerSoapUI:条件转到不适用于 json 答案
【发布时间】:2016-10-29 23:16:40
【问题描述】:

我对 Groovy 和 SoapUI 测试套件还很陌生,当我尝试执行 Conditional Goto 时遇到错误。问题是,我有几个回答 JSON 字符串的 REST 服务,我想创建一个 TestSuite,只有当服务 A 在其答案上返回特定代码时,服务 B 才会在其中执行。所以,为了让事情更清楚:
服务 A 返回类似

    {
        "parentObject":    {
             "myCode": "0",
             "severity": "INFO"
         },
        "message": "operation successfull"
    }

如果代码等于“1”,我应该运行服务 B,否则不运行。我的条件跳转是:

contains(text(), "1")

也试过contains(., "1")

如果我从 Conditional Goto 窗口中的运行图标测试此条件,它会正确解决该条件,但如果我从 TestSuite 运行它,我会收到消息“缺少匹配条件,继续前进”并执行服务 B .
Google 中只有少数几个搜索结果与此错误相关,只有在其中一个中我发现了另一个带有 Groovy 脚本的选项 (link here):

import groovy.json.JsonSlurper
responseContent = testRunner.testCase.getTestStepByName("Service A step").getPropertyValue("response")
slurperresponse = new JsonSlurper().parseText(responseContent)
myCode = slurperresponse.parentObject.myCode
if ('1'.equalsIgnoreCase(myCode.toString()))     testRunner.gotoStepByName("Service B Step")
else log.info("Some error")

但它不起作用,这意味着服务 B 再次被执行,事件不应该执行)。
如果你能在这里提供帮助,我将非常感激,如果你有这两个选项中的任何一个知道为什么 Conditional Goto 会显示该错误,或​​者为什么 Service B 会使用 Groovy 脚本执行。
提前致谢

更新:TestSuite 中的步骤列表,根据@Rao 请求(抱歉,我无法添加带有真实组件的图像)

  1. REST 服务,返回 JSON 响应
  2. Groovy 脚本,用于读取上一个响应中包含的令牌并将其作为标头插入到下一个 REST 服务中
  3. REST 服务(这将是“服务 A”),返回 JSON 响应(它正确接收在上一步中插入的标头)
  4. Groovy 脚本(在描述中显示)
  5. REST 服务(这将是“服务 B”),返回 JSON 响应
    这是我在 TestSuite 中唯一的组件

【问题讨论】:

  • Service A 返回什么?您的示例 JSON 无效...
  • 嗨@tim_yates,只是答案的一部分,只是为了显示我正在使用的变量“myCode”,我将更新 JSON 答案
  • log.info(myCode.toString()) 显示了什么?我怀疑这是一个列表
  • @tim_yates 当我从 Groovy 脚本窗口运行脚本时,它显示代码“Mon Jun 27 18:18:38 ART 2016:INFO: code: 0”的值,我认为是不是列表
  • @maxivis,您能否显示/列出测试用例中的步骤顺序?顺便说一句,脚本看起来不错。

标签: groovy soapui test-suite


【解决方案1】:

在 SoapUI 的条件跳转中无法使用 JSON。但是您可以使用 Groovy 脚本来做到这一点。

这是在https://community.smartbear.com/t5/SoapUI-Open-Source/Conditional-goto/td-p/107276上找到的sn-p

import static com.jayway.jsonpath.JsonPath.parse

def response = context.expand( '${REST Request#Response}' )

def id = parse(response).read('$.id')
log.info id

if (id!=null) testRunner.gotoStepByName("TestStepName")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多