一、Test Suite(测试套件)

我们通常认为一个testcase就是一个测试方法,但是会有很多的testcase,所以我们不可能把所有的testcase放到同一个测试类中,假如需要测试的页面有10个,我们需要创建不同的类来测试这10个页面的具体功能,测试具体功能的测试用例会放到具体的测试类中,把这些所有的测试类组合起来就成了Test Suite。可以根据我们的测试目的,选择一些类来组成Test Suite。可以选择一些基本功能的测试类,组成冒烟测试的测试类,冒烟测试可以快速的检验软件的基本功能,也可以选择一些测试类组成回归测试的test suite。

二、Test Suite案例演示----》如何一次运行多个测试类

1、首先新建两个testcase

 package testclasses;

 import org.testng.annotations.Test;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass; public class TestNG_TestClass1 { @BeforeClass
public void beforeClass() {
System.out.println("\nClass1-->beforeMethod在类里所有的方法运行前跑");
} @AfterClass
public void afterClass() {
System.out.println("\nClass1-->afterClass在类里所有的方法运行后跑\n");
} @BeforeMethod
public void beforeMethod() {
System.out.println("\nClass1-->BeforeMethod每个测试方法运行前跑");
} @AfterMethod
public void afterMethod() {
System.out.println("\nClass1-->afterMethod每个测试方法运行后跑");
} @Test
public void test1() {
System.out.println("\nClass1-->test1测试方法");
} @Test
public void test2() {
System.out.println("\nClass1-->test2测试方法");
}
}
 package testclasses;

 import org.testng.annotations.Test;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.AfterClass; public class TestNG_TestClass2 { @BeforeClass
public void beforeClass() {
System.out.println("\nClass2-->beforeMethod在类里所有的方法运行前跑");
} @AfterClass
public void afterClass() {
System.out.println("\nClass2-->afterClass在类里所有的方法运行后跑\n");
} @BeforeMethod
public void beforeMethod() {
System.out.println("\nClass2-->BeforeMethod每个测试方法运行前跑");
} @AfterMethod
public void afterMethod() {
System.out.println("\nClass2-->afterMethod每个测试方法运行后跑");
} @Test
public void test1() {
System.out.println("\nClass2-->test1测试方法");
} @Test
public void test2() {
System.out.println("\nClass2-->test2测试方法");
}
}

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注解的类

 package base;

 import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeSuite; public class BaseTestSuite { @BeforeClass
public void beforeClasss() {
System.out.println("\nBaseTestSuite-->beforeClass在每个测试类运行前跑");
} @AfterClass
public void afterClasss() {
System.out.println("\nAfterClass-->afterClass在每个测试类运行完成后跑\n");
} @BeforeSuite
public void beforeSuite() {
System.out.println("\nBeforeSuite-->beforeSuite在每个test suite运行前跑");
} @AfterSuite
public void afterSuite() {
System.out.println("\nBeforeSuite-->beforeSuite在每个test suite运行完成后跑\n");
}
}

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方法运行之后运行。

 <!-- 没有此行配置运行时会报错 -->
<!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> <test name="Application Test">
<!-- name中的值为需要测试的具体类名,格式:包名.类名 -->
<classes>
<class name="regressionsuite.TestNG_TestClass1"></class>
<class name="regressionsuite.TestNG_TestClass2"></class>
</classes>
</test>
</suite>

五、@BeforeClass和@AfterClass注解

@BeforeClass:使用这个注解的方法会在当前这个类的第一个test方法运行之前运行。

@AfterClass:使用这个注解的方法会在当前这个类的最后一个test方法运行之后运行。

六、@BeforeMethod和@AfterMethod注解

@BeforeMethod:使用这个注解的方法会在每个test方法运行之前运行。

@AfterMethod:使用这个注解的方法会在每个test方法运行之后运行。

注:带@BeforeTest和@AfterTest、@BeforeSuite和@AfterSuite注解的方法不能在类中直接运行(直接运行会报如下图所示的错误信息),必须在xml中才能运行。

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

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

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

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

  1. PHP十六个魔术方法

    PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用. 魔术方法包括: __construct(),类的构造函数 __destruct ...

  2. 章节十六、4-TestNG高级功能--把测试方法分优先级、分组执行

    一. 把测试方法分优先级执行----->(priority=索引) 1.新建一个testng方法 package testclasses; import org.testng.annotatio ...

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

    一.TestNG注解的testcease不是自上而下运行的,而是按照方法名的字母排序或数字的大小顺序运行的. 二.断言:判断返回的结果与我们的预期结果是否一致. 1.Assert.assertTrue ...

  4. 章节十六、5-TestNG高级功能--Part2

    一.测试用例的依赖关系--->(dependsOnMethods = {"依赖方法名"}) 1.在实现自动化的过程中,有些测试用例必须在其它测试用例执行之后才能运行,两者之间 ...

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

    一.读取xml文件中参数 1.案例演示--->创建一个需要读取数据的类 package testclasses; import org.testng.annotations.Test; impo ...

  6. 章节十六、7-DataProviders

    一.当我们的同一个test有多套数据需要进行测试,那么我们就需要用到-->DataProviders package testclasses1; import org.testng.annota ...

  7. 章节十六、9-Listeners监听器

    一.IInokedMethodListener 1.实现一个类来监听testcase的运行情况. package listenerspackage; import org.testng.IInvoke ...

  8. Python之路(第四十六篇)多种方法实现python线程池(threadpool模块\multiprocessing.dummy模块\concurrent.futures模块)

    一.线程池 很久(python2.6)之前python没有官方的线程池模块,只有第三方的threadpool模块, 之后再python2.6加入了multiprocessing.dummy 作为可以使 ...

  9. PHP之十六个魔术方法

    1.__construct,__destruct__constuct构建对象的时被调用:__destruct明确销毁对象或脚本结束时被调用:2.__get,__set__set当给不可访问或不存在属性 ...

随机推荐

  1. 如何在vue中监听scroll,从而实现滑动加载更多

    首先需要明确3个定义: 文档高度:整个页面的高度 可视窗口高度:你看到的浏览器可视屏幕高度 滚动条滚动高度: 滚动条下滑过的高度 当 文档高度 = 可视窗口高度 + 滚动条高度  时,滚动条正好到底. ...

  2. textarea 绕过jq验证的方法,提交空值

    <textarea placeholder=" aria-required="true" aria-describedby="OtherNotes-err ...

  3. 个人永久性免费-Excel催化剂功能第102波-批量上传本地图片至网络图床(外网可访问)

    自我突破,在100+功能后,再做有质量的功能,非常不易,相对录制视频这些轻松活,还是按捺不住去写代码,此功能虽小,但功课也做了不少,希望对真正有需要的群体带来一些惊喜. 背景介绍 图床的使用,一般是写 ...

  4. 题解 P3811 【【模板】乘法逆元】

    P3811 [模板]乘法逆元 一个刚学数论的萌新,总结了一下这题的大部分做法 //一.费马小定理+快速幂 O(nlogn) 64分 #include<cstdio> using names ...

  5. BeautifulSoup库整理

    BeautifulSoup库 一.BeautifulSoup库的下载以及使用 1.下载 pip3 install beautifulsoup4 2.使用 improt bs4 二.BeautifulS ...

  6. Spark Week1 HomeWork

    package wikipedia import org.apache.spark.SparkConf import org.apache.spark.SparkContext import org. ...

  7. codemirror使用

    JS使用 使用bower下载 bower i codemirror 引入样式文件 <link rel="stylesheet" type="text/css&quo ...

  8. 如何在 Centos7 中使用阿里云的yum源

    如何在 Centos7 中使用阿里云的yum源 1. 备份原来的yum源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Ba ...

  9. rem的基准字体大小的设置

    1.移动端 UI 给的设计稿通常是640px.720px.750px的宽度,但是我们要做适配,兼容不同的终端,rem布局是比较常用的一种方式,比较关键的是确定根节点的字体大小. 这里以640px为例, ...

  10. GDB 基本用法

    1.编译文件时需要加上 -g 选项,并非是将源码嵌入可执行文件,只是加入源代码的信息.eg:gcc -g main.c -o main 2.直接按回车键会重复上一条命令 3.基本指令 help,可以查 ...