Maven单元测试并发和资源限制

时间:2013-11-21 17:07:39

标签: java unit-testing maven ant

我正在尝试将ant项目迁移到maven 3.1。目前,我们针对每个要测试的环境(服务器)设定了针对Chrome和Firefox运行相同测试集的目标。由于有几个限制,我们无法同时运行两个相同类型的浏览器。如果我设置maven surefire插件一次运行1个测试,结果可行。如果我使用两个线程进行测试,最终它们会因为一次浏览器被多次执行而开始失败,因为我们的网站Firefox执行速度较慢。

在蚂蚁中,测试目标包含:

<parallel threadCount="2">
        <junit fork="yes" printsummary="withOutAndErr" haltonfailure="no">
            <formatter type="xml" />
            <batchtest fork="true" todir="${junit.output.dir}">
                <fileset dir="target/test-classes/" includes="**/TestFirefox.class">
                </fileset>
            </batchtest>
            <classpath refid="DartSeleniumTest.classpath" />
        </junit>

        <junit fork="yes" printsummary="withOutAndErr" haltonfailure="no">
            <formatter type="xml" />
            <batchtest fork="yes" todir="${junit.output.dir}">
                <fileset dir="target/test-classes/" includes="**/TestChrome.class" />
            </batchtest>
            <classpath  refid="DartSeleniumTest.classpath" />
        </junit>
    </parallel>

我尝试使用antrun插件作为surefire的替代品,但它随junit 3.x一起提供。是否还有其他选项可以并行运行测试但是分组?

1 个答案:

答案 0 :(得分:2)

好的 - 根据您的评论,您希望能够使用Maven Antrun插件运行JUnit 4.x测试,但它依赖于JUnit 3.x。

pom中的插件部分允许您指定依赖项,默认情况下将覆盖插件所具有的依赖项 - 它在POM Reference - plugins中描述

在您的情况下,这意味着您最终会得到一个如下所示的插件:

<plugin>

  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-antrun-plugin</artifactId>
  <version>1.7</version>

  <dependencies>

    <dependency>
      <groupId>org.apache.ant</groupId>
      <artifactId>ant-junit</artifactId>
      <version>1.8.4</version>
    </dependency>

  </dependencies>

  <executions>

    <execution>

      <id>test</id>
      <phase>test</phase>

      <configuration>
        <target>

          <property name="reports.tests" value="${basedir}/target/ant-test-reports"/>
          <property name="compile.classpath" refid="maven.compile.classpath"/>
          <property name="test.classpath" refid="maven.test.classpath"/>

          <mkdir dir="${reports.tests}"/>

          <junit printsummary="yes" haltonfailure="yes">

            <classpath>
              <pathelement path="${compile.classpath}"/>
              <pathelement path="${test.classpath}"/>
            </classpath>

            <formatter type="plain"/>

            <batchtest fork="yes" todir="${reports.tests}">

              <fileset dir="${basedir}/src/test/java">
                <include name="**/*Test.java"/>
              </fileset>

            </batchtest>

          </junit>

        </target>

      </configuration>

      <goals>
        <goal>run</goal>
      </goals>

    </execution>

  </executions>

</plugin>

你可能想要禁用Surefire插件来阻止它运行你的测试以及ANT,这可以这样做:

<plugin>

  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.16</version>

  <configuration>
    <skipTests>true</skipTests>
  </configuration>

</plugin>