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

How to share class object between groovy test steps?

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

根据你的问题,提到的 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)

编辑: 看来上述解决方案适用于 simple/Primitive 数据类型。

但是,您有一个 class 实例。为此,需要进行更多更改。

这是您的完整项目级别 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 test step 在不同的测试用例中的脚本如下,即调用你的 CustomerQuotes.groovy [=73] 的方法=].

def obj = context.testCase.testSuite.project.myObject(context)
obj.run()

假设 groovy 文件中有一个名为 run 的方法。当然你也可以用自己的方法。

编辑 2:

还有另一种替代方法。你需要编译groovy classes,创建jar,复制到SOAPUI_HOME/bin/ext目录下。当然之后需要重启soapui工具

现在您可以创建实例并根据需要在任何 groovy 脚本测试步骤中对方法进行所需的调用。