TestNG框架分组详解(四)
熟悉Pytest测试框架的同学应该清楚,在Pytest测试框架中使用装饰器的方式,以及使用命令行k,可以指定执行的组,
首先我们来思考,为什么需要组,需要组的最核心的原因是在实际的测试中,我们的测试用例会非常非常多,但是这些测试
用例依据分类我们可以把它分为组,这样我们只根据自己的诉求来分组执行就可以了,比如只执行用户管理模块的测试用例,
其他的功能测试用例都不执行,那么我们可以把用户管理放到一个组来执行。分组测试方法是 TestNG 最重要的功能之一。
在 TestNG 中,用户可以将多个测试方法分组到命名组中。您还可以执行属于组或多个组的特定测试方法集。此功能允许将测
试方法隔离到不同的部分或模块中。例如,您可以拥有一组属于理智测试的测试,而其他人可能属于回归测试。您还可以根据测
试方法验证的功能/功能来隔离测试。这有助于仅执行一组特定的测试,并需要。让我们创建一些属于特定组的测试。下面我们
依据案例来演示这部分的应用,案例代码如下:
package test.groups; import org.testng.annotations.Test; public class TestGroup { @Test(groups = "login") public void test_login_001() { System.out.println("login test 001"); } @Test(groups = "login") public void test_login_002() { System.out.println("login test 002"); } @Test(groups = "login") public void test_login_003() { System.out.println("login test 003"); } @Test(groups = "logout") public void test_logout_001() { System.out.println("logout test 001"); } @Test(groups = "logout") public void test_logout_002() { System.out.println("logout test 002"); } }
我们在testng.xml文件中指定只执行分组为“login”的,其他的分组不执行,修改后的testng.xml配置文件内容为:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <!--<suite name="UnitSuite">--> <suite name="Sample Suite"> <test name="Group Test"> <groups> <run> <include name="login"></include> </run> </groups> <classes> <class name="test.groups.TestGroup"></class> </classes> </test> </suite>
执行后,可以看到结果信息中只执行了分组为login的,其他的分组并没有执行,执行结果如下所示:

从结果信息来看,分组“logout” 的没有执行,而分组“login”的进行了执行。
事实上,TestNG测试框架也是支持多个分组的,比如一个测试用例,它即属于A组,也属于B组,这就是多个组的支撑,我们修改
案例代码,修改后的源码如下:
package test.groups; import org.testng.annotations.Test; public class TestGroup { @Test(groups = {"login","smoke"}) public void test_login_001() { System.out.println("login test 001"); } @Test(groups = {"login"}) public void test_login_002() { System.out.println("login test 002"); } @Test(groups = {"login"}) public void test_login_003() { System.out.println("login test 003"); } @Test(groups = {"logout","smoke"}) public void test_logout_001() { System.out.println("logout test 001"); } @Test(groups = {"logout"}) public void test_logout_002() { System.out.println("logout test 002"); } }
在如上的代码中可以看到,我们新增了一个冒烟测试的分组,这样有的测试用例就同时具备了多个分组,下面我们来演示多个分组的执行,
多个分组的执行首先需要满足一个关系条件,如果满足后,就会执行的,比如如上的案例代码中,有两个测试用例都是属于“smoke”
的分组,但是它们又属于不同的分组,相同点是都是属于“smoke”的分组,不同点是一个属于“login”分组,另外一个属于“logout”的分组。
我们期望的是只是执行“smoke”分组,那么涉及到的两个测试用例就会被执行的,修改后的testng.xml的配置文件如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <!--<suite name="UnitSuite">--> <suite name="Sample Suite"> <test name="Group Test"> <groups> <run> <include name="smoke"></include> </run> </groups> <classes> <class name="test.groups.TestGroup"></class> </classes> </test> </suite>
执行后,就会执行到分组存在“smoke”的测试用例,执行后的结果信息如下所示:

当然在分组的执行中,我们并不希望所有的分组都是可以得到执行的,有的分组不希望被执行,我们需要修改testng.xml,把这些不
想执行的分组移除,修改后的testng.xml配置文件内容为:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <!--<suite name="UnitSuite">--> <suite name="Sample Suite"> <test name="Group Test"> <groups> <run> <include name="smoke"></include> <exclude name="login"></exclude> </run> </groups> <classes> <class name="test.groups.TestGroup"></class> </classes> </test> </suite>
测试用例test_login_001()同时包含了“smoke”和“login”的分组,在配置中“smoke”分组是需要执行的,而“login”的分组是不执行
的,所以最终的结论是该测试用例它不会被执行的,可以看到执行的结果信息中并不包含该测试用例,执行后的结果信息如下:

如果分组是多个字符串,我们可以使用正则的方式来匹配执行,如下案例代码:
package test.groups; import org.testng.annotations.Test; public class TestGroup { @Test(groups = {"ui-test_login"}) public void test_login_001() { System.out.println("login test 001"); } @Test(groups = {"ui-test_login"}) public void test_login_002() { System.out.println("login test 002"); } @Test(groups = {"ui-test_login"}) public void test_login_003() { System.out.println("login test 003"); } @Test(groups = {"ui-test_logout"}) public void test_logout_001() { System.out.println("logout test 001"); } @Test(groups = {"ui-test_logout"}) public void test_logout_002() { System.out.println("logout test 002"); } }
我们只执行带“login”关键字的测试用例,修改后的testng.xml配置文件内容为:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <!--<suite name="UnitSuite">--> <suite name="Sample Suite"> <test name="Group Test"> <groups> <run> <include name=".*_login"></include> </run> </groups> <classes> <class name="test.groups.TestGroup"></class> </classes> </test> </suite>
执行后的结果信息就会显示带“login”的关键字的测试用例,执行后的结果如下所示:

感谢您的阅读和关注,后续会持续更新!

浙公网安备 33010602011771号