如何在SoapUI中将全局类定义为groovy脚本?
我想在groovy脚本中定义一个类,我可以通过SoapUI中的其他groovy脚本重用它 我一直试图在TestSuite属性中定义我的类,但它不起作用我希望避免在JAR中定义类,因为我们在团队中工作,每个人都必须在他们的SoapUI中导入JAR才能运行我的测试。我使用SOAPUI3.6.1 我的测试套件是如何制作的:如何在SoapUI中将全局类定义为groovy脚本?,groovy,soapui,Groovy,Soapui,我想在groovy脚本中定义一个类,我可以通过SoapUI中的其他groovy脚本重用它 我一直试图在TestSuite属性中定义我的类,但它不起作用我希望避免在JAR中定义类,因为我们在团队中工作,每个人都必须在他们的SoapUI中导入JAR才能运行我的测试。我使用SOAPUI3.6.1 我的测试套件是如何制作的: TestSuite TestCase TestSteps Init (Groovy Script) GetResponse1
TestSuite
TestCase
TestSteps
Init (Groovy Script)
GetResponse1 (Test Request)
Test1 (Groovy Script)
GetResponse2 (Test Request)
Test2 (Groovy Script)
为了简化我的测试,我在“Test1”中定义了一个类,我想在“Test2”中重用这个类。因此,理想情况下,我将在“Init”中定义该类,并且任何其他groovy脚本都可以访问该类
我怎样才能做到这一点呢?我非常确定您必须创建一个JAR文件并将其放入\bin\ext中 SoapUI将在重新启动时自动拾取它(您应该在启动资料中看到它) 基本上,您只需创建一个Java或Groovy项目,将其导出(使用Eclipse)即可。SoapUI可能会覆盖您的依赖项,但如果没有,您也可以添加这些JAR(比创建可运行的JAR更安全,因为SoapUI可能会使用您所使用的不同版本)
如果您需要帮助,请发布相关问题。试试这个,我认为它将在可重用代码方面对您有所帮助 基于的链接,以下是如何在SoapUI的groovy脚本中定义全局类: 步骤1:声明全局类
- 创建一个名为
MyRepository
- 在此项目下,创建一个名为
lib的禁用的测试套件
- 在这个测试套件下创建一个名为
MyClass
- 在这个测试用例下,创建一个名为
class
步骤2:编写全局类代码 在名为
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) )
步骤3:导入全局类
从任何项目中,都可以使用以下代码段导入全局类:
// 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在SoapUI 5.3.0中,您可以使用可在上下文变量上设置和获取的属性。该变量在脚本断言片段中可用 例如:
context.setProperty(“prop”、“value”)代码>
从不同的测试脚本中,您可以通过以下方式获得值:
context.getProperty(“prop”)代码>
当您将属性定义为测试套件的步骤或标题中字段的值时,可以使用中的属性。您可以通过${=context.getProperty(“prop”);}
将其写入项目的加载脚本,然后重新加载项目或直接运行它来完成
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... */
对我来说,这似乎是最简单的方法,所以我不确定为什么我在网上其他地方找不到这个答案。我知道如何创建jar并将其导入SoapUI,但这正是我试图避免的。你尝试过使用runTestStepByName吗?您将被限制在testcase的范围内,但是您可以像这样重用,在属性中传递参数。如果可以的话,那么你可以把东西放在一个单独的项目中,使用测试中的projectrunner来运行东西。如果你按顺序运行测试,你可以添加一个禁用的groovy脚本,并且仍然使用runteststepbyname来执行它。它工作得非常好。它不像一个全局类,因为您必须使用testRunner.testCase.testSuite.set/getPropertyValue传递每个参数,但它使testCase可重用!您使用了哪个版本的soapui?