如果使用脚本断言在 soapui 中请求失败,如何停止测试用例的执行?

How to stop testcase execution if request fails in soapui using script assertion?

如果 soap 请求失败意味着 Status != "HTTP/1.1 200 OK" ,testCase 应该停止并且没有进一步的步骤应该 运行

groovy 中有一种方法可以做到这一点,但我 不想在测试用例中添加额外的测试步骤

            def headers = testRunner.testCase.getTestStepByName("RequestName").httpRequest.response.responseHeaders['#status#']
            if (!headers.contains("HTTP/1.1 200 OK"))
            {
                testRunner.fail("" + headers + "Flow failed")
                testRunner.fail("No futher testSteps will be run inside the current case")
            }

请注意,由于某些其他 groovy 代码限制

,我 无法更改以下设置

不更改以上选项的原因是我有一个测试用例,其中有 10 个步骤。 1 是请求,其他 9 个步骤验证各种事物。因此,如果我检查 "Abort on error" 选项并且第 3 步失败。然后 none 从 4 到 10 运行 的步骤。因此,请考虑不使用“中止”选项

提供解决方案

那么,您能否提供一个不勾选此选项的脚本断言的解决方案。"Abort on error"

因为 testRunner.failscript assertion 和正常 assertion[=35= 中不可用] (assert 0==1) 除非我们勾选上面的设置,否则不会停止测试用例。我被这个限制困住了

您可以通过脚本断言中可用的 context 变量访问 testRunner,那么为什么不可以这样:

def httpResponseHeader = messageExchange.responseHeaders
def headers = httpResponseHeader["#status#"]
log.info("Status: " + headers)

if (!headers.contains("HTTP/1.1 200 OK")) { 
    context.testRunner.fail("" + headers + "Flow failed")
    context.testRunner.fail("No futher testSteps will be run inside the current case")
}

谢谢@craigcaulifield,你的回答对我帮助很大。

很高兴知道 testRunner 即使在脚本断言中也以一种棘手的方式可用

现在使用脚本断言,如果请求失败,我们可以停止测试用例。

然而,当我们 运行 单独请求而不是作为测试用例的一部分时,就会出现错误

cannot invoke method fail() on null object

出现这个错误是因为

context.testRunner.fail()

testRunner 仅在测试用例执行期间可用,而不是单独的 testStep 执行

所以这里要克服的是可以处理这两种情况的代码

def responseHeaders=messageExchange.responseHeaders
def status=responseHeaders["#status#"]

// Checking if status is successfully fetched i.e. Response is not empty
if(status!=null)
{
    if(!status.contains("HTTP/1.1 200 OK"))
   {
  // context.testRunner is only available when the request is run as a part of testCase and not individually 
    if(context.testRunner!=null)
    {
          // marking the case fail so further steps are not run
        context.testRunner.fail()
     }
    assert false, "Request did not returned successful status. Expected =  [HTTP/1.1 200 OK] but Actual =  " + status
   }
}
else
{
    if(context.testRunner!=null)
    {
    context.testRunner.fail()
    }
    assert false, "Request did not returned any response or empty response"

}