美文网首页Java和Python的主流测试框架测试开发那些事儿
干货!详解自动化测试用例设计与管理的通用策略(基于TestNg)

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

作者: 测试开发Kevin | 来源:发表于2021-05-14 09:35 被阅读0次

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

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

    一个project对应一个产品;

    一个package对应产品中的一个模块;

    一个class对应模块中的一个场景;

    一个测试方法对应场景中的一个测试点;

    最后,通过suite,定义组织要执行的class。

    如下图所示,TestNGDemo定义为一个产品、com.my.case1、com.my.case2和com.my.case3代表产品中的3个模块,而MyCase1、MyCase2等等6个类代表6个测试场景

    我们可以在类中设计具体的测试点,如下图所示,方法f9和f10代表两个测试点(基于Testng)

    TestNg中用例组织

    Testng通过配置文件来对测试用例进行管理,具体规则如下:

    一个suite里面可以定义要执行的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的运行前后分别执行。

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/ceofjltx.html