开发必备测试利器TestNG

开发必备测试利器TestNG

TestNG是什么

TestNG是一个测试框架,其灵感来自JUnit和NUnit,但引入了一些新的功能,使其功能更强大,使用更方便。

TestNG是一个开源自动化测试框架;TestNG表示下一代(Next Generation的首字母)。 TestNG类似于JUnit(特别是JUnit 4),但它不是JUnit框架的扩展。它的灵感来源于JUnit。它的目的是优于JUnit,尤其是在用于测试集成多类时。 TestNG的创始人是Cedric Beust(塞德里克·博伊斯特)。

TestNG消除了大部分的旧框架的限制,使开发人员能够编写更加灵活和强大的测试。 因为它在很大程度上借鉴了Java注解(JDK5.0引入的)来定义测试,它也可以显示如何使用这个新功能在真实的Java语言生产环境中。

TestNG的特点

  1. 注解
  2. TestNG使用Java和面向对象的功能
  3. 支持综合类测试(例如,默认情况下,不用创建一个新的测试每个测试方法的类的实例)
  4. 独立的编译时测试代码和运行时配置/数据信息
  5. 灵活的运行时配置
  6. 主要介绍“测试组”。当编译测试,只要要求TestNG运行所有的“前端”的测试,或“快”,“慢”,“数据库”等
  7. 支持依赖测试方法,并行测试,负载测试,局部故障
  8. 灵活的插件API

 

TestNG和Junit对比

 

TestNG的使用

添加依赖

<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>6.14.3</version>
</dependency>

 

TestNG和springboot的结合

通过继承AbstractTestNGSpringContextTests和添加@ SpringBootTest注解完成TestNG和springboot的无缝结合

@Slf4j
@SpringBootTest(classes = BootWebApplication.class)
public class CreateBookTestNg extends AbstractTestNGSpringContextTests {
}

TestNG测试用例

单元测试

使用注解@Test来标明改方法是单元测试方法

/**
 * 创建图书
 */
@org.testng.annotations.Test
public void createBookTest(){
}

使用和Junit使用方法一样区别在于使用类不同

批量测试

批量测试数据怎么生成?Junit循环?TestNG为我们提供了invocationCount熟悉,执行次数控制,使用了TestNG后再也不用操心如果生成大量数据。代码:

@org.testng.annotations.Test(invocationCount = 5)
public void createBooKTest() throws InterruptedException {
   System.out.println(a);
   a++;
}

看看执行结果吧,执行5次完美解决批量生成数据的难题,附带每次单测执行时间,是不是很easy

 

并发测试

我们在线上会遇到各种并发导致程序逻辑问题,如何在写完代码就验证代码在并发出现是否有问题?找性能测试,需要提供接口文档?NO,我们自己也可以,我们只需要利用testNg的threadPoolSize,invocationCount配置并发数量和调用次数即可完成,代码:

 

@org.testng.annotations.Test(threadPoolSize = 2,invocationCount = 5)
public void createBookTest() throws InterruptedException {
   System.out.println("thread_id_"+Thread.currentThread().getId()+":"+a);
   a++;
}

测试用例执行后结果如下:线程thread_id_33,thread_id_34,2个线程执行5次,开发在写完一个接口即可完成并发测试

 

集成测试

流程测试怎么测?N步分别执行N此单元测试?那开发测试一个流程需要多少时间。这个时候集成测试就闲的尤为重要,让测试同学写Jmeter测试脚本进行集成测试,可是功能很简单不想麻烦测试同学怎么办?通过TestNG的dependsOnMethods依赖测试进行业务流程的集成测试,如下图, test2依赖test0和test1

 

在我们执行test2的时候TestNG会把test0和test1先执行,运行结果如下:瞬间感觉我自己也可以做集成测试了

 

集成测试的使用场景

看看TestNG在购买图书的使用场景,就会发现TestNG对开发人员很友好啊!

项目的主流程如下:

 

那我们要进行集成测试,完成索要发票的结果,只需要在最后一个方法上添加dependsOnMethods={ "","",""}来完成前面的一系列创建图书室、新增图书、新增会员等单测接口依赖即可,具体代码如下

 

运行结果如下:

 

流程代码逻辑有变化怎么办?只需要修改对应步骤的单元逻辑即可完成全流程的集成测试

 

还有其他:dataProvider提供数据等等

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章