对于我们的DELETE请求之一,请求时间超过30秒 . 如果超过30秒,测试有时会失败 . 我需要添加等待响应,直到某些GET调用通过 . 我试过下面的代码 . 但我想在GET调用中检查一些条件,然后我想断言DELETE调用 .
Feature:
Background:
* def waitUntil =
"""
function(x) {
while (true) {
var result = karate.call('classpath:ic/feature/soap/Common/getApplicationsList.feature');
var res = result.response;
karate.log('poll response in side java script', res.integration.serviceData.applicationsList.WmSOAPProvider['MyKarateSoap']);
karate.log('Actual responseis in jacva script ---> ', res.integration.serviceData.applicationsList.WmSOAPProvider)
var local = res.integration.serviceData.applicationsList.WmSOAPProvider['MyKarateSoap'];
karate.log('local value is--->' +local)
karate.log('res is ----->' +res)
if (res.integration.serviceData.applicationsList.WmSOAPProvider['MyKarateSoap'] == null) {
karate.log('condition satisfied, exiting');
return;
}
karate.log('sleeping in else block');
// uncomment / modify the sleep time as per your wish
java.lang.Thread.sleep(3000);
}
}
"""
Scenario: delete soap application
Given url appServer
And path '/integration/rest/application/WmSOAPProvider/' +'MyKarateSoap'
And header Accept = 'application/json'
And header Content-Type = 'application/json'
And header X-CSRF-TOKEN = lresult.response.csrfToken
* cookie JSESSIONID = lresult.responseCookies.JSESSIONID.value
* cookie route = lresult.responseCookies.route.value
When method delete
* call waitUntil 200
在上面的代码中,只有在传递'delete'调用时才会调用'waitUntil' .
但我只想在DELETE呼叫响应失败/超过30秒时调用'waituntil'
我跟着How to retry a request until i get a valid dynamically generated value in response using karate dsl
但没有多大帮助
1 回答
根据您的问题,我相信您正在尝试进行DELETE调用(用于删除某些记录),然后进行GET调用(以验证该记录是否已删除) .
从您的示例:删除“MyKarateSoap”记录并验证“MyKarateSoap”== null
Answer 1: 如果您的删除服务需要更多时间来响应,您可以通过将此添加到删除调用来本地调整连接和读取超时,
这种配置会让空手道等待30秒然后再输出任何失败 . (仅当您提到的故障是由请求的连接或响应超时引起时)
通过反复试验选择最佳超时(或者从POSTMAN或浏览器中执行相同操作并获取平均响应时间)
Answer 2:
您的删除服务可能会按预期响应,但有时系统中可能存在延迟以反映您的删除,这可能会导致您的GET调用失败,如果是这种情况您可以使用类似下面的逻辑进行池化
这应该每隔5秒汇集一次获取服务,直到它超过您的输入时间 .