如果状态码等于 401,则重新运行测试步骤

Rerun teststep if statuscode equals 401

如果测试步骤失败,我如何在 ReadyAPI 中重新运行 x 次测试步骤?我的测试要求一台服务器,如果它没有“预热”,有时可能需要长达 30 秒的时间来回答。有时它会快得多。所以我实施了一个到 20 秒的“延迟步骤”。但是我不想让延迟比 20s 大很多。

示例:

Testcase
 --Teststep: GetMyData

Teststep GetMyData 失败,我在几秒钟后手动重新运行它,现在集成服务器收到响应并且测试步骤工作正常。

我试过这个解决方案: Rerun teststep

但它给了我 java.lang.NullPointerException

这是一个例子...

获取重试次数Groovy 包含此...

这定义了重试的次数。

获取等待期groovy包含...

这是重试之间的毫秒数。因此,等待 2 秒的 10 次重试最多为 20 秒。

重置重试 groovy 脚本包含...

这会将我们的自定义 属性 设置为零。

Rest Request 步骤是您要发出并重试的任何调用。

检查请求是我们进行检查和重试的地方。我粘贴了代码而不是屏幕截图。

// Initialise some variables.
def status = testRunner.testCase.testSteps["REST Request"].testRequest.response.responseHeaders["#status#"];
def waitTime = context.expand( '${Get Wait Period - Groovy Script#result}' )
def maxRetries = context.expand( '${Get Number of Retries - Groovy Script#result}' )
def retryCountString = context.expand( '${#TestCase#RetryCount}' )

// Convert the retry count from String to Int
def retryCount = Integer.parseInt(retryCountString);

// Let's check the request status.  If it worked its 200.
if(status.toString().contains("200")){
    // We're good.  Do nothing more.
} else {
    // Server not ready.  Let's retry...
    if(retryCount <  Integer.parseInt(maxRetries)) {

        log.info("Retry ${retryCount} of ${maxRetries}.");

        // A small sleep to give a gap inbetween retries.
        sleep( Integer.parseInt(waitTime));

        // Update the retry count and save it.
        retryCount += 1;
        testRunner.testCase.setPropertyValue( "RetryCount", retryCount.toString() );

        // Let's re-run the step.
        testRunner.gotoStepByName("REST Request");
    
    } else {
        log.info("Ran out of retries");
    }
}