我想在一个groovy脚本中定义一个类,我可以通过SoapUI中的其他groovy脚本重用它。
我alredy尝试在TestSuite属性中定义我的类,但它不起作用。 我想避免在JAR 中定义类,因为我们在团队中工作,每个人都必须在他们的SoapUI中导入JAR才能运行我的测试。我使用SoapUI 3.6.1
以下是我的TestSuite的制作方法:
TestSuite
TestCase
TestSteps
Init (Groovy Script)
GetResponse1 (Test Request)
Test1 (Groovy Script)
GetResponse2 (Test Request)
Test2 (Groovy Script)
为了简化测试,我在'Test1'中定义了一个类,我想在'Test2'中重用这个类。理想情况下,我会在'Init'中定义该类,并且任何其他groovy脚本都可以访问它。
我如何实现这一目标?
答案 0 :(得分:5)
尝试这一点,我认为可以帮助您使用可重复使用的代码。
答案 1 :(得分:5)
基于@Abhey Rathore的链接,以下是如何在SoapUI的groovy脚本中定义全局类:
MyRepository
lib
MyClass
class
在名为class
的groovy脚本中,复制并粘贴以下代码:
class MyClass {
// The three following fields are MANDATORY
def log
def context
def testRunner
// The constructor below is MANDATORY
def MyClass(logIn, contextIn, testRunnerIn) {
this.log = logIn
this.context = contextIn
this.testRunner = testRunnerIn
}
def myMethod() {
this.log.info 'Hello World!'
}
}
// Other scripts elsewhere in SoapUI will access the reused class through their context
context.setProperty( "MyClass", new MyClass(log, context, testRunner) )
在任何项目中,您都可以使用以下代码段导入全局类:
// Import the class
def currentProject = testRunner.testCase.testSuite.project
currentProject
.testSuites["lib"]
.testCases["MyClass"]
.testSteps["class"]
.run(testRunner, context)
// Now use it
context.MyClass.myMethod()
SoapUI 5.2.1
答案 2 :(得分:1)
我很确定您必须创建一个JAR文件并将其放在\ bin \ ext中。
SoapUI会在重启时自动启动(你应该在启动时看到它)。
你基本上只是创建一个Java或Groovy项目,导出它(使用Eclipse),它将工作。 SoapUI可能会覆盖您的依赖项,但如果没有,您也可以添加这些JAR(比创建可运行的JAR更安全,因为SoapUI可能使用您使用的不同版本)。
如果您需要帮助,请发布相关问题。
答案 3 :(得分:0)
在SoapUI 5.3.0中,您可以使用可以设置的属性并获取上下文变量。该变量在脚本断言片段中可用。
例如:
context.setProperty("prop", "value");
从不同的测试脚本中,您可以通过以下方式获取值:
context.getProperty("prop");
当您将属性定义为测试套件的步骤或标头中的字段值时,可以使用该属性。您可以${=context.getProperty("prop");}
答案 4 :(得分:0)
将此内容写入Project的加载脚本,然后重新加载项目或运行它。
com.eviware.soapui.support.ClasspathHacker.addFile( project.context.expand('${projectDir}') )
运行后,您现在可以将.groovy文件放入与soapui项目xml相同的文件夹中。另外,没有必要编译任何东西。
e.g。在MyClass.groovy中:
class MyClass {String name}
您可以在所有其他脚本中正常导入这些类:
import MyClass
assert new MyClass(name:"me") instanceof MyClass
唯一需要注意的是,您的加载脚本(设置类路径的脚本)不能具有这些导入,因为脚本将无法编译。如果您想在项目加载脚本中导入某些内容,只需让您的加载脚本评估'另一个groovy脚本(换句话说,运行它),您可以在其中使用导入:
evaluate (new File (project.context.expand('${projectDir}') + 'myProjectLoadScript.groovy'))
//in myProjectLoadScript.groovy:
import MyClass
/* Do things using MyClass... */
这对我来说似乎是最简单的方式,所以我不确定为什么我无法在网上找到这个答案。