如何在 groovy 中编写递归函数,等待特定值作为响应 |肥皂 UI

How to write a recursive function in groovy which wait for a particular value in response | SOAP UI

我有一个 GET 请求正在寻找值 complete 作为响应,但如果服务器中的进程未完成,该值可以是 processingrequest_is_in_process

现在我需要一个 groovy 脚本或 soap-ui 中的技巧,它可以继续处理此请求,直到它在响应中找不到 complete 值。

为了进一步说明,我为此请求创建了一个单独的项目,它将在全局属性中保存我的值。

import groovy.json.JsonSlurper

responseContent = testRunner.testCase.getTestStepByName("Checking_Request").getPropertyValue("response")
slurperresponse = new JsonSlurper().parseText(responseContent)
log.info (slurperresponse.products.status)



def valueFromPreviousResponse = slurperresponse.products.status
context.testCase.testSuite.setPropertyValue('Status_of_Product_import_request', valueFromPreviousResponse)

com.eviware.soapui.SoapUI.globalProperties.setPropertyValue( "Status_of_Product_import_request", valueFromPreviousResponse )

以上代码非常好地设置了我的值。只是我需要保留 运行 那个测试步骤,直到它找不到 complete

的值

注意:- 我正在测试 REST API。一切都是 JSON 格式。另一件事是我使用的是免费版的 SOAP-UI,而不是专业版

我是 SOAP-UI 和 groovy 的新手。所以任何建议都是 helpful/welcome.

提前致谢!! :)

试试这个

  While (slurperresponse.products.status!= "complete") {
          testRuner.testcase.testStepByName("yourStepName").run(testRunner,testRunner.getRunContext())
    }

下面的代码适合我:

def i=0
// Recursive Function to check response again and again
while( slurperresponse.products.status!= "complete" ) {
    project = testRunner.getTestCase().getTestSuite().getProject().getWorkspace().getProjectByName("REST Project 1")
    testSuite = project.getTestSuiteByName("Product(PIM-API)");
    testCase = testSuite.getTestCaseByName("Checking_Responses");
    runner = testCase.run(new com.eviware.soapui.support.types.StringToObjectMap(), false);
    sleep(new Random().nextInt(10) * 2000)
    log.info (slurperresponse.products.status)

// My other testcase setting the latest value of my required response in global properties and in below code I am checking the latest value

    slurperresponse.products.status = com.eviware.soapui.SoapUI.globalProperties.getPropertyValue( "Status_of_Product_import_request" )
    i++
    log.info (i)
    if(i==5)
    {
        assert false
        }
}
assert true

感谢 user1207289 :)