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

时间:2012-07-31 14:58:57

标签: groovy soapui

我想在一个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脚本都可以访问它。

我如何实现这一目标?

5 个答案:

答案 0 :(得分:5)

尝试这一点,我认为可以帮助您使用可重复使用的代码。

http://forum.soapui.org/viewtopic.php?t=15744

答案 1 :(得分:5)

基于@Abhey Rathore的链接,以下是如何在SoapUI的groovy脚本中定义全局类:

第1步:声明全局类

  • 创建名为MyRepository
  • 的项目
  • 在此项目下,创建名为lib
  • 已停用 TestSuite
  • 在此测试套件下创建名为MyClass
  • 的TestCase
  • 在此测试用例下,创建一个名为class
  • 的groovy脚本

您的项目树应如下图所示:
Project tree for declaring a global class in SoapUI

第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

答案 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... */

这对我来说似乎是最简单的方式,所以我不确定为什么我无法在网上找到这个答案。