干货!详解自动化测试用例设计与管理的通用策略(基于TestNg)

自动化测试的用例设计通用策略

在这里插入图片描述

我们在做自动化测试时,是需要对用例进行管理的,比较常用的方案是(以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
在这里插入图片描述

的运行前后分别执行。

最后|资源分享

下面这些是我的收集和整理的资料,对于开始学习【软件测试】或是技能进阶的朋友来说,绝对是最全面的教程仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你
在这里插入图片描述

关注【程序媛木子】微信公众号测试资源将免费获取,技术交流群(644956177)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值