使用组运行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
。
请帮忙。
答案 0 :(得分:9)
要解决此问题,您需要考虑两个选项。
alwaysRun=true
afterXXX方法。如果您希望这些方法运行而不管正在测试的组groups
将这些方法绑定到该组。 根据您的使用案例,您需要将注释更新为
@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>