单元测试框架-testNG

Posted ling-xiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单元测试框架-testNG相关的知识,希望对你有一定的参考价值。

测试人员一般用TestNG来写自动化测试,开发人员一般用JUnit写单元测试

单元测试关注代码的实现逻辑,例如一个if 分支或一个for循环或者某个功能函数

主要问题

  1. 项目=src+库
  2. unable to launch:缺少main()方法  
  3. cannot be resolved to a type:没有导入相应的库

  4. 导入库:项目右键 -> Build Path -> Configure Build Path -> Libraries -> Add Library ->XXX-> apply and close

安装使用

  • JDK,Eclipse--在eclipse中安装testNG--新建project-新建other(testaNG class)

注解-@

  • 对程序元素(类,方法,变量等)进行说明,提供给框架使用

  • launch-发动;Suite-一套;Test-测试方法;Groups-组;Provider-供应者   

  • 分类

  1. Suite-在某个测试套件测试执行之前/之后执行
  2. Class-在某个类的所有方法执行之前/之后
  3. Test-在某个测试的所有测试方法运行之前/之后
  4. groups--某个组的所有测试方法执行之前/之后
  5. Method--在某个测试方法之前/之后--------执行完测试用例后要重置数据才能执行第二条用例时可用之前
  6. @test--标志一个类或者方法作为测试的一部分
  7. @parameters--介绍如何将参数传递给@Test方法
  8. @listeners--定义一个测试类的监听器
  9. @dateprovider--提供数据的一个测试方法,注解的方法必须返回一个Object[] []

基本步骤:

  • 编写测试的业务逻辑代码,并在相应代码中插入TestNG的annotation。
  • 将测试信息配置到testng.xml文件中
  • 运行TestNG,测试报告位于 "test-output" 目录下

suite :代表一个测试套件,它可以包含一个或多个测试

test:代表一个测试,可以包含一个或多个TestNG测试类

class:代表一个类,至少一个TestNG的注解,也可以包含一个或多个测试方法

groups:用来表明测试用例的分组,有利于针对一类的测试用例进行专门的测试

如何执行测试

  1. 直接执行--Run As ->TestNG Test

  2. textng.xml

      • 在同包下新建xml文件,填入一些标签,其中class name=测试的包名.类名;
      • 按顺序执行:test标签中preserve-order="true",method标签中的内容按顺序执行
      • 12

异常测试:期望某些代码抛出异常,通过@Test(expectedExceptions=...)添加

忽略测试:用例没写好,修改注解为@Test(enabled=false),@Test不能改

超时测试:常用于性能测试,超过指定的毫秒数就标记为失败

分组测试:xml中使用<group>标签;class中是通过@test(groups="group1","其它名字")分组

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <suite name="Suite" parallel="false">
 3   <test name="Test">
 4     <groups>
 5       <incloud name="组名1"></incloud>//先运行组名1,再运行group2
 6       <incloud name="group2"></incloud>
 7     </groups>
 8     <classes>
 9       <class name="包名.类名"/>
10       <class name="com.demo.test.testng.TestCase1"/>
11     </classes>
12   </test> 
13 </suite> 

<suite>标签是testng.xml的根标记,描述了一个测试套件,可以有几个<test>

verbose:日志描述级别,10最详细

依赖测试:以特定顺序调用测试用例中的方法,或者希望在方法之间共享一些数据和状态;添加注解@Test(dependsOnMethods="依赖的方法名");先运行被依赖的。

参数化测试:使用不同的值一次又一次地运行相同的测试

      textng.xml传递参数:先在class中多添加个注解@Parameters("参数1", "参数2")   //使代码和测试数据分离,方便维护

                再在 <parameter name="参数1" value="1011111" /> 赋值,运行xml

      @DataProvider提供比较复杂的参数:

                返回的必然是Object[][];

                传参的类型,个数必须要一致

    @DataProvider(name = "参数")
    public Object[][] provideData() 

        return new Object[][]   10, 20 ,  100, 110 ,  200, 210  ;
    
    
    @Test(dataProvider = "参数")
    public void TestNgLearn1(int param1, int param2) 
        System.out.println("this is TestNG test case1, and param1 is:"+param1+"; param2 is:"+param2);
        Assert.assertFalse(false);
    

 属性介绍

  • name:必须有,体现在报告中
  • verbose:报告的详细程度,从0开始到10,默认是1
  • parallel:指代运行方式,默认是串行-单线程,为none
  • 并行方式:
      • methods:方法层级,若为此值,则该suite下所有的测试方法都将进行多线程
      • tests:每个<test>标签都将处于一个单独的线程中
      • classes:TestNG会将该suite下每个class都将在单独的线程中运行
      • instances:实例级别,即TestNG同一实例中的所有方法将在同一线程中运行
  • thread-count:用于指定线程数
  • time-out:指定超时时间
  • preserve-order:如果为true,则用例执行会按照在xml中的顺序执行,否则会乱序执行,不添加此属性的话默认是按顺序执行的;
  •  

以上是关于单元测试框架-testNG的主要内容,如果未能解决你的问题,请参考以下文章

Java盲点攻克「TestNG专题」摒弃JUnit单元测试,带你学会使用TestNG测试框架(上篇)

java—TestNG单元测试框架

Java盲点攻克「TestNG专题」摒弃JUnit单元测试,带你学会使用TestNG测试框架(下篇)

Eclipse中怎么安装TestNG单元测试框架

TestNG单元测试

Java技术指南「TestNG专题」单元测试框架之TestNG使用教程指南(下)