熟悉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”的关键字的测试用例,执行后的结果如下所示:
感谢您的阅读,后续会持续更新Python&Java测试技术栈知识体系。