如何在 groovy 中编写递归函数,等待特定值作为响应 |肥皂 UI
How to write a recursive function in groovy which wait for a particular value in response | SOAP UI
我有一个 GET 请求正在寻找值 complete
作为响应,但如果服务器中的进程未完成,该值可以是 processing
或 request_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 :)
我有一个 GET 请求正在寻找值 complete
作为响应,但如果服务器中的进程未完成,该值可以是 processing
或 request_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 :)