TestNg是什么
TestNG是一个测试框架,其灵感来自JUnit和NUnit,但引入了一些新的功能,使其功能更强大,使用更方便。TestNG是一个开源自动化测试框架;TestNG表示下一代(Next Generation的首字母)。 TestNG类似于JUnit(特别是JUnit 4),但它不是JUnit框架的扩展。它的灵感来源于JUnit。它的目的是优于JUnit,尤其是在用于测试集成多类时。使用注解
的方式带来更便捷的测试编写
TestNg的特点
- 丰富注解,如@Test、@BeforeClass、@Factory、@DataProvider等。
- TestNG使用Java和面向对象的功能支持综合类测试(例如,默认情况下,不用创建一个新的测试每个测试方法的类的实例)
- 独立的编译时测试代码和运行时配置/数据信息,修改无需重新编译测试代码
- 灵活的运行时配置
- 主要介绍“测试组”。当编译测试,只要要求TestNG运行所有的“前端”的测试,或“快”,“慢”,“数据库”等
- 支持依赖测试方法,并行测试,负载测试,局部故障
- 灵活的插件API
- 支持多线程测试,通过Parallel属性设置并发测试
- 可以生成HTML格式的测试报告。对测试结果的描述更加详细,方便定位错误
TestNg能做什么
TestNg的基本注解
- 注解执行顺序
实战
pom配置
- 添加TestNg依赖
1 | <dependency> |
- 配置测试的插件maven-surefire-plugin,并指定xml路径
1 | <build> |
TestNg做API测试,整合RestTemplate做授权认证
- 增加http请求拦截器
1 | public class HttpClientAuthInterceptor implements ClientHttpRequestInterceptor { |
- 测试配置中注入restTemplate,先登录后,获取到token放入拦截器中
1 |
|
- 编写restTemplate请求
1 | //设置请求头 |
TestNg整合springboot
要在SpringBoot中使用TestNg需要继承AbstractTestNGSpringContextTests
,AbstractTestNGSpringContextTests在执行测试之前先注入spring的相关内容
1 | (classes = {CsnTestngApplication.class}, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) |
TestNg整合ReportNG
TestNG自带html格式的测试报告,可以集成到一些持续集成框架中,但是自带的测试报告内容太过简单,而ReportNG正是对TestNG测试报告进行增强的一个插件
- 添加ReportNG依赖
1 | <!-- 依赖reportNg--> |
- maven测试插件添加ReportNG配置
1 | <plugin> |
通过maven运行测试,生成测试报告路径为:/target/surefire-reports/html/index.html
testng.xml配置
1 |
|
执行测试
- maven
1 | mvn test |
TestNg自定义功能
TestNG支持在测试时附加自定义的listener, reporter, annotation transformer, method interceptor。默认会使用基本的listener生成HTML和XML报告。可以利用这些自定义结果报表
Listener实现org.testng.ITestListener接口,会在测试开始、通过、失败等时刻实时发送通知
Reporter实现org.testng.IReporter接口,在整个测试运行完毕之后才会发送通知,参数为对象列表,包含整个测试的执行结果状况