前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >详解TestNG框架分组(四)

详解TestNG框架分组(四)

作者头像
无涯WuYa
发布2021-03-30 10:21:16
8620
发布2021-03-30 10:21:16
举报
文章被收录于专栏:Python自动化测试

熟悉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测试技术栈知识体系。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档