您现在的位置是:亿华云 > 数据库
干货!详解自动化测试用例设计与管理的通用策略(基于TestNg)
亿华云2025-10-02 16:33:30【数据库】6人已围观
简介自动化测试的用例设计通用策略我们在做自动化测试时,是需要对用例进行管理的,比较常用的方案是(以java为例)一个project对应一个产品; 一个package对应产品中的一个模块;
自动化测试的干货用例设计通用策略
我们在做自动化测试时,是详解需要对用例进行管理的,比较常用的自动方案是(以java为例)
一个project对应一个产品; 一个package对应产品中的一个模块; 一个class对应模块中的一个场景; 一个测试方法对应场景中的一个测试点; 最后,通过suite,化测定义组织要执行的试用class。如下图所示,例设理TestNGDemo定义为一个产品、计管基于包com.my.case1、通用com.my.case2和com.my.case3代表产品中的策略3个模块,而MyCase1、干货MyCase2等6个类代表6个测试场景。详解
我们可以在类中设计具体的自动测试点,如下图所示,化测类MyCase5中的试用方法f9和f10代表两个测试点(基于Testng)
TestNg中用例组织
Testng通过配置文件来对测试用例进行管理,具体规则如下:
一个suite里面可以定义要执行的源码库例设理test,可以包括多个test; 一个test里面可以定义要执行的package和class(可以同时定义package和class,二者是并列关系) 一个class可以设置要执行的method,具体组织形式如下:Suite里定义了两个test: Simpletest和advancedtest;
在Simpletest中定义了要执行的package:com.my.case1和class: com.my.case2.MyCase4;
在类MyCase4中定义了要执行的方法f7和不执行的方法f8;
在advancedtest中定义了要执行的class:com.my. case3.MyCase5
运行结果如下:
com.my.case1包下的类MyCase1和类MyCase2中的所有方法都运行了,f1、f2、f3和f4;
类MyCase4中只运行了方法f7;
类MyCase5中的所有方法都运行了,f9和f10。
TestNG中group的应用
Group的基础使用
TestNG可以执行复杂的测试方法分组进而把测试用例进行分类。可以通过@Test(groups = { "组1","组2" })进行标识;
分组可以作用在具体的类和方法上,作用在类上表示类里的所有方法都属于该分组;而作用在方法上则表示只有该方法属于该分组。站群服务器
具体代码如下:
MyCase1类具备smoketest标签 @Test(groups = { "smoketest" }) public class MyCase1 { @Test public void f1() { System.out.println("MyCase1 f1"); assertEquals("a","b"); } @Test public void f2() { System.out.println("MyCase1 f2"); assertEquals("a","a"); } } MyCase2类只有f3方法具备smoketest标签 public class MyCase2 { @Test(groups = { "smoketest" }) public void f3() { System.out.println("MyCase2 f3"); assertEquals("a","b"); } @Test public void f4() { System.out.println("MyCase2 f4"); assertEquals("a","a"); } } MyCase3类具备performancetest标签 @Test(groups = { "performancetest" }) public class MyCase3 { @Test public void f5() { System.out.println("MyCase3 f5"); assertEquals("a","b"); } @Test public void f6() { System.out.println("MyCase3 f6"); assertEquals("a","a"); } } MyCase4类只有f8方法具备performancetest标签 public class MyCase4 { @Test public void f7() { System.out.println("MyCase4 f7"); assertEquals("a","b"); } @Test(groups = { "performancetest" }) public void f8() { System.out.println("MyCase4 f8"); assertEquals("a","a"); } } MyCase5类具备securitytest 和performancetest标签 public class MyCase5 { @Test(groups = { "securitytest","performancetest" }) public void f9() { System.out.println("MyCase5 f9"); assertEquals("a","b"); } @Test public void f10() { System.out.println("MyCase5 f10"); assertEquals("a","a"); } } MyCase6类具备securitytest标签 @Test(groups = { "securitytest" }) public class MyCase6 { @Test public void f11() { System.out.println("MyCase6 f11"); assertEquals("a","b"); } @Test public void f12() { System.out.println("MyCase6 f12"); assertEquals("a","a"); } }设置配置文件,如下所示:
其中define标签部分定义了需要的组分类,该部分可以省略,但个人建议保留,使用define可以清晰的看到现有的group结构;
run标签带表了需要运行的group信息,我们可以通过include和exclude对需要执行的分组和不需要执行的分组进行设置,方法非常简单,如下所示:
<run> <include name="group1" /> <exclude name="group2" /> </run>上图中通过include来设置运行securitytest组标识的用例。
运行结果如下:可以看到securitytest标签下的用例都运行了
@BeforeGroups和@AfterGroups的应用
@BeforeGroups注解的方法将在本组内任何测试方法执行前被执行一次,可用于执行初始化操作。类似的@AfterGroups 注解的方法将在本组内任何测试方法执行后被执行,可用于关闭资源。@Test(groups = { "smoketest" })
public class MyCase1 { @BeforeGroups(groups = { "smoketest" }) public void setup() { System.out.println("smoketest setup"); } @AfterGroups(groups = { "smoketest" }) public void teardown() { System.out.println("smoketest teardown"); } @Test public void f1() { System.out.println("MyCase1 f1"); assertEquals("a","b"); } @Test public void f2() { System.out.println("MyCase1 f2"); assertEquals("a","a"); } }代码执行如下:可以看到@BeforeGroups和@AfterGroups在组smoketest
的运行前后分别执行。香港云服务器
很赞哦!(211)
上一篇: 报告:数据中心物理基础设施销售飙升
相关文章
- 解读第三代全新AMD EPYC(霄龙)处理器:3D V-Cache技术打造极致算力,赋能数据中心未来发展
- 把ElasticSearch当成是NoSQL数据库
- MySQL 存储过程中的只读语句超时怎么办?
- 「Kafka技术」Apache Kafka中的事务
- 2022 昇腾 AI 创新大赛总决赛落下帷幕,重磅嘉宾共话AI产业发展新蓝图
- 从MySQL 5.1升级到MariaDB 5.5.x
- 教妹子学 Go 并发原语:啥是 Semaphore ?
- 「实战」用原生的 Intersection Observer API 实现 Lazy Loading
- 循序渐进讲解负载均衡vivoGateway(VGW)
- 从AlloyDb的架构能学到些什么