我有一个外部groovy文件,其中包含自动执行Web服务测试所需的所有常用功能。我通过创建外部文件中定义的Class实例来引用这些常用函数。现在我有一种情况是在第一个groovy测试步骤中创建一个Class实例,并在我的测试用例中的其他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文件中可用的其余常用函数?请帮忙。
答案 0 :(得分:3)
根据你的问题,所提到的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"
Load Script
。在脚本的末尾添加以下语句。基本上使用groovy的元编程功能来存储共享对象。
project.metaClass.myObject = cq
下一步:如何重新使用对象(这是主要问题)?
由于您的对象cq
已添加到project
对象,因此可以使用以下语句在任何groovy脚本测试步骤(在任何套件或案例中)访问该对象:
def cq = context.testCase.testSuite.project.myObject
//Now call the other methods using cq.method(arguments)
编辑:以上解决方案似乎适用于简单/原始数据类型。
但是,您有一个类实例。为此,需要进行一些更改。
以下是完整的项目级Load Script
(包括您的代码段)
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 Script测试步骤的脚本如下,即只调用CustomerQuotes.groovy
类的方法。
def obj = context.testCase.testSuite.project.myObject(context)
obj.run()
假设groovy文件中有一个名为run
的方法。当然,您可以使用自己的方法。
编辑2:
还有另一种替代方法。您需要编译groovy类,创建jar,将其复制到SOAPUI_HOME/bin/ext
目录下。当然,之后需要重新启动soapui工具。
现在,您可以根据需要在任何groovy脚本测试步骤中创建实例并对方法进行所需的调用。