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

开发 前端 自动化
我们在做自动化测试时,是需要对用例进行管理的,比较常用的方案是(以java为例)。

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

我们在做自动化测试时,是需要对用例进行管理的,比较常用的方案是(以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" })进行标识;

分组可以作用在具体的类和方法上,作用在类上表示类里的所有方法都属于该分组;而作用在方法上则表示只有该方法属于该分组。

具体代码如下:

  1. MyCase1类具备smoketest标签 
  2. @Test(groups = { "smoketest" }) 
  3. public class MyCase1 { 
  4.  @Test 
  5.  public void f1() { 
  6.      System.out.println("MyCase1 f1"); 
  7.      assertEquals("a","b"); 
  8.       } 
  9.   @Test 
  10.   public void f2() { 
  11.    System.out.println("MyCase1 f2"); 
  12.    assertEquals("a","a"); 
  13.  
  14. MyCase2类只有f3方法具备smoketest标签 
  15. public class MyCase2 { 
  16.  @Test(groups = { "smoketest" }) 
  17.  public void f3() { 
  18.      System.out.println("MyCase2 f3"); 
  19.      assertEquals("a","b"); 
  20.       } 
  21.   @Test 
  22.   public void f4() { 
  23.    System.out.println("MyCase2 f4"); 
  24.    assertEquals("a","a"); 
  25.  
  26. MyCase3类具备performancetest标签 
  27. @Test(groups = { "performancetest" }) 
  28. public class MyCase3 { 
  29.  @Test 
  30.  public void f5() { 
  31.      System.out.println("MyCase3 f5"); 
  32.      assertEquals("a","b"); 
  33.       } 
  34.   
  35.   @Test 
  36.   public void f6() { 
  37.    System.out.println("MyCase3 f6"); 
  38.    assertEquals("a","a"); 
  39.  
  40. MyCase4类只有f8方法具备performancetest标签 
  41. public class MyCase4 { 
  42.  @Test 
  43.  public void f7() { 
  44.      System.out.println("MyCase4 f7"); 
  45.      assertEquals("a","b"); 
  46.       } 
  47.   
  48.   @Test(groups = { "performancetest" }) 
  49.   public void f8() { 
  50.    System.out.println("MyCase4 f8"); 
  51.    assertEquals("a","a"); 
  52.  
  53. MyCase5类具备securitytest 和performancetest标签 
  54. public class MyCase5 { 
  55. @Test(groups = { "securitytest","performancetest" }) 
  56.  public void f9() { 
  57.      System.out.println("MyCase5 f9"); 
  58.      assertEquals("a","b"); 
  59.       } 
  60.   @Test 
  61.   public void f10() { 
  62.    System.out.println("MyCase5 f10"); 
  63.    assertEquals("a","a"); 
  64.  
  65. MyCase6类具备securitytest标签 
  66. @Test(groups = { "securitytest" }) 
  67. public class MyCase6 { 
  68.  @Test 
  69.  public void f11() { 
  70.      System.out.println("MyCase6 f11"); 
  71.      assertEquals("a","b"); 
  72.       } 
  73.   @Test 
  74.   public void f12() { 
  75.    System.out.println("MyCase6 f12"); 
  76.    assertEquals("a","a"); 

 设置配置文件,如下所示:

其中define标签部分定义了需要的组分类,该部分可以省略,但个人建议保留,使用define可以清晰的看到现有的group结构;

run标签带表了需要运行的group信息,我们可以通过include和exclude对需要执行的分组和不需要执行的分组进行设置,方法非常简单,如下所示:

  1. <run> 
  2.  
  3. <include name="group1" /> 
  4.  
  5. <exclude name="group2" /> 
  6.  
  7. </run> 

上图中通过include来设置运行securitytest组标识的用例。

运行结果如下:可以看到securitytest标签下的用例都运行了

@BeforeGroups和@AfterGroups的应用

@BeforeGroups注解的方法将在本组内任何测试方法执行前被执行一次,可用于执行初始化操作。类似的@AfterGroups 注解的方法将在本组内任何测试方法执行后被执行,可用于关闭资源。@Test(groups = { "smoketest" })

  1. public class MyCase1 { 
  2.  @BeforeGroups(groups = { "smoketest" }) 
  3.  public void setup() { 
  4.     System.out.println("smoketest setup"); 
  5.      
  6.  } 
  7.  @AfterGroups(groups = { "smoketest" }) 
  8.  public void teardown() { 
  9.     System.out.println("smoketest teardown"); 
  10.      
  11.  } 
  12.  @Test 
  13.  public void f1() { 
  14.      System.out.println("MyCase1 f1"); 
  15.      assertEquals("a","b"); 
  16.       } 
  17.   
  18.   @Test 
  19.   public void f2() { 
  20.    System.out.println("MyCase1 f2"); 
  21.    assertEquals("a","a"); 

 代码执行如下:可以看到@BeforeGroups和@AfterGroups在组smoketest

的运行前后分别执行。

 

责任编辑:姜华 来源: 今日头条
相关推荐

2011-09-01 10:05:24

PhoneGap应用程序测试

2022-01-14 11:51:00

测试工具自动化

2011-12-23 17:03:29

性能测试用例设计

2011-10-11 09:56:59

PhoneGapSelenium

2017-04-10 12:25:32

iOS自动化测试

2011-07-04 18:06:52

测试用例

2023-06-28 15:12:33

2011-06-03 16:58:03

测试用例

2024-09-29 15:32:13

自动化测试开发

2023-04-02 13:48:24

软件测试NLP自动化测试

2023-06-30 09:46:00

服务物理机自动化

2011-05-16 14:54:12

测试用例

2011-08-16 15:36:47

iPhone应用测试

2012-02-27 17:34:12

Facebook自动化

2017-12-24 21:00:10

自动化测试测试框架敏捷

2021-05-26 08:51:50

漏洞漏洞扫描符号执行

2019-04-02 09:00:00

机器人人工智能HMI设计

2022-02-17 10:37:16

自动化开发团队预测

2019-02-19 15:37:18

自动化测试数据

2022-12-26 12:30:28

接口测试
点赞
收藏

51CTO技术栈公众号