6

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

我已经尝试在 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 脚本都可以访问它。

我怎样才能做到这一点?

4

5 回答 5

7

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

第一步:声明全局类

  • 创建一个名为MyRepository
  • 在这个项目下创建一个禁用的TestSuite,称为lib
  • 在这个测试套件下创建一个名为MyClass
  • 在这个测试用例下创建一个名为class

您的项目树应如下图所示:
用于在 SoapUI 中声明全局类的项目树

第二步:编写全局类代码

在名为 的 groovy 脚本class中,复制并粘贴以下代码:

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

于 2016-12-22T09:51:11.423 回答
5

试试这个,我想会帮助你重用代码。

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

于 2014-03-04T20:01:52.300 回答
1

我很确定您必须创建一个 JAR 文件并将其放在 \bin\ext 中。

SoapUI 将在重新启动时自动获取它(您应该在启动内容中看到它)。

您基本上只需创建一个 Java 或 Groovy 项目,将其导出(使用 Eclipse),它就可以工作了。SoapUI 可能会覆盖您的依赖项,但如果没有,您也可以添加这些 JAR(比创建可运行的 JAR 更安全,因为 SoapUI 可能使用您使用的不同版本)。

如果您需要帮助,请发布相关问题。

于 2012-08-02T16:42:17.823 回答
0

将此写入您的项目的加载脚本,然后重新加载您的项目或运行它。

com.eviware.soapui.support.ClasspathHacker.addFile( project.context.expand('${projectDir}') )

运行后,您现在可以将 .groovy 文件放入与您的 soapui 项目 xml 相同的文件夹中。另外,不需要编译任何东西。

例如在 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... */

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

于 2018-02-11T02:52:42.723 回答
0

在 SoapUI 5.3.0 中,您可以使用可以设置和获取上下文变量的属性。该变量在脚本断言片段中可用。

例如: context.setProperty("prop", "value");

从不同的测试脚本中,您可以通过以下方式获取值: context.getProperty("prop");

当您将属性定义为测试套件的一个步骤或作为标题中字段的值时,您可以使用该属性。你可以这样做${=context.getProperty("prop");}

于 2017-09-22T16:03:29.397 回答