TestNG是Java中的一个测试框架,是一个目前很流行实用的单元测试框架,有完善的用例管理模块,配合Maven能够很方便管理依赖第三方插件。使用TestNG可以做功能、接口、单元、集成的自动化测试,最常见的是结合selenium做功能自动化测试
一. 安装运行TestNG
Maven配置
在工程的pom.xml中需要添加如下依赖:
二、TestNG常用注解
注解 |
描述 |
@BeforeSuite |
被注释的方法将在所有测试运行前运行(相当于前置条件) |
@AfterSuite |
被注释的方法将在所有测试运行后运行比如关闭浏览器(使执行其他用例时处于初始状态) |
@BeforeTest |
被注释的方法将在测试运行前运行 |
@AfterTest |
被注释的方法将在测试运行后运行 |
@BeforeGroups |
被配置的方法将在列表中的gourp前运行。这个方法保证在第一个属于这些组的测试方法调用 前立即执行 |
@AfterGroups |
被配置的方法将在列表中的gourp后运行。这个方法保证在最后一个属于这些组的测试方法调 用后立即执行 |
@BeforeClass |
被注释的方法将在当前类的第一个测试方法调用前运行,且只执行一次,通常用来为后面测试方法的准备工作,如加载配置、进行数据库的连接等 |
@AfterClass |
被注释的方法将在当前类的所有测试方法调用后运行,注解修饰的方法(该方法要用static修饰)会在所有方法执行结束后执行一次,且也只执行一次,通常用来对资源进行释放,比如数据库连接的关闭等,无论测试用例里的其他方法有没有抛出异常,该方法最终都会被执行。 |
@BeforeMethod |
被注释的方法将在每一个测试方法调用前运行 |
@AfterMethod |
被注释的方法将在每一个测试方法调用后运行 |
@DataProvider |
标记一个方法用于为测试方法提供数据。 被注释的方法必须返回Object[][],其中每个Object[] 可以指派为这个测试方法的参数列表。从这个DataProvider接收数@Test方法需要使用一个和 当前注释相同名称的dataProvider名称 |
@Factory |
标记方法作为一个返回对象的工厂, 这些对象将被TestNG用于作为测试类。这个方法必须返回 Object[] |
@Listeners |
定义一个测试类的监听器 |
@Parameters |
描述如何传递参数给@Test方法 |
@Test |
标记一个类或方法作为测试的一部分 |
备注:
Before开头的注解一般用于初始化环境、 准备测试环境
after开头的注解一般用于执行测试的环境清理工作
DataProvider一般用作参数化用的, 属于数据驱动自动化(即不同的测试数据测试相同的测试逻辑)
Listeners 自定义日志或者监控一些testNG用例执行成功或者失败的时候做些特别的事情
三、TestNG常用断言
assertEqual ([String message], expected value, actual value) 断言两个值相等
byte, char or java.lang.Object. 第一个参数是一个可选的字符串消息;
assertTrue([String message], boolean condition) 断言一个条件为真;
assertFalse([String message],boolean condition) 断言一个条件为假;
assertNotNull([String message], java.lang.Object object) 断言一个对象不为空(null);
assertNull([String message], java.lang.Object object) 断言一个对象为空(null);
assertSame([String message], java.lang.Object expected, java.lang.Object actual) 断言两个对象引用相同的对象;
assertNotSame([String message], java.lang.Object unexpected, java.lang.Object actual) 断言两个对象不是引用同一个对象;
assertArrayEquals([String message], expectedArray, resultArray) 断言预期数组和结果数组相等
示例代码如下:
四、使用maven运行
需要在pom文件中,指明testng.xml文件的位置。
五、TestNG忽略测试
通过注解@Test(enabled = false)来将其忽略掉,此用例就不会运行了,示例代码如下:
六、TestNG超时测试
超时”表示如果单元测试花费的时间超过指定的毫秒数,那么TestNG将会中止它并将其标记为失败。示例代码如下:
七、分组测试
顾名思义,是将不同的用例分组,然后再testng.xml文件中配置信息,而执行相应组的用例,示例代码如下:
testng.xml文件配置如下:
八、自定义执行顺序测试
按照一定的顺序去执行测试方法, 通过priority属性去设 置,如下代码实现:
执行顺序为print1--->print2--->print3--->print4--->print5
还可以在testng.xml文件中设置,设置如下:
九、参数化测试
TestNG可以通过两种不同的方式将参数直接传递给测试方法:
下面分别介绍两种传参方式
1、使用textng.xml传送参数
范例代码如下:
xml配置:
2、使用@DataProvider传递参数
复杂参数一般使用@DataProvider传递,传参的类型必须要一致,且带有@DataProvider注解的函数返回的必然是Object[][]
示例代码如下: