我有一个外部 groovy 文件,其中包含自动化 Web 服务测试所需的所有常用函数。我通过创建外部文件中定义的类的实例来引用这些常用函数。现在,我需要在第一个 groovy 测试步骤中创建该类的实例,并在我的测试用例中的其他 groovy 测试步骤中使用相同的实例。
import groovy.lang.Binding
import groovy.util.GroovyScriptEngine
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
// location of script file is relative to SOAPUI project file.
String scriptPath = groovyUtils.projectPath + "\\Scripts\\"
// Create Groovy Script Engine to run the script.
GroovyScriptEngine gse = new GroovyScriptEngine(scriptPath)
// Load the Groovy Script file
externalScript = gse.loadScriptByName("CustomerQuotes.groovy")
def cq = externalScript.newInstance(context: context, log: log, testRunner: testRunner)
我该如何实现这一目标?我需要在其他 groovy 测试步骤中引用 cq 对象来调用我的外部 grooy 文件中可用的其余常用函数?请帮忙。
最佳答案
根据您的问题,提到的 groovy 脚本测试步骤被放置在任意测试用例中,尽管它并不自然。
上面的脚本自然适合使用项目级别的Load Script
。
在问题中提到的脚本中,更改以下语句
来自:
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
// location of script file is relative to SOAPUI project file.
String scriptPath = groovyUtils.projectPath + "\\Scripts\\"
致:
def projectPath = new File(project.path).parent.toString()
String scriptPath = "${projectPath}/Scripts"
- 并保持脚本的其余部分相同。
- 将脚本(在上述更改之后)放置在项目级别的
加载脚本
中。 - 由于上述原因,从任何地方删除 groovy 脚本测试步骤。
在脚本末尾添加以下语句。基本上使用groovy的元编程功能来存储共享对象。
project.metaClass.myObject = cq
下一步:如何重用该对象(这是主要问题)?
由于您的对象 cq
已添加到 project
对象中,因此可以使用以下语句在任何 groovy 脚本测试步骤(在任何套件或案例中)中访问相同的对象:
def cq = context.testCase.testSuite.project.myObject
//Now call the other methods using cq.method(arguments)
编辑:上述解决方案似乎适用于简单/原始数据类型。
但是,您有一个类实例。为此,还需要进行一些更改。
这是您完整的项目级别加载脚本
(包括您的代码片段)
def projectPath = new File(project.path).parent.toString()
String scriptPath = "${projectPath}/Scripts"
GroovyScriptEngine gse = new GroovyScriptEngine(scriptPath)
def externalScript = gse.loadScriptByName("CustomerQuotes.groovy")
project.metaClass.myObject {
externalScript.newInstance(context: it, log: log, testRunner: it.testRunner)
}
不同测试用例中 Groovy 脚本测试步骤 的脚本如下,即只需调用 CustomerQuotes.groovy
类的方法。
def obj = context.testCase.testSuite.project.myObject(context)
obj.run()
假设groovy文件中有一个名为run
的方法。当然,您可以使用自己的方法。
编辑2:
还有另一种替代方法。您需要编译groovy类,创建jar,将其复制到SOAPUI_HOME/bin/ext
目录下。当然,之后需要重新启动soapui工具。
现在您可以创建实例并根据需要在任何 groovy 脚本测试步骤中对方法进行所需的调用。
关于groovy - 如何在常规测试步骤之间共享类对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48391708/