Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SoapUI中运行通用groovy脚本断言_Groovy_Soapui_Assertion - Fatal编程技术网

在SoapUI中运行通用groovy脚本断言

在SoapUI中运行通用groovy脚本断言,groovy,soapui,assertion,Groovy,Soapui,Assertion,是否可以/如何从SoapUI断言运行groovy脚本,而不将脚本复制/粘贴到所有需要执行相同脚本的测试步骤中?是否可以在断言之外编写脚本,并像调用方法一样运行脚本?因此,您可以在多个测试步骤中重用断言脚本 到目前为止,我尝试从断言中调用groovy测试步骤,但是run()方法需要一个testRunner变量,该变量在断言中不可用。我还尝试编写一个groovy脚本作为调用另一个groovy测试步骤脚本的后续测试步骤(不是断言),但我无法将响应从一个测试步骤转移到下一个测试步骤(老实说,我不希望创建

是否可以/如何从SoapUI断言运行groovy脚本,而不将脚本复制/粘贴到所有需要执行相同脚本的测试步骤中?是否可以在断言之外编写脚本,并像调用方法一样运行脚本?因此,您可以在多个测试步骤中重用断言脚本

到目前为止,我尝试从断言中调用groovy测试步骤,但是
run()
方法需要一个
testRunner
变量,该变量在断言中不可用。我还尝试编写一个groovy脚本作为调用另一个groovy测试步骤脚本的后续测试步骤(不是断言),但我无法将响应从一个测试步骤转移到下一个测试步骤(老实说,我不希望创建真正只是断言的测试步骤)


注意:这不是重复的,因为这个问题涉及存储属性,而不是重用脚本。

我终于找到了我的第二种方法:添加另一个groovy脚本作为后续测试步骤,该步骤包含断言并通过响应。剧本是:

context.response = context.expand('${MyTestStep#Response}') // store response to context variable
Object result = testRunner.testCase.testSuite.testCases['Validate Response'].testSteps['Validate Response'].run(testRunner, context)

if(result.getError() != null) {
    log.error("error", result.getError())
    assert false
}
assert true

MyTestStep
是groovy脚本之前的测试步骤
Validate Response
是groovy脚本的测试用例的名称,该脚本也称为
Validate Response
,通过
run
方法执行。

您在找“脚本库”吗@IMHO,SiKing的评论应该是答案。我已经编写了几个断言类,但是我用Java编写了它们,并将它们存储在SoapUI安装的scripts文件夹中。您仍然需要在测试中使用groovy步骤来调用外部脚本,但是如果您的检查发生变化,您只需要在一个位置更新外部脚本。@ChrisAdams解决方案需要是可移植的,即项目xml将交给多个人。作为库加载到soapui中的独立文件似乎会给可移植性增加一层复杂性。我真的希望解决方案在项目层和SoapUI屏幕本身上可见(和可编辑)。如果您使用Ready API(Pro),您可以创建一个类似函数的脚本库。如果我的经理给我SoapUI Pro绿灯,我会记住这一点。无需“断言为真”。更好的形式是这样断言谓词:“assert result.getError()==null:result.getError()”True,
assert True
是多余的。我把它拿走了。
assert false
仍然存在,因为我需要在抛出false断言之前记录错误。