自动化测试用例设计的总体策略我们在做自动化测试的时候,需要对用例进行管理。比较常用的方案是(以java为例)一个项目对应一个产品;一个包对应产品中的一个模块;一个类对应模块中的一个场景;一个测试方法对应场景中的一个测试点;最后,通过套件,定义要被组织执行的类。如下图,TestNGDemo定义为一个产品,包com.my.case1、com.my.case2、com.my.case3代表产品中的3个模块,MyCase1、MyCase2等6个类代表6个测试场景。我们可以在类中设计具体的测试点,如下图,MyCase5类中的方法f9和f10代表两个测试点(基于Testng)TestNg中的用例组织Testng通过配置文件来管理测试用例,具体rules如下:一个suite可以定义要执行的测试,可以包含多个测试;一个测试可以定义要执行的包和类(包和类可以同时定义,两者是并列关系)一个类可以设置要执行的方法,具体组织形式如下:Suite中定义了两个测试:Simpletest和advancedtest;要执行的包在Simpletest中定义:com.my.case1和类:com.my.case2.MyCase4;在类MyCase4中定义了要执行的方法f7和不执行的方法f8;advancedtest中定义了要执行的类:com.my.case3.MyCase5运行结果如下:com.my.case1包下的类MyCase1和类MyCase2中的所有类方法全部运行,f1,f2,f3和f4;仅运行类MyCase4中的方法f7;MyCase5类中的所有方法都已运行,f9和f10。TestNG中分组应用的基础使用TestNG,可以对复杂的测试方法进行分组,进而对测试用例进行分类。可以通过@Test(groups={"group1","group2"});来识别。分组可以作用于特定的类和方法,作用于一个类意味着该类中的所有方法都属于该组;而effect在方法上,表示只有方法属于该组。具体代码如下:MyCase1类有smoketest标签@Test(groups={"smoketest"})publicclassMyCase1{@Testpublicvoidf1(){System.out.println("MyCase1f1");assertEquals("a","b");}@Testpublicvoidf2(){System.out.println("MyCase1f2");assertEquals("a","a");}}MyCase2类只有带有smoketest标签的f3方法publicclassMyCase2{@Test(groups={"smoketest"})publicvoidf3(){System.out.println("MyCase2f3");assertEquals("a","b");}@Testpublicvoidf4(){System.out.println("MyCase2f4");assertEquals("a","a");}}MyCase3类有性能测试标签@Test(groups={"performancetest"})publicclassMyCase3{@Testpublicvoidf5(){System.out.println("MyCase3f5");assertEquals("a","b");}@Testpublicvoidf6(){System.out.println("MyCase3f6");assertEquals("a","a");}}MyCase4类只有带有性能测试标签的f8方法publicclassMyCase4{@Testpublicvoidf7(){系统em.out.println("MyCase4f7");assertEquals("a","b");}@Test(groups={"performancetest"})publicvoidf8(){System.out.println("MyCase4f8");assertEquals("a","a");}}MyCase5类有安全测试和性能测试标签publicclassMyCase5{@Test(groups={"securitytest","performancetest"})publicvoidf9(){System.out.println("MyCase5f9");assertEquals("a","b");}@Testpublicvoidf10(){System.out.println("MyCase5f10");assertEquals("a","a");}}MyCase6类有安全测试标签@测试(groups={"securitytest"})publicclassMyCase6{@Testpublicvoidf11(){System.out.println("MyCase6f11");assertEquals("a","b");}@Testpublicvoidf12(){System.out.println("MyCase6f12");assertEquals("a","a");}}设置配置文件,如下图:define标签部分定义了需要的分组分类,可以省略,但个人建议收下。使用define可以清楚的看到已有的组结构;run标签列出了需要运行的组信息,我们可以通过通过include和exclude设置需要执行的组和不需要执行的组。方法很简单,如下图:
