【问题标题】:How to run maven tests in a specific order? [duplicate]如何按特定顺序运行 Maven 测试? [复制]
【发布时间】:2014-08-06 19:26:43
【问题描述】:

我有一个 Maven 项目和几个测试类。

我想使用插件surefire 以特定顺序运行这些测试。

例如,我有:

  • ClassTest1.java
  • ClassTest2.java
  • ClassTest3.java
  • ClassTest4.java

我想运行 Class 1,然后是 2,然后是 3,最后是 4。

如何在 pom.xml 中指定它?

【问题讨论】:

  • 除了已经给出的所有答案,您还可以看看 TestNG,它支持一些测试排序。

标签: java maven selenium jenkins


【解决方案1】:

一种解决方法是将runOrder 参数设置为按字母顺序排列,然后将您的测试重命名为按字母顺序排列。

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-surefire-plugin</artifactId>
   <configuration>
      <runOrder>alphabetical</runOrder>
   </configuration>
</plugin>

但不建议这样做 - 单元测试应该相互独立。执行顺序应该无关紧要。

【讨论】:

  • 非常感谢您的帮助!!我很感激:)
  • 如果我为每个方法设置了优先级,如优先级 = 0、1、2。在这种情况下,它会随机运行类。即使我已经像这样将类重命名为 TC_000、TC_001、TC_002。并且每个类 - 方法都以 priority=0 开头,依此类推。
【解决方案2】:

您可以使用runOrder 参数执行此操作。

来自文档:

定义运行测试的顺序。支持的值为 “按字母顺序排列”、“按字母顺序排列”、“随机”、“每小时” (偶数小时按字母顺序排列,奇数小时按字母倒序排列), “failedfirst”、“balanced”和“filesystem”。

查看完整描述here。

这是一个例子

<plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-surefire-plugin</artifactId>
      <version>2.17</version>
      <configuration>
        <runOrder>alphabetical</runOrder>
    </configuration>
</plugin>

【讨论】:

  • 如何从命令行使用它? mvn test -Drunorder=alphabetical : is this correct?
【解决方案3】:

我建议您在 testng.xml 中定义顺序,然后通过 maven 创建配置文件并运行它。这是您可以尝试的代码示例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Selenium Automation" parallel="false">
    <test name="Test1">
        <classes>
            <class name="some.package.Class1"/>
            <class name="some.package.Class2"/>
            <class name="some.package.Class3"/>
        </classes>
    </test>
</suite>

然后在 POM.xml 中您可以创建如下配置文件并引用您要执行的 testNG.xml。

<profile>
    <id>any id</id>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.12.4</version>
        <configuration>
            <suiteXmlFiles>
                <suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
            </suiteXmlFiles>
        </configuration>
    </plugin/>
</profile>

【讨论】:

    【解决方案4】:

    您可以使用 JUnitCore 以特定顺序执行测试。这是一个基本的实现。

    public static void main(String[] args)
    {
        List<Class> testCases = new ArrayList<Class>();
    
        //Add test cases
        testCases.add(Class1.class);
        testCases.add(Class2.class);
        for (Class testCase : testCases)
               {
                    runTestCase(testCase);
               }
    }
    
    private static void runTestCase(Class testCase)
    {
        Result result = JUnitCore.runClasses(testCase);
        for (Failure failure : result.getFailures())
        {
            System.out.println(failure.toString());
        }
    }
    

    您是否有理由要求它们按特定顺序执行?理想情况下,测试不应相互依赖。

    【讨论】:

      【解决方案5】:

      你可以用junit创建一个testsuite类,然后用surefire来运行这个类,它会按照你给的顺序运行,例如:

      import org.junit.runner.RunWith; 
      import org.junit.runners.Suite; 
      import org.junit.runners.Suite.SuiteClasses; 
      
      @RunWith(Suite.class) 
      @SuiteClasses({ 
      Test1.class
      Test2.class
      Test3.class
      Test4.class
      }) 
      
      public class TestSuite { 
      
      } 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-18
        • 2010-09-05
        • 2014-07-13
        • 2018-08-21
        • 1970-01-01
        • 2023-01-08
        • 1970-01-01
        相关资源
        最近更新 更多