【问题标题】:SoapUI Mock integrated in Maven testMaven 测试中集成的 SoapUI Mock
【发布时间】:2012-04-05 05:39:12
【问题描述】:

我想知道如何为 WSClient 执行一些集成测试。我的项目是用 maven 构建的。

为了测试配置初始化和一些请求,我认为启动 SoapUI Mock 服务是个好主意。然后我进入了从一些帖子中检索到的配置。

在我的 pom.xml 中

    <plugin>
            <groupId>eviware</groupId>
            <artifactId>maven-soapui-plugin</artifactId>
            <version>4.0.1</version>
            <executions>
                <execution>
                    <id>StartupMock</id>
                    <configuration>
                        <projectFile>src/test/soapui/MyMock-soapui-project.xml</projectFile>
                        <outputFolder>${project.build.directory}/surefire-reports</outputFolder>
                        <junitReport>true</junitReport>
                        <host>http://127.0.0.1:8181</host>
                        <mockService>DataProviderMock</mockService>
                    </configuration>
                    <goals>
                        <goal>test</goal>
                    </goals>
                    <phase>test</phase>
                </execution>
            </executions>
        </plugin>

我的名为 MyMock 的 MockService 应该在 http://127.0.0.1:8181/somepath 上启动,我的 WSClient 可以在此发送请求。但我无法在 mvn test 阶段开始模拟。

这是测试 WSClients 的合适方法吗?在这种情况下,问题或配置错误在哪里?

编辑:没有错误。我看不到那个端口8181 上的模拟监听。我看到的唯一消息(来自soapui.log)是:

2012-03-21 10:17:21,011 WARN  [SoapUI] Missing folder [D:\proyectos\everest-utils\everest-bridge\trunk\.\ext] for external libraries
2012-03-21 10:17:21,392 INFO  [DefaultSoapUICore] initialized soapui-settings from [C:\Users\rromero\soapui-settings.xml]
2012-03-21 10:17:23,205 INFO  [WsdlProject] Loaded project from [file:/D:/proyectos/everest-utils/everest-bridge/trunk/src/test/soapui/MyMock-soapui-project.xml]
2012-03-21 10:17:23,891 INFO  [SoapUITestCaseRunner] Running soapUI tests in project [DataProvider]
2012-03-21 10:17:23,894 INFO  [SoapUITestCaseRunner] Running Project [MyMock], runType = SEQUENTIAL
2012-03-21 10:17:23,900 INFO  [SoapUITestCaseRunner] Project [MyMock] finished with status [FINISHED] in 0ms

提前和亲切的问候,

鲁本

【问题讨论】:

  • 你看到什么样的错误?
  • 我编辑了我的问题。谢谢。

标签: java maven maven-plugin soapui


【解决方案1】:

根据http://www.soapui.org/Test-Automation/maven-2x.html,您需要运行mock 目标而不是test 目标。请更改您的goal 部分以调用mock 目标:

    <plugin>
        <groupId>eviware</groupId>
        <artifactId>maven-soapui-plugin</artifactId>
        <version>4.6.1</version>
        <executions>
            <execution>
                <id>StartupMock</id>
                <configuration>
                    <projectFile>src/test/soapui/MyMock-soapui-project.xml</projectFile>
                    <outputFolder>${project.build.directory}/surefire-reports</outputFolder>
                    <junitReport>true</junitReport>
                    <host>http://127.0.0.1:8181</host>
                    <mockService>DataProviderMock</mockService>
                    <noBlock>true</noBlock>
                </configuration>
                <goals>
                    <goal>mock</goal>
                </goals>
                <phase>process-test-classes</phase>
            </execution>
        </executions>
    </plugin>

另外两个变化:

  • 确保在运行测试之前的阶段开始模拟测试,例如在pre-integration-testprocess-test-classes
  • noBlock选项添加到true

例如见上文。

【讨论】:

  • 我改变了目标,是的,它开始了模拟。但它等待用户按任意键。有没有办法在 junit 测试之前继续运行模拟,直到测试通过?似乎只能在执行测试后使用。谢谢@nwinkler
  • 无论如何,我正在尝试在我的@BeforeClass 方法中使用SoapUIMockServiceRunner,也许这是一个更好的解决方案。
  • 我已经添加到我的示例中以解决其中的一些问题。
  • 非常感谢@nwinkler
  • post-integration-test 阶段运行某种stopMock 目标怎么样,这存在吗?