如何在groovy测试步骤之间共享类对象?

时间:2018-01-22 23:09:49

标签: groovy soapui

我有一个外部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文件中可用的其余常用函数?请帮忙。

1 个答案:

答案 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脚本测试步骤。

在脚本的末尾添加以下语句。基本上使用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脚本测试步骤中创建实例并对方法进行所需的调用。