soapUI groovy 脚本设置测试步骤状态以测试 script/test 套装 window 中具有不同行为的步骤
soapUI groovy script setting test step status to test step with different behavior in script/test suit window
我创建了一个testSuit,我有一些测试步骤。
objective 是运行 一个一个测试步骤,设置状态为OK或FAILED,为此我得到httpStatus代码并将其设置为FAILED或OK。
这部分好像不错。问题是,使用我的代码,在 groovy 脚本中,当我单击绿色按钮到 运行 脚本时,它会给我消息:“java.lang.NullPointerException:无法调用方法 setStatus( ) 第 17 行的空对象错误”。并且脚本的颜色保持红色。
但是,如果我点击“测试步骤”,一个小 window 将出现测试步骤、groovy 脚本等...如果我右键单击 groovy 脚本并选择“从这里测试” 脚本 运行,脚本中的测试步骤 I 运行 根据失败或通过变为绿色或红色,并且 groovy 脚本变为蓝色.
所以...我不明白发生了什么...从那里打开“Groovy 脚本”window 和 运行 有什么区别,然后打开“测试步骤”window 和 运行 从那里开始脚本?
代码:
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);
}
注意:我是色盲,所以不能 100% 确定我上面说的绿色是真的绿色还是黄色,蓝色可能是粉红色...
感谢您的帮助!
找到解决方案。
我的代码中不需要某些东西。
不需要exampleResult
和myStep
。
我只能使用 example.setStatus(TestStepStatus.OK)
。
之后按预期工作。
所以...我不明白发生了什么...从那里打开“Groovy 脚本”window 和 运行 有什么区别,以及从那里打开“测试步骤”window 和 运行 脚本?我不清楚您所指的脚本是测试步骤中的 Groovy 脚本断言还是测试用例中的 Groovy 脚本步骤。无论哪种方式,步骤都需要 运行 才能从步骤的响应中获取详细信息。
我知道你已经回答了你的问题,但我会继续努力....
当您创建测试步骤并 运行 它时,它们往往会默认通过。然后用户决定如何定义什么是通过或失败。这可以完全基于 200 响应,就像您正在做的那样,或者通过创建针对响应的断言来确保 API 返回预期值的更复杂的东西。
我正在努力,因为 SoapUI 提供了您想要的东西 'out of the box',而无需诉诸 groovy 脚本。如果您 'open' 感兴趣的步骤,您将看到 'Assertions' 部分。从这里您可以添加任意数量的不同类型的断言。其中一个是 'Valid HTTP Status Code',如果你 select 这个,你可以输入该步骤的有效状态代码。例如200. 当你然后 运行 测试用例时,SoapUI 将显示基于断言的结果。如果这样做,请尝试将 500 作为有效状态代码,然后 运行。然后你所有的测试都会失败。
如果此答案对您的问题没有帮助或不适用,请告诉我,我会删除它。
我创建了一个testSuit,我有一些测试步骤。 objective 是运行 一个一个测试步骤,设置状态为OK或FAILED,为此我得到httpStatus代码并将其设置为FAILED或OK。
这部分好像不错。问题是,使用我的代码,在 groovy 脚本中,当我单击绿色按钮到 运行 脚本时,它会给我消息:“java.lang.NullPointerException:无法调用方法 setStatus( ) 第 17 行的空对象错误”。并且脚本的颜色保持红色。
但是,如果我点击“测试步骤”,一个小 window 将出现测试步骤、groovy 脚本等...如果我右键单击 groovy 脚本并选择“从这里测试” 脚本 运行,脚本中的测试步骤 I 运行 根据失败或通过变为绿色或红色,并且 groovy 脚本变为蓝色.
所以...我不明白发生了什么...从那里打开“Groovy 脚本”window 和 运行 有什么区别,然后打开“测试步骤”window 和 运行 从那里开始脚本?
代码:
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);
}
注意:我是色盲,所以不能 100% 确定我上面说的绿色是真的绿色还是黄色,蓝色可能是粉红色...
感谢您的帮助!
找到解决方案。
我的代码中不需要某些东西。
不需要exampleResult
和myStep
。
我只能使用 example.setStatus(TestStepStatus.OK)
。
之后按预期工作。
所以...我不明白发生了什么...从那里打开“Groovy 脚本”window 和 运行 有什么区别,以及从那里打开“测试步骤”window 和 运行 脚本?我不清楚您所指的脚本是测试步骤中的 Groovy 脚本断言还是测试用例中的 Groovy 脚本步骤。无论哪种方式,步骤都需要 运行 才能从步骤的响应中获取详细信息。
我知道你已经回答了你的问题,但我会继续努力....
当您创建测试步骤并 运行 它时,它们往往会默认通过。然后用户决定如何定义什么是通过或失败。这可以完全基于 200 响应,就像您正在做的那样,或者通过创建针对响应的断言来确保 API 返回预期值的更复杂的东西。
我正在努力,因为 SoapUI 提供了您想要的东西 'out of the box',而无需诉诸 groovy 脚本。如果您 'open' 感兴趣的步骤,您将看到 'Assertions' 部分。从这里您可以添加任意数量的不同类型的断言。其中一个是 'Valid HTTP Status Code',如果你 select 这个,你可以输入该步骤的有效状态代码。例如200. 当你然后 运行 测试用例时,SoapUI 将显示基于断言的结果。如果这样做,请尝试将 500 作为有效状态代码,然后 运行。然后你所有的测试都会失败。
如果此答案对您的问题没有帮助或不适用,请告诉我,我会删除它。