章节十六、3-TestNG方法和类注解

一、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中才能运行。

如果有不明白的小伙伴可以加群“555191854”问我,群里都是软件行业的小伙伴相互一起学习。

内容具有连惯性,未标注的地方可以看前面的博客,这是一整套关于ava+selenium自动化的内容,从java基础开始。

欢迎关注,转载请注明来源。

原文地址:https://www.cnblogs.com/luohuasheng/p/11384564.html

时间: 2024-09-29 02:33:21

章节十六、3-TestNG方法和类注解的相关文章

(二十六)类加载机制和类的加载、连接(验证、准备、解析)和初始化

一.概念 在代码编译后,就会生成JVM(Java虚拟机)能够识别的二进制字节流文件(*.class).而JVM把Class文件中的类描述数据从文件加载到内存,并对数据进行校验.转换解析.初始化,使这些数据最终成为可以被JVM直接使用的Java类型,这个说来简单但实际复杂的过程叫做JVM的类加载机制. Class文件中的"类"从加载到JVM内存中,到卸载出内存过程有七个生命周期阶段.类加载机制包括了前五个阶段. 如下图所示: 其中,加载.验证.准备.初始化.卸载的开始顺序是确定的,注意,

章节十六、2-TestNG注解和断言

一.TestNG注解的testcease不是自上而下运行的,而是按照方法名的字母排序或数字的大小顺序运行的. 二.断言:判断返回的结果与我们的预期结果是否一致. 1.Assert.assertTrue(); 2.Assert.assertFalse(); 注意: Assert true语句如果实际输出时false,测试不通过,并停止执行测试. Assert.assertFalse()与Assert.assertTure()正好相反,也就是说,如果您希望某个元素在页面上不存在是测试继续执行,就可以

章节十六、6-xml参数化and并行case

一.读取xml文件中参数 1.案例演示--->创建一个需要读取数据的类 1 package testclasses; 2 3 import org.testng.annotations.Test; 4 5 import org.testng.annotations.BeforeClass; 6 import org.testng.annotations.Parameters; 7 import org.testng.annotations.AfterClass; 8 9 public class

Java并发(十六):并发工具类——Exchanger

Exchanger(交换者)是一个用于线程间协作的工具类.Exchanger用于进行线程间的数据交换.它提供一个同步点,在这个同步点两个线程可以交换彼此的数据.这两个线程通过exchange方法交换数据, 如果第一个线程先执行exchange方法,它会一直等待第二个线程也执行exchange,当两个线程都到达同步点时,这两个线程就可以交换数据,将本线程生产出来的数据传递给对方. 举例 class ExchangerTest { static class Producer implements R

Objective-C(十六、内存管理,自动释放池,ARC,强指针,弱指针,方法族)——iOS开发基础

结合之前的学习笔记以及参考<Objective-C编程全解(第三版)>,对Objective-C知识点进行梳理总结.知识点一直在变,只是作为参考,以苹果官方文档为准~ 十六.内存管理相关知识(二) 1.autorelease,自动释放机制 - (instancetype)autorelease; (1)自动释放池的创建 iOS5.0之前 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; //进行一系列操作 //此处不可以使用

[Effective Java 读书笔记] 第三章类和接口 第十六条

第十六条 复合优先于继承 如果不确定B和A的关系是,is-a的关系,B确实也是A,那么久不应该使用B继承A,否则会暴露实现细节, 你的实现都会限制在原始的实现上. 书中举的第一个例子,实现了一个类extends HashSet类,因为缺少对HashSet类的addAll方法的理解(addAll会重复调用add方法),导致多统计了一倍的调用次数,这就是自己的实现限制在父类的实现上. 同时书中还有一个说明,如果超类在后续的版本中增加了一个新的方法, 正好和你的类里新增的方法签名一致(参数列表和函数名

【WPF学习】第二十六章 Application类——应用程序的生命周期

原文:[WPF学习]第二十六章 Application类--应用程序的生命周期 在WPF中,应用程序会经历简单的生命周期.在应用程序启动后,将立即创建应用程序对象,在应用程序运行时触发各种应用程序事件,你可以选择监视其中的某些事件.最后,当释放应用程序对象时,应用程序将结束. 一.创建Application对象 使用Application类的最简单方式是手动创建它.下面的示例演示了最小的程序:在应用程序入口(Main()方法)处创建名为MainWindow的窗口,并启动一个新的应用程序: 在本质

爪哇国新游记之十六----泛型单链表类

/** * 单链表节点类 * @param <T> */ class Node<T extends Object>{ protected T value; protected Node next; } /** * 单链表类 * @param <T> */ public class ChainList<T extends Object>{ private Node<T> first; public void addTail(T t){ Node&l

Swift - 二进制,八进制,十六机制的表示方法

当前位置: 首页 > 编程社区 > Swift > Swift - 二进制,八进制,十六机制的表示方法 Swift - 二进制,八进制,十六机制的表示方法 2015-01-23 14:47 发布:yuhang 浏览:181 整数各种进制的字面量如下: 十进制数,没有前缀 二进制数,前缀是0b 八进制数,前缀是0o 十六进制数,前缀是0x 1 2 3 4 let decimalInteger = 17 let binaryInteger = 0b10001       // 二进制的17