如何在SoapUI中将全局类定义为groovy脚本?

如何在SoapUI中将全局类定义为groovy脚本?,groovy,soapui,Groovy,Soapui,我想在groovy脚本中定义一个类,我可以通过SoapUI中的其他groovy脚本重用它 我一直试图在TestSuite属性中定义我的类,但它不起作用我希望避免在JAR中定义类,因为我们在团队中工作,每个人都必须在他们的SoapUI中导入JAR才能运行我的测试。我使用SOAPUI3.6.1 我的测试套件是如何制作的: TestSuite TestCase TestSteps Init (Groovy Script) GetResponse1

我想在groovy脚本中定义一个类,我可以通过SoapUI中的其他groovy脚本重用它

我一直试图在TestSuite属性中定义我的类,但它不起作用我希望避免在JAR中定义类,因为我们在团队中工作,每个人都必须在他们的SoapUI中导入JAR才能运行我的测试。我使用SOAPUI3.6.1

我的测试套件是如何制作的:

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?