SoapUI:条件转到不能使用json回答

时间:2016-06-27 20:14:25

标签: groovy soapui test-suite

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

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

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

contains(text(), "1")

还尝试使用contains(., "1")

如果我从条件转到窗口中的运行图标测试这个条件,它会正确解决条件,但如果我从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显示该错误或为什么服务B使用Groovy脚本执行。
提前谢谢

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

  1. REST服务,返回JSON响应
  2. Groovy Script,用于读取上一个响应中包含的标记,并将其作为标题插入下一个REST服务中
  3. REST服务(这将是"服务A"),返回JSON响应(它正确接收上一步中插入的标头)
  4. Groovy脚本(如说明所示)
  5. REST服务(这将是"服务B"),返回JSON响应
    这是我在TestSuite中的唯一组件

1 个答案:

答案 0 :(得分:2)

在SoapUI中无法在Conditional Goto中使用JSON。但是你可以用Groovy脚本做到这一点。

以下是https://community.smartbear.com/t5/SoapUI-Open-Source/Conditional-goto/td-p/107276

上的代码段
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")