对于我们的一个DELETE请求,所花费的时间超过30秒。有时,如果花费30秒以上,测试将失败。我需要添加等待响应,直到某些GET调用通过。 我尝试下面的代码。 但是我想检查GET调用中的某些条件,然后想断言DELETE调用。
foreach
在上面的代码中,仅当传递“删除”调用时才调用“ waitUntil”。
但是我只想在DELETE呼叫响应失败/花费30秒以上时才调用“ waituntil”
我关注了 How to retry a request until i get a valid dynamically generated value in response using karate dsl
但没有太大帮助
答案 0 :(得分:2)
从您的问题来看,我认为您正在尝试先进行DELETE调用(用于删除某些记录),然后再进行GET调用(以验证记录是否被删除)。
根据您的示例: 删除“ MyKarateSoap”记录并验证“ MyKarateSoap” == null
答案1: 如果您的删除服务需要更多时间来响应,则可以通过将连接超时和读取超时添加到您的删除呼叫中来
handleLoadMore = () => {
const { relay, connection } = this.props;
const { isFetching } = this.state;
if (!connection) return;
const { edges, pageInfo } = connection;
if (!pageInfo.hasNextPage) return;
const total = edges.length + TOTAL_REFETCH_ITEMS;
const fragmentRenderVariables = this.getRenderVariables() || {};
const renderVariables = { first: total, ...fragmentRenderVariables };
if (isFetching) {
// do not loadMore if it is still loading more or searching
return;
}
this.setState({
isFetching: true,
});
const refetchVariables = fragmentVariables => ({
first: TOTAL_REFETCH_ITEMS,
after: pageInfo.endCursor,
});
relay.refetch(
refetchVariables,
null,
() => {
this.setState({ isFetching: false });
},
{
force: false,
},
);
};
此配置将使空手道等待30秒,然后再引发任何故障。 (仅当您提到的失败是由请求的连接或响应超时引起的)
通过反复试验选择最佳超时时间(或通过POSTMAN或浏览器执行相同的操作,并获取平均响应时间)
答案2:
您的删除服务可能会按预期方式响应,但有时系统中可能存在重新完成删除操作的延迟,如果您可以使用以下类似的逻辑进行池化,则可能导致GET调用失败
> loadPageBackwardsVars = () => {
const { connection, quantityPerPage } = this.props;
const { quantity } = getFormatedQuery(location);
const { endCursorOffset, startCursorOffset } = connection;
const firstItem = connection.edges.slice(startCursorOffset, endCursorOffset)[0].cursor;
const refetchVariables = fragmentVariables => ({
...fragmentVariables,
...this.getFragmentVariables(),
last: parseInt(quantity || quantityPerPage, 10) || 10,
first: null,
before: firstItem,
});
return refetchVariables;
};
这应该每5秒钟将您的get服务汇总一次,直到超过您的输入时间为止。