更新到6.14.2之后,测试用例的Testng运行顺序发生了变化

时间:2018-04-01 18:10:07

标签: java selenium selenium-webdriver testng testng-eclipse

以前我使用的是testng 6.8.8版本,所有测试都按预期执行。但在几天之前我将testng版本更新为6.14.2 ,开始面对运行序列问题。我也尝试过优先级更改和所有事情,但它没有工作,因为它在testng 6.8.8中工作。有关详细信息,请参阅源代码。

class1.java

    package TestNG;

    import org.testng.annotations.AfterClass;
    import org.testng.annotations.BeforeClass;
    import org.testng.annotations.Test;
    public class class1
    {
    @BeforeClass
    public void beforeclass1()
    {
        System.out.println("before_class1");

    }

    @AfterClass
    public void afterclass1()
    {
        System.out.println("after_class1");

    }

    @Test(priority = 0)
    public void class1_method1()
    {
        System.out.println("class1_method1");
    }

    @Test(priority = 1)
    public void class1_method2()
    {
        System.out.println("class1_method2");

    }

    @Test(priority = 2)
    public void class1_method3()
    {
        System.out.println("class1_method3");

    }
}

class2.java

package TestNG;

import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class class2
{

    @BeforeClass
    public void beforeclass1()
    {
        System.out.println("before_class2");

    }

    @AfterClass
    public void afterclass1()
    {
        System.out.println("after_class2");

    }

    @Test(priority = 0)
    public void class2_method1()
    {
        System.out.println("class2_method1");
    }

    @Test(priority = 1)
    public void class2_method2()
    {
        System.out.println("class2_method2");

    }

    @Test(priority = 2)
    public void class2_method3()
    {
        System.out.println("class2_method3");

    }
}

class3.java

package TestNG;

import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class class3
{

    @BeforeClass
    public void beforeclass1()
    {
        System.out.println("before_class3");

    }

    @AfterClass
    public void afterclass1()
    {
        System.out.println("after_class3");

    }

    @Test(priority = 0)
    public void class3_method1()
    {
        System.out.println("class3_method1");
    }

    @Test(priority = 1)
    public void class3_method2()
    {
        System.out.println("class3_method2");

    }

    @Test(priority = 2)
    public void class3_method3()
    {
        System.out.println("class3_method3");

    }
}

的testng.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
  <test name="Test" >
    <classes>
      <class name="TestNG.class1">
        <methods>
          <include name="class1_method1"/>
          <include name="class1_method2"/>
          <include name="class1_method3"/>
          <include name="beforeclass1"></include>
          <include name="after_class1"></include>
          </methods>
      </class>
      <class name="TestNG.class2">
       <methods>
          <include name="class2_method1"/>
          <include name="class2_method2"/>
          <include name="class2_method3"/>
          <include name="beforeclass2"></include>
          <include name="after_class2"></include>         
          </methods>
      </class>
      <class name="TestNG.class3">
          <methods>
          <include name="class3_method1"/>
          <include name="class3_method2"/>
          <include name="class3_method3"/>
          <include name="beforeclass3"></include>
          <include name="after_class3"></include>
          </methods>
       </class>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

使用testng(6.14.2)运行testng.xml后的实际输出:

  

before_class1

     

class1_method1

     

before_class2

     

class2_method1

     

before_class3

     

class3_method1

     

class1_method2

     

class2_method2

     

class3_method2

     

class1_method3

     

after_class1

     

class2_method3

     

after_class2

     

class3_method3

     

after_class3

预期输出:(使用testng 6.8.8但在testng 6.14.2中无法正常工作)

  

before_class1

     

class1_method1

     

class1_method2

     

class1_method3

     

after_class1

     

before_class2

     

class2_method1

     

class2_method2

     

class2_method3

     

after_class2

     

before_class3

     

class3_method1

     

class3_method2

     

class3_method3

     

after_class3

1 个答案:

答案 0 :(得分:0)

此设置将一直有效至6.9.10,此后测试标记的优先级为全局。

使用dependsOnMethods or depednsOnGroups首先在课程中按顺序运行。如果要在依赖它的方法失败时运行该方法,则需要使用alwaysRun = true

您也可以尝试将类拆分为不同的测试标记。

还不确定是否需要在methods标签中提及before和after方法。