TestNG
在测试工作中,测试框架是不可或缺的,前有Junit和Nunit框架,后有TestNG。TestNG不但吸取了Junit和Nunit框架的思想,而且创造了更强大的功能,它不但是单元测试框架,同时也是集成测试框架,它是优秀的自动化测试框架。TestNG突破了以前一些框架的限制,成为用途最广泛的测试框架之一,学习一下TestNG的强大之处。
IDEA配置TestNG相关的配置:
1、需要在IDEA中间新建一个maven工程,File-->New-->Project-->Maven,点击Next,输入工程名称,工程存放路径(工程名称不要有中文),如下图:

点击Finish按钮,弹出如下图:

2、IDEA编辑器怎么去配置TestNG的插件(之前其他的编辑工具eclipse先去官网下载testng插件,然后导入到开发工具里),idea编辑工具可以直接下载插件
IDEA编辑器配置TestNG的步骤:
1、File-->Settings-->Plugins,输入TestNG(不区分大小写),Install一下,点击Apply,点击OK即可,去Plugins里,输入一下TestNG,可以看到已经安装成功了,如下图:

勾上就变成Enabled状态,去掉√就变成Disabled
2、IDEA怎么创建testNG.xml,需要安装Create TestNG XML插件,否则无法正常创建testNG.xml,步骤和上面一样,只要勾上√就是Enabled状态,接下来在src目录,右键,能看到Create TestNG XML,如下图:

点击Create TestNG XML,如下图:

点击OK按钮,如果没有生成testng.xml文件,再点击一次,如果还是没有,刷新一下或重启IDEA,就能看到testng.xml文件,如下图:

3、通过maven中间的pom.xml,可以管理相关的依赖包,之前的编辑器是通过中央仓库下载相关依赖包,然后进行导入
怎么把testng.jar导入到我们项目中间来?
a、修改pom.xml的配置文件,需要访问testng的官网,https://testng.org/#_download,可以直接下载testng.jar,稍微了解一下
b、什么是中央仓库?
用来管理相关jar包的仓库,https://mvnrepository.com/artifact/org.testng/testng/6.14.3,根据需要选择对应版本的依赖包
c、选择6.14.3,testng.jar版本,如果选择最新的依赖包版本会存在兼容性问题
d、在中央仓库点击6.14.3这个版本,弹出如下代码:

pom.xml中间新增如下配置项:
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.14.2</version>
<scope>test</scope>
</dependency> 需要到中央仓库下载对应的版本
e、怎么把中央仓库的testng.jar下载到项目中间(本地),pom.xml新增的代码如下:

右键Run Maven按钮,先做clean操作,然后进行install,如果右键没有Run Maven按钮,通过下面的步骤解决
a、打开 IDEA 右侧边栏,找到 Maven 选项(如果没看到,点击侧边栏最下方的「≡」→ 勾选Maven),如下图:

b、展开你的项目名称,如下图:

c、展开Lifecycle(生命周期)目录,就能看到 clean、compile、package、install 等核心命令,如下图:

d、执行单个命令:右键clean → 选择Run Maven Build,即可执行清理,如下图:

右键 install → 选择Run Maven Build,执行打包并安装到本地仓库,如下图:

e、执行多个命令(如先 clean 再 install):按住 Ctrl 键,依次选中 clean 和 install → 右键 → 「Run Maven Build」,IDEA 会按顺序执行
install成功后,就会在C:\Users\Dell\.m2\repository\org\testng\testng\6.14.2路径下找到testng-6.14.2.jar(从中央仓库下载对应版本的jar包,导入项目中),如下图:

同时也会看到如下图:

删除目标文件夹C:\Users\Dell\.m2\repository\org\testng\testng\6.14.2,再执行clean和install操作,在testng目录下还是会生成6.14.2文件夹,里面会有testng-6.14.2.jar,同时在日志里看到如下图:

4、pom.xml配置testng.jar踩过的坑以及填坑注意事项
a、pom.xml配置存在多个不同版本的配置项
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.9.0</version>
<scope>test</scope>
</dependency>
把该配置项从pom.xml中间去掉,同时删除之前C:\Users\Dell\.m2\repository\org\testng\testng的jar包,然后重新Run Maven,clean、install,这样会把6.14.2这个jar从中央仓库导入
b、如果程序报java:程序包org.testng不存在,写方法的时候会给出提示,点击Add 'testng' to classpath就可以解决
c、当前项目中使用的testng依赖是7.7.0,版本改成6.14.3再试了一次,没有报错了
d、执行了install操作,就不需要执行deploy了
根据以上的操作testng.jar、pom.xml等准备工作已经配置好了
什么是testNG?
testNG是来源于Junit和Nunit,它受到Junit和Nunit的启发,Junit是单元测试框架,TestNG引入了一些新的功能,功能更加强大,使用更加方便;
testNG是一个开源的自动化测试框架,其中NG表示Next Generation(下一代),testNG和Junit非常相类似(Junit4),testNG设计是优于Junit,testNG采用的是测试集成类的方式,借鉴了Java Annotations(注解,JDK1.5以上的版本才有注解)
Junit单元测试(主要是开发人员对一些方法进行测试),单元测试是我们测试的最小颗粒
testNG自动化测试框架的特性功能:
1、支持注释方式,@Test
2、testNG面向对象特性,基于java语言开发的
3、支持测试集成类(不需要为每个测试方法创建一个新的测试实例),调用类中间的方法是必须先new一个对象,然后通过对象调用类的方法,testNG自动化测试框架可以不需要new对象,可以直接运行测试方法
4、testNG.xml配置我们想要运行的类、方法,排除我们不想运行的方法,进行灵活配置
5、支持多个方法并行进行测试
6、可以灵活调用API的插件
7、支持多线程的测试
testNG环境:
testNG是一个java的框架,因此我们计算机上面安装JDK1.8及以上版本即可
testNG的annotations的生命周期:
首先了解一下testng的annotations,常见的有以下:
@BeforeClass:该annotation在class激活之前执行
@BeforeMethod:该annotation会在每个执行的方法之前执行
@Test,该annotation是你要执行测试的方法
@AfterMethod,该annotation在每个测试方法执行之后运行
@AfterClass,该annotation会在所有测试方法之后运行

@BeforeSuite、@AfterSuite、@BeforeTest、@AfterTest、@BeforeGroups、@AfterGroups、@BeforeClass、@AfterClass、@BeforeMethod、@AfterMethod
TestNG自动化测试框架执行程序案例讲解之Test:
TestNG执行程序案例讲解:
1、@Test,后续我们测试方法、测试案例都需要通过该注释进行代码编写,不管有多少个@Test,都会去执行,只有通过案例才能更好的去理解这个关键词
首先src-->main-->java,右键java,New-->Package,输入包名com.testngtest,点击回车,右键包名,New-->JavaClass,输入TestNgExecutionOrder,点击回车,如下图:

在类里输入@Test,回车,没有出现这行代码import org.testng.annotations.Test;,而且输入@Test的时候也没有提示,通过如下两个步骤来解决:
a、检查依赖与作用域
从左侧 External Libraries 可以看到 TestNG 依赖已经存在(org.testng:testng:6.14.2),但你的测试类放在了 src/main/java 目录下,而 TestNG 依赖的 scope 是 test:pom.xml里<scope>test</scope>,test 作用域的依赖只在 src/test/java 目录下生效,在 src/main/java 中是不可见的,这也是 IDEA 无法识别 @Test 的原因之一。
建议:将测试类移动到 src/test/java 对应的包下(如 com.testngtest),这是 Maven 项目的标准结构
b、开启自动导入(避免下次再手动)
为了以后写 @Test 时自动带出包名,可以开启 IDEA 自动导入:
(1)、打开 File → Settings → Editor → General → Auto Import
(2)、勾选:
◦ Add unambiguous imports on the fly
◦ Optimize imports on the fly (for current project)
(3)、点击 Apply → OK
c、点击右侧的Maven,右键项目TestNGDemo,刷新一下
2、@Test 中间的方法不需要new对象调用该方法,可以直接在类中间运行,右键Run TestNgExecutionOrder即可,代码如下图:

运行成功,直接打印出in test case1,可以选中指定的方法运行,也可以选中类运行类中全部方法,在定义一个方法,代码如下图:

运行成功,直接打印出in test case1和in test case2,testNG方法名可以随意命名,不一定需要以test开头,把test去掉也能运行成功,Junit的方法必须是test_开头
TestNG自动化测试框架执行程序案例讲解BeforeMethod:
@BeforeMethod 每一个Test方法执行前都必须执行该方法
输入@BeforeMethod,回车就会增加一行代码,import org.testng.annotations.BeforeMethod;,代码如下图:

运行成功,打印如下图:

TestNG自动化测试框架执行程序案例讲解AfterMethod:
@AfterMethod 每一个Test方法执行后都必须执行该方法
输入@AfterMethod,回车就会增加一行代码,import org.testng.annotations.AfterMethod;,新增代码如下图:

运行成功,打印如下图:

TestNG自动化测试框架执行程序案例讲解BeforeClass:
@BeforeClass 这个注释的作用是当前类的第一个测试方法执行前运行一次,第一:它只会运行一次 第二:第一个Test方法前运行
输入@BeforeClass,回车就会增加一行代码,import org.testng.annotations.BeforeClass;,新增代码如下图:

运行成功,打印如下图:

TestNG自动化测试框架执行程序案例讲解AfterClass:
@AfterClass 这个注释的作用是当前类所有注释方法执行完成之后再执行该注释并且只执行一次,第一:该class所有注释的方法执行完成之后执行该注释里面的方法 第二:只会执行一次
输入@AfterClass,回车就会增加一行代码,import org.testng.annotations.*;,新增代码如下图:

运行成功,打印如下图:

TestNG自动化测试框架执行程序案例讲解BeforeTest:
@BeforeTest 这个注释的作用是在执行第一个@Test注释里面的方法之前,先去执行该@BeforeTest里面的方法,并且只会执行一次(适用于登录的场景,只登录一次)
输入@BeforeTest,回车就会增加一行代码,import org.testng.annotations.*;,新增代码如下图:

运行成功,打印如下图:

TestNG自动化测试框架执行程序案例讲解AfterTest:
@AfterTest 这个注释的作用是执行完所有@Test注释里面的方法之后,再执行@AfterTest里的方法,并且也只会执行一次
输入@AfterTest,回车就会增加一行代码,import org.testng.annotations.*;,新增代码如下图:

运行成功,打印如下图:

TestNG自动化测试框架执行程序案例讲解BeforeSuite:
测试方法都是基于测试套件@BeforeSuite,testng.xml,@BeforeSuite代表测试套件的注释,是最早去执行该注释中间的方法,只会执行一次
输入@BeforeSuite,回车就会增加一行代码,import org.testng.annotations.*;,新增代码如下图:

运行成功,打印如下图:

TestNG自动化测试框架执行程序案例讲解AfterSuite:
@AfterSuite,代表测试套件,是执行完所有方法之后再去执行该注释中间的方法,并且只会执行一次(用到的场景是资源的释放、关闭连接池)
输入@AfterSuite,回车就会增加一行代码,import org.testng.annotations.*;,新增代码如下图:

运行成功,打印如下图:

对注释里面方法程序运行顺序做一个简单的总结:
1、首先最早执行的是BeforeSuite,这个注释是最早执行的,并且只执行一次
2、最后执行的是AfterSuite,这个注释是最后执行的,并且只执行一次
3、BeforeTest、BeforeClass、AfterTest、AfterClass,只会执行一次
4、BeforeMethod、AfterMethod,每一个@Test方法前后都会去执行,会执行多次,有几个Test方法就执行几次
5、BeforeMethod方法是在执行测试用例方法前执行,AfterMethod是在方法执行后执行
浙公网安备 33010602011771号