TestNg在组中运行时跳过@BeforeSuite和@BeforeClass

时间:2017-05-18 05:34:35

标签: java testng

使用运行TestNg时,它正在跳过@BeforeClass和@BeforeSuite方法。但是如果没有组运行它会执行@BeforeClass和@BeforeSuite

代码:

class TestStructure {

 @BeforeClass
 public void loadData() {
  System.out.println("loaded");
 }

 @BeforeSuite
 public void loadSysData() {
  System.out.println("loaded2");
 }
}


class Test extends TestStructure
{

    @Test(groups={"UAP"})
    public void test1
    {
     System.out.println("Test 2");
    }

}

testng.xml文件是

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="UAP suite" parallel="false" thread-count="1" verbose="1">
   <listeners>
      <listener class-name="com.module.listener.TestNGListener" />
   </listeners>

   <test name="TestSet 1" parallel="false" preserve-order="true">
      <groups>
         <run>
            <include name="UAP" />
         </run>
      </groups>
      <classes>
         <class name="Test" />
      </classes>
   </test>
</suite>

如果我从xml中删除组,则执行@BeforeClass@BeforeSuite。 请帮忙。

2 个答案:

答案 0 :(得分:9)

要解决此问题,您需要考虑两个选项。

  1. 为您的所有beforeXXX&amp;添加属性alwaysRun=true afterXXX方法。如果您希望这些方法运行而不管正在测试的组
  2. 如果你想在之前关联XXXX&amp; afterXXX仅限于特定的一组组,在这种情况下,您需要使用属性groups将这些方法绑定到该组。
  3. 根据您的使用案例,您需要将注释更新为

    @BeforeClass(alwaysRun=true)@BeforeSuite(alwaysRun=true)

    @BeforeClass(groups={"UAP"})@BeforeSuite(groups={"UAP"})

    希望这能回答你的问题。

    进一步参考 - http://testng.org/doc/documentation-main.html#annotations

答案 1 :(得分:0)

如果收视率最高的解决方案不起作用,请遵循此

1)尝试在不包含您不想执行的组的情况下运行这些组,而不要包括要执行的组

2)请将<exclude>的值留为空白

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="UAP suite" parallel="false" thread-count="1" verbose="1">
   <listeners>
      <listener class-name="com.module.listener.TestNGListener" />
   </listeners>

   <test name="TestSet 1" parallel="false" preserve-order="true">
      <groups>
         <run>
            <exclude name="" />
         </run>
      </groups>
      <classes>
         <class name="Test" />
      </classes>
   </test>
</suite>