TestNG分组测试
分组测试是TestNG中的一个新的创新功能,它在JUnit框架中是不存在的。 它允许您将方法调度到适当的部分,并执行复杂的测试方法分组。 您不仅可以声明属于某个分组的方法,还可以指定包含其他组的组。 然后调用TestNG,并要求其包含一组特定的组(或正则表达式),同时排除另一个分组。 组测试提供了如何分区测试的最大灵活性,如果您想要背靠背运行两组不同的测试,则不需要重新编译任何内容。
使用<groups>
标记在testng.xml文件中指定分组。 它可以在<test>
或<suite>
标签下找到。 <suite>
标签中指定分组适用于其下的所有<test>
标签。
在本教程中,我们将演示如何在TestNG中进行分组测试。
1. 在方法上的分组
下面是一个测试分组示例
- runSelenium()和runSelenium1()属于分组:selenium-test。
- testConnectOracle()和testConnectMsSQL()属于分组:database 。
- 如果分组selenium-test和database通过,则runFinal()将被执行。
创建 TestGroup.java
import org.testng.annotations.AfterGroups;
import org.testng.annotations.BeforeGroups;
import org.testng.annotations.Test;
public class TestGroup {
@BeforeGroups("database")
public void setupDB() {
System.out.println("setupDB()");
}
@AfterGroups("database")
public void cleanDB() {
System.out.println("cleanDB()");
}
@Test(groups = "selenium-test")
public void runSelenium() {
System.out.println("runSelenium()");
}
@Test(groups = "selenium-test")
public void runSelenium1() {
System.out.println("runSelenium()1");
}
@Test(groups = "database")
public void testConnectOracle() {
System.out.println("testConnectOracle()");
}
@Test(groups = "database")
public void testConnectMsSQL() {
System.out.println("testConnectMsSQL");
}
@Test(dependsOnGroups = { "database", "selenium-test" })
public void runFinal() {
System.out.println("runFinal");
}
}
运行日志如下:
runSelenium()
runSelenium()1
setupDB()
testConnectMsSQL
testConnectOracle()
cleanDB()
runFinal
===============================================
Default Suite
Total tests run: 5, Failures: 0, Skips: 0
===============================================
2.在类上的分组
“分组”可以在类上应用。 在下面的示例中,“TestSelenium”类的每个公共方法都属于分组:selenium-test 。
TestSelenium.java
import org.testng.annotations.Test;
@Test(groups = "selenium-test")
public class TestSelenium {
public void runSelenium() {
System.out.println("runSelenium()");
}
public void runSelenium1() {
System.out.println("runSelenium()1");
}
}
testng.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="TestAll">
<test name="final">
<classes>
<class name="com.example.testngenable.group.TestSelenium" />
<class name="com.example.testngenable.group.TestGroup" />
</classes>
</test>
<!-- Run test method on group "selenium" only -->
<test name="selenium">
<groups>
<run>
<include name="selenium-test" />
</run>
</groups>
<classes>
<class name="com.example.testngenable.group.TestSelenium" />
<class name="com.example.testngenable.group.TestGroup" />
</classes>
</test>
</suite>
运行日志如下:
runSelenium()
runSelenium()1
runSelenium()
runSelenium()1
setupDB()
testConnectMsSQL
testConnectOracle()
cleanDB()
runFinal
runSelenium()
runSelenium()1
runSelenium()
runSelenium()1
===============================================
TestAll
Total tests run: 11, Failures: 0, Skips: 0
===============================================
3.其他分组
测试方法也可以同时属于多个分组,如下代码所示
@Test(groups = {"mysql","database"})
public void testConnectMsSQL() {
System.out.println("testConnectMsSQL");
}
这个分组可以用来打标签,很方便。