TestNG是一个测试框架,其灵感来自JUnit和NUnit,但引入了一些新的功能,使其功能更强大,使用更方便。
TestNG是一个开源自动化测试框架;TestNG表示下一代(Next Generation的首字母)。 TestNG类似于JUnit(特别是JUnit 4),但它不是JUnit框架的扩展。它的灵感来源于JUnit。它的目的是优于JUnit,尤其是在用于测试集成多类时。 TestNG的创始人是Cedric Beust(塞德里克·博伊斯特)。
TestNG消除了大部分的旧框架的限制,使开发人员能够编写更加灵活和强大的测试。 因为它在很大程度上借鉴了Java注解(JDK5.0引入的)来定义测试,它也可以显示如何使用这个新功能在真实的Java语言生产环境中。
添加依赖
通过继承AbstractTestNGSpringContextTests和添加@ SpringBootTest注解完成TestNG和springboot的无缝结合
@Slf4j |
使用注解@Test来标明改方法是单元测试方法
/** |
使用和Junit使用方法一样区别在于使用类不同
批量测试数据怎么生成?Junit循环?TestNG为我们提供了invocationCount熟悉,执行次数控制,使用了TestNG后再也不用操心如果生成大量数据。代码:
@org.testng.annotations.Test(invocationCount = 5) |
看看执行结果吧,执行5次完美解决批量生成数据的难题,附带每次单测执行时间,是不是很easy
我们在线上会遇到各种并发导致程序逻辑问题,如何在写完代码就验证代码在并发出现是否有问题?找性能测试,需要提供接口文档?NO,我们自己也可以,我们只需要利用testNg的threadPoolSize,invocationCount配置并发数量和调用次数即可完成,代码:
@org.testng.annotations.Test(threadPoolSize = 2,invocationCount = 5) |
测试用例执行后结果如下:线程thread_id_33,thread_id_34,2个线程执行5次,开发在写完一个接口即可完成并发测试
流程测试怎么测?N步分别执行N此单元测试?那开发测试一个流程需要多少时间。这个时候集成测试就闲的尤为重要,让测试同学写Jmeter测试脚本进行集成测试,可是功能很简单不想麻烦测试同学怎么办?通过TestNG的dependsOnMethods依赖测试进行业务流程的集成测试,如下图, test2依赖test0和test1
在我们执行test2的时候TestNG会把test0和test1先执行,运行结果如下:瞬间感觉我自己也可以做集成测试了
集成测试的使用场景
看看TestNG在购买图书的使用场景,就会发现TestNG对开发人员很友好啊!
项目的主流程如下:
那我们要进行集成测试,完成索要发票的结果,只需要在最后一个方法上添加dependsOnMethods={ "","",""}来完成前面的一系列创建图书室、新增图书、新增会员等单测接口依赖即可,具体代码如下
运行结果如下:
流程代码逻辑有变化怎么办?只需要修改对应步骤的单元逻辑即可完成全流程的集成测试
还有其他:dataProvider提供数据等等