当前位置 : 主页 > 网络安全 > 测试自动化 >

单元测试框架-testNG

来源:互联网 收集:自由互联 发布时间:2021-06-19
测试人员一般用TestNG来写自动化测试,开发人员一般用JUnit写单元测试 单元测试关注代码的实现逻辑,例如一个if 分支或一个for循环或者某个功能函数 主要问题 项目=src+库 unable to lau

测试人员一般用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)

注解[email protected]

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

  • 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:指代运行方式,默认是串行-单线程
  • 并行方式:
网友评论