一.TestNG 是什么 ?java
- 脱胎于业界标杆的Junit,并超于Junit,主要缘由是因为当时的JUnit3版本不支持annotation,使用不够灵活。
- TestNG再也不须要test前缀的命名方式、支持数据驱动、用例分组等一系列特性彻底碾压Junit。
- JUnit也在不断的吸纳TestNG和其余的思想和技术,目前主要的功能已经基本都能支持。
- Annotation:
注解种类
Beforexxxx系列,在Test以前执行的动做。
Afterxxxx系列,在Test以后执行的动做。
DataProvider,数据驱动类。
Test,测试执行的主体。
Parameters,接收配置文件中同名参数到代码中使用。
注解使用
直接在任意方法上加@注解名,对方法名字、参数类型没有要求。
须要@Test方法做用域为public。
二.搭建TestNG环境数据库
- 新建Maven项目, 在pom文件中写入依赖。 就完成了环境的配置,就这么简单。

- PS:Intellij自带了TestNG插件,如使用的是Eclipse,需手动安装TestNG插件。
三.使用@Test作一次最简单的测试任务并发
- 直接上代码,只须要在须要执行的测试代码上加上@Test注释便可

- 执行时,只需在这个java文件上右键,选择Run Task3 便可。


四.加入断言,进行数据正确性校验ide

执行结果:单元测试

五.加入@BeforeTest和@AfterTest动做学习

执行结果:测试

六.再试试多种@BeforeXXX和@AfterXXX插件

执行结果:3d

七.参数化一组数据xml
- 以Object[][]的形式,让TestNG对一组数据进行测试,并校验。



八.再用一种方式参数化一组数据


执行结果:

九.使用数据库的数据做为一组参数

- 使用的SQL是:SELECT * FROM ServiceAPI_InfoRecords;

- 因为执行的数据是由SQL语句进行的筛选,因此另咱们的测试数据又变得更加灵活。
- 好比使用下面这句SQL语句: SELECT * FROM ServiceAPI_InfoRecords WHERE isTest=1。
- 执行结果和想象的同样,只会执行1和3
十.编写测试配置文件
- Testng.xml是一个以xml记录全部测试的文件。这个文件可以很容易地再一个文件中描述全部测试套件和它们的参数,能够将它签入到代码库中,或者经过电子邮件发送给同事。也能够很容易地提取测试的子集,或分红几种运行时配置。
- 如上面这个例子,它所作的就是执行Task10

十一.配置文件中使用参数传递
- 在配置文件中,使用parameter标签来完成参数传递动做

十二.作好测试方法的依赖关系
- 以下代码:doTest3依赖doTest2,doTest2又依赖doTest1。

- 因此当doTest2执行错误后,因为doTest3依赖doTest2,因此doTest3被忽略了。
十三.测试分组



十四.生成报告
- TestNG自己就自带了报告,一个是很丑,另外一个是使用了一些墙外的东西(你懂的),墙内打开报告页面至少得一分钟。
- 而后我选择使用的ReportNG。在一开始的PPT中,咱们已经把ReportNG的依赖添加完成了,因此这里只须要在*.xml 文件里增长报告的侦听就好了。

- 在代码中,很显然使用System.out.println();是没法将信息打印至报告中的。因此,须要TestNG的log打印方式:Reporter.log("XXXXXXXX")。
- 执行测试后,生成的报告是这样的:

十五:场景
当咱们有了这把利器以后,咱们能够用在不少场景上。好比:
- 开发进行单元测试
- 测试进行各类自动化测试
- WEB UI自动化测试(如 Selenium WebDriver)
- APP UI 自动化测试(如 Appium)
- 接口自动化测试
十六.测试用例结果有错误后。。。
- 确定是须要定位出错的缘由。
- 是真的出错了,仍是当时环境的不稳定之类的意外状况引发的?
- 因此咱们最常的作法是:把错误的用例再执行一遍,会自动生成testng-failed.xml,里面记录的就是执行失败的用例,可直接执行。
十七.其它
- 完成上述任务并能活用的话,在平常的测试工做中,使用用TestNG便没有什么太大的问题了。
- 固然,TestNG还有诸如“并发”、“扩展”等任务,待学习研究