【问题标题】:How to define a global class in SoapUI as a groovy script?如何在 SoapUI 中将全局类定义为 groovy 脚本?
【发布时间】:2012-07-31 14:58:56
【问题描述】:

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

我怎样才能做到这一点?

【问题讨论】:

    标签: groovy soapui


    【解决方案1】:

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

    第 1 步:声明全局类

    • 创建一个名为MyRepository的项目
    • 在这个项目下创建一个名为libdisabled TestSuite
    • 在这个测试套件下创建一个名为MyClass的TestCase
    • 在这个测试用例下创建一个叫做class的groovy脚本

    您的项目树应如下图所示:

    第二步:编写全局类代码

    在名为 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) )
    

    第三步:导入全局类

    在任何项目中,您都可以使用以下 sn-p 导入全局类:

    // 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】:

      试试这个,我想会帮助你编写可重用的代码。

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

      【讨论】:

        【解决方案3】:

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

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

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

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

        【讨论】:

        • 我知道如何创建一个 jar 并将其导入 SoapUI,但这是我想要避免的。
        • 您是否尝试过使用 runTestStepByName?您将被限制在测试用例的范围内,但您可以像这样重用,在属性中传递参数。如果可行,那么也许您可以将东西放在一个单独的项目中,并使用测试中的 projectrunner 来运行东西
        • 如果您按顺序运行测试,您可以添加一个禁用的 groovy 脚本并仍然使用 runteststepbyname 执行它。
        • 效果很好。它与全局类不完全一样,因为您必须使用 testRunner.testCase.testSuite.set/getPropertyValue 传递每个参数,但它使 testCase 可重用!
        【解决方案4】:

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

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

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

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

        【讨论】:

          【解决方案5】:

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

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

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

          【讨论】:

          • 您使用的是哪个版本的 Soap UI?
          猜你喜欢
          • 2010-12-19
          • 2014-10-12
          • 1970-01-01
          • 1970-01-01
          • 2022-08-18
          • 2016-08-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多