如何在空手道中添加条件等待响应?

时间:2018-10-01 18:20:57

标签: karate

对于我们的一个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

但没有太大帮助

1 个答案:

答案 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服务汇总一次,直到超过您的输入时间为止。