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

标签 groovy soapui

我有一个外部 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/

相关文章:

gradle - Groovy和Junit

groovy - parseClass 加载类 groovy

gradle - 如何排除Gradle的jar.from中的文件?

xml - 解析Soap响应-XML/XPATH(在soapUI中)(SoapUI响应中的命名空间)

groovy - SOAPUI:使用 txt 文件中的属性运行测试步骤,将属性设置为 txt 中的属性

soapui - 如何使用Groovy从Json Response中提取参数?

gradle - Kotlin buildscript不使用我的自定义Maven repo

hibernate - 在 Grails/Hibernate 中,您可以将生成器设置为仅在未分配时递增吗?

java - 在 JAX-RS 中,整个 JSON 字符串都会被发布

java - 如何在 SoapUI JAX-WS 生成的代码中添加 ws-security