soapUI groovy脚本在脚本/测试套件窗口中将测试步骤状态设置为具有不同行为的测试步骤

soapUI groovy脚本在脚本/测试套件窗口中将测试步骤状态设置为具有不同行为的测试步骤,groovy,soapui,test-suite,Groovy,Soapui,Test Suite,我创建了一套测试服,并且有一些测试步骤。 目标是一个接一个地运行测试步骤,并将状态设置为OK或FAILED,为此,我获取httpStatus代码并将其设置为FAILED或OK 这部分看起来不错。问题是,对于我所拥有的代码,在groovy脚本中,当我单击绿色按钮运行脚本时,它会给我一条消息:“java.lang.NullPointerException:Cannot invoke method setStatus(),on null object error,at line 17”。脚本的颜色保持

我创建了一套测试服,并且有一些测试步骤。 目标是一个接一个地运行测试步骤,并将状态设置为OK或FAILED,为此,我获取httpStatus代码并将其设置为FAILED或OK

这部分看起来不错。问题是,对于我所拥有的代码,在groovy脚本中,当我单击绿色按钮运行脚本时,它会给我一条消息:“java.lang.NullPointerException:Cannot invoke method setStatus(),on null object error,at line 17”。脚本的颜色保持为红色

但是,如果我单击“测试步骤”,将出现一个小窗口,显示测试步骤、groovy脚本等。如果我右键单击groovy脚本并选择“从此处测试”,脚本将运行,脚本中运行的测试步骤将变为绿色或红色,具体取决于它是否失败或通过,groovy脚本将变为蓝色

所以。。。我不明白发生了什么。。。打开“Groovy脚本”窗口并从那里运行它与打开“测试步骤”窗口并从那里运行脚本有什么区别

守则:

import com.eviware.soapui.model.testsuite.TestStepResult.TestStepStatus
def example = testRunner.runTestStepByName("example");
def myStep = context.testCase.getTestStepByName("example")
def exampleResult = testRunner.results.find { it.testStep.is(myStep) }
def groovyUtils = new com.eviware.soapui.support.GroovyUtils( context )
def httpResponseHeaders = context.testCase.testSteps["example"].testRequest.response.responseHeaders
def httpStatus = httpResponseHeaders["#status#"]
def httpStatusCode = (httpStatus =~ "[1-5]\\d\\d")[0]

log.info("HTTP status code: " + httpStatusCode)

if (httpStatusCode != "200"){
    testRunner.fail("failed");
    exampleResult.setStatus(TestStepStatus.FAILED);
} else {
    log.info("passed");
    exampleResult.setStatus(TestStepStatus.OK);
}
注意:我是色盲,所以不确定我上面说的绿色是真的绿色还是黄色,蓝色可能是粉红色

谢谢你的帮助

找到了解决办法

我的代码中不需要某些东西

不需要
exampleResult
myStep

我可以使用
示例.setStatus(TestStepStatus.OK)

在那之后,一切如期进行。

因此。。。我不明白发生了什么。。。打开“Groovy脚本”窗口并从那里运行它与打开“测试步骤”窗口并从那里运行脚本有什么区别?我不清楚您所指的脚本是测试步骤上的Groovy脚本断言还是测试用例中的Groovy脚本步骤。无论哪种方式,都需要先运行该步骤,然后才能从该步骤的响应中获取详细信息

我知道你已经回答了你的问题,但我会继续

当您创建一个测试步骤并运行它时,默认情况下,它们往往会通过。然后,用户决定如何定义什么是通过或失败。这可以完全基于200响应,就像您正在做的事情一样,或者更复杂的事情,通过对响应创建断言来确保API返回预期值

SoapUI提供了您想要的“开箱即用”功能,而无需借助groovy脚本,我将继续努力。如果您“打开”感兴趣的步骤,您将看到“断言”部分。从这里可以添加任意数量的不同类型的断言。一旦其中一个是“有效的HTTP状态代码”,如果选择此选项,则可以输入该步骤的有效状态代码。e、 g.200。然后运行测试用例时,SoapUI将根据断言显示结果。如果执行此操作,请尝试将500作为有效状态代码,然后运行。你所有的测试都会失败

如果这个答案对您的问题没有帮助或不适用,请告诉我,我将删除它