一、Test Suite(测试套件)
我们通常认为一个testcase就是一个测试方法,但是会有很多的testcase,所以我们不可能把所有的testcase放到同一个测试类中,假如需要测试的页面有10个,我们需要创建不同的类来测试这10个页面的具体功能,测试具体功能的测试用例会放到具体的测试类中,把这些所有的测试类组合起来就成了Test Suite。可以根据我们的测试目的,选择一些类来组成Test Suite。可以选择一些基本功能的测试类,组成冒烟测试的测试类,冒烟测试可以快速的检验软件的基本功能,也可以选择一些测试类组成回归测试的test suite。
二、Test Suite案例演示----》如何一次运行多个测试类
1、首先新建两个testcase
1 package testclasses; 2 3 import org.testng.annotations.Test; 4 import org.testng.annotations.BeforeMethod; 5 import org.testng.annotations.AfterClass; 6 import org.testng.annotations.AfterMethod; 7 import org.testng.annotations.BeforeClass; 8 9 public class TestNG_TestClass1 { 10 11 @BeforeClass 12 public void beforeClass() { 13 System.out.println("\nClass1-->beforeMethod在类里所有的方法运行前跑"); 14 } 15 16 @AfterClass 17 public void afterClass() { 18 System.out.println("\nClass1-->afterClass在类里所有的方法运行后跑\n"); 19 } 20 21 @BeforeMethod 22 public void beforeMethod() { 23 System.out.println("\nClass1-->BeforeMethod每个测试方法运行前跑"); 24 } 25 26 @AfterMethod 27 public void afterMethod() { 28 System.out.println("\nClass1-->afterMethod每个测试方法运行后跑"); 29 } 30 31 @Test 32 public void test1() { 33 System.out.println("\nClass1-->test1测试方法"); 34 } 35 36 @Test 37 public void test2() { 38 System.out.println("\nClass1-->test2测试方法"); 39 } 40 }
1 package testclasses; 2 3 import org.testng.annotations.Test; 4 import org.testng.annotations.BeforeMethod; 5 import org.testng.annotations.AfterMethod; 6 import org.testng.annotations.BeforeClass; 7 import org.testng.annotations.AfterClass; 8 9 public class TestNG_TestClass2 { 10 11 @BeforeClass 12 public void beforeClass() { 13 System.out.println("\nClass2-->beforeMethod在类里所有的方法运行前跑"); 14 } 15 16 @AfterClass 17 public void afterClass() { 18 System.out.println("\nClass2-->afterClass在类里所有的方法运行后跑\n"); 19 } 20 21 @BeforeMethod 22 public void beforeMethod() { 23 System.out.println("\nClass2-->BeforeMethod每个测试方法运行前跑"); 24 } 25 26 @AfterMethod 27 public void afterMethod() { 28 System.out.println("\nClass2-->afterMethod每个测试方法运行后跑"); 29 } 30 31 @Test 32 public void test1() { 33 System.out.println("\nClass2-->test1测试方法"); 34 } 35 36 @Test 37 public void test2() { 38 System.out.println("\nClass2-->test2测试方法"); 39 } 40 }
2、新建一个xml文件
xml是标记型语言,是一种简单的数据存储语言,用一系列简单的标记来描述数据,把数据放在标签中。
<!-- 没有此行配置运行时会报错 -->
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<!-- name中的值表示命名,可随意命名 -->
<suite name="Regression TestSuite">
<!-- name中的值表示命名,可随意命名 -->
<test name="Application Test">
<!-- name中的值为需要测试的具体类名,格式:包名.类名 -->
<classes>
<class name="testclasses.TestNG_TestClass1"></class>
<class name="testclasses.TestNG_TestClass2"></class>
</classes>
</test>
</suite>
3、运行结果成功:
从运行结果中可以看出,当我们在配置完xml文件后,直接运行xml文件,2个testcase就能够一起运行成功了
三、@BeforeSuite和@AfterSuite
@BeforeSuite:表示在test suite中的所有测试类在执行前就先运行带有该注解方法中的代码。
@AfterSuite:表示在test suite中的所有测试类执行完成后再运行带有该注解方法中的代码。
1、新建一个带有@BeforeSuite和@AfterSuite注解的类
1 package base; 2 3 import org.testng.annotations.AfterClass; 4 import org.testng.annotations.AfterSuite; 5 import org.testng.annotations.BeforeClass; 6 import org.testng.annotations.BeforeSuite; 7 8 public class BaseTestSuite { 9 10 @BeforeClass 11 public void beforeClasss() { 12 System.out.println("\nBaseTestSuite-->beforeClass在每个测试类运行前跑"); 13 } 14 15 @AfterClass 16 public void afterClasss() { 17 System.out.println("\nAfterClass-->afterClass在每个测试类运行完成后跑\n"); 18 } 19 20 @BeforeSuite 21 public void beforeSuite() { 22 System.out.println("\nBeforeSuite-->beforeSuite在每个test suite运行前跑"); 23 } 24 25 @AfterSuite 26 public void afterSuite() { 27 System.out.println("\nBeforeSuite-->beforeSuite在每个test suite运行完成后跑\n"); 28 } 29 }
2、让test suite中的TestNG_TestClass1类和TestNG_TestClass2类继承新建的类BaseTestSuite 。
3、运行xml配置文件
<!-- 没有此行配置运行时会报错 --> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > <!-- name中的值表示命名,可随意命名 --> <suite name="Regression TestSuite"> <!-- name中的值表示命名,可随意命名 --> <test name="Application Test"> <!-- name中的值为需要测试的具体类名,格式:包名.类名 --> <classes> <class name="regressionsuite.TestNG_TestClass1"></class> <class name="regressionsuite.TestNG_TestClass2"></class> </classes> </test> </suite>
4、运行结果
从运行结果中我们可以看出,@BeforeSuite和@AfterSuite分别只在所有的test suite运行前和介绍后运行一次
四、@BeforeTest和@AfterTest注解
@BeforeTest:使用这个注解的方法会在xml文件中的test标签中的每个test方法运行之前运行。
@AfterTest:使用这个注解的方法会在xml文件中的test标签中的每个test方法运行之后运行。
1 <!-- 没有此行配置运行时会报错 --> 2 <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > 3 <!-- name中的值表示命名,可随意命名 --> 4 <suite name="Regression TestSuite"> 5 <!-- name中的值表示命名,可随意命名 --> 6 <test name="Application Test"> 7 <!-- name中的值为需要测试的具体类名,格式:包名.类名 --> 8 <classes> 9 <class name="regressionsuite.TestNG_TestClass1"></class> 10 <class name="regressionsuite.TestNG_TestClass2"></class> 11 </classes> 12 </test> 13 14 <test name="Application Test"> 15 <!-- name中的值为需要测试的具体类名,格式:包名.类名 --> 16 <classes> 17 <class name="regressionsuite.TestNG_TestClass1"></class> 18 <class name="regressionsuite.TestNG_TestClass2"></class> 19 </classes> 20 </test> 21 </suite>
五、@BeforeClass和@AfterClass注解
@BeforeClass:使用这个注解的方法会在当前这个类的第一个test方法运行之前运行。
@AfterClass:使用这个注解的方法会在当前这个类的最后一个test方法运行之后运行。
六、@BeforeMethod和@AfterMethod注解
@BeforeMethod:使用这个注解的方法会在每个test方法运行之前运行。
@AfterMethod:使用这个注解的方法会在每个test方法运行之后运行。
注:带@BeforeTest和@AfterTest、@BeforeSuite和@AfterSuite注解的方法不能在类中直接运行(直接运行会报如下图所示的错误信息),必须在xml中才能运行。
如果有不明白的小伙伴可以私信问我,目前也建了qq、微信群,都是软件行业的小伙伴相互一起学习。
内容具有连惯性,未标注的地方可以看前面的博客,这是一整套关于ava+selenium自动化的内容,从java基础开始。
欢迎关注,转载请注明来源。