针对多个目标平台运行集成测试

时间:2016-08-09 07:29:54

标签: maven tycho

我目前的任务是从Eclipse 3.7和4.5切换我们的一个应用程序。可悲的是,没有人预料到新框架是如何被搞砸的,这就是为什么其他应用程序现在将保持在3.7。现在是棘手的部分:为了加快错误查找过程,我想测试我们对4.5的常见插件(但是他们仍然需要针对3.7进行测试)。

This thread建议可以使用帮助maven-invoker-plugin,但是它的2岁,这是一个非常常见的用例,所以现在可能会有更好的东西。

我无法找到关于如何使maven-invoker-plugin与Tycho合作的任何内容。并且tycho-surefire-plugin似乎没有任何选项可以更改目标平台。

以防万一,我正在谈论这个目标平台(在文档之外似乎不支持/使用):

<plugin>
    <groupId>org.eclipse.tycho</groupId>
    <artifactId>target-platform-configuration</artifactId>
    <configuration>
        <resolver>p2</resolver>
        <target>
            <artifact>
                <groupId>${project.groupId}</groupId>
                <artifactId>org.acme.project</artifactId>
                <version>${project.version}</version>
                <classifier>platform</classifier>
            </artifact>
        </target>
    </configuration>
</plugin>

那么如何针对多个目标平台测试我的集成测试?

2 个答案:

答案 0 :(得分:0)

您是否需要在单次构建期间执行此操作,即在单个反应器中?如果没有,您可以根据传递给Maven的系统属性简单地切换目标平台,例如,通过Jenkins/Hudson matrix build

<target>
  <artifact>
    <groupId>${project.groupId}</groupId>
    <artifactId>${targetPlatform}</artifactId>
    <version>${project.version}</version>
    <classifier>platform</classifier>
  </artifact>
</target>

请记住为targetPlatform下的project/properties媒体资源配置默认值,因此未设置-DtargetPlatform=...的版本不会失败。

(在Eclipse Code Recommenders中,我们定期使用此设置test against 6 different Eclipse releases。)

答案 1 :(得分:0)

我还找到了在同一个反应堆中运行测试的方法。

我创建了一个没有所有测试类的测试片段的副本,并通过target-platform-configuration添加了E4目标平台。然后我使用此代码将类和 fragment.xml 复制到新模块:

<plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.0.1</version>
    <executions>
        <execution>
            <id>copy-classes</id>
            <phase>validate</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
                <outputDirectory>${basedir}/target/it-classes</outputDirectory>
                <resources>
                    <resource>
                        <directory>../${original-test-project}/src</directory>
                        <filtering>true</filtering>
                    </resource>
                </resources>
            </configuration>
        </execution>
        <execution>
            <id>copy-fragment</id>
            <phase>validate</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
                <outputDirectory>${basedir}/</outputDirectory>
                <resources>
                    <resource>
                        <directory>../${original-test-project}/</directory>
                        <includes>
                            <include>fragment.xml</include>
                        </includes>
                    </resource>
                </resources>
            </configuration>
        </execution>
    </executions>
</plugin>

最后, build.properties 必须有行source.. = target/it-classes/,以便Maven构建可以编译复制的类并正常运行它们。