一、TestNG的优点

  1.1 漂亮的HTML格式测试报告

  1.2 支持并发测试

  1.3 参数化测试更简单

  1.4 支持输出日志

  1.5 支持更多功能的注解

二、编写TestNG测试用例的步骤

  2.1 使用 Eclipse生成TestNG的测试程序框架

  2.2 在生成的程序框架中编写测试代码逻辑

  2.3 根据测试代码逻辑,插入TestNG注解标签

  2.4 配置Testng.xml文件,设定测试类、测试方法、测试分组的执行信息

  2.5 执行TestNG的测试程序

三、如何安装TestNG?

启动Eclipse,选择Help-》Install New Software-》点击add-》name中输入TestNG,location中输入“http://beust.com/eclipse/”,点击ok-》在弹出的install对话框中勾选TestNG复选框-》Next-》Accept-》Finish

四、testNG用例执行后如何查看执行结果?

  4.1 在Console标签栏中展示测试用例的执行结果,如图:

  

  4.2 在工程下也会生成一个test-output文件夹,如图:

  

 

五、TestNG常用注解:执行顺序如下

  @BeforeSuite > @BeforeTest > @BeforeMethod > @Test > @AfterMethod > @AfterTest > @AfterSuite

@BeforeSuite

表示会在当前测试集合中的任意一个测试用例开始运行前执行

@AfterSuite

表示会在当前测试集合中的所有测试程序运行结束之后执行

@BeforeTest

表示会在Test中的任意一个测试用例开始运行前执行

@AfterTest

表示会在Test中的所有测试用例运行结束后执行

@BeforeGroups

分组测试用例的任一测试用例开始运行前执行

@AfterGroups

分组测试用例的所有测试用例运行结束后执行

@BeforeClass

在当前测试类的任意一个测试用例开始运行前执行

@AfterClass

在当前测试类的所有测试用例运行结束后执行

@BeforeMethod

在每个测试方法开始运行前执行

@AfterMethod

在每个测试方法运行结束后执行

@Test

被认为是一个测试方法,既一个测试用例

六、如何创建TestNG测试集合?

  6.1 测试集合:在自动化测试的执行过程中,通常会产生批量运行多个测试用例的需求,此需求称为运行测试集合(Test Suite)

  6.2 TestNG的测试用例可以是相互独立的,也可以按照特定的顺序来执行(配置TestNG.xml)

  6.3 如何配置testNG.xml文件?

<suite name = "TestNG Suite">    //自定义的测试集合名称
  <test name = "test1">    //自定义的测试名称
    <classes>    //定义被运行的测试类
      <class name = "cn.gloryroad.FirstTestNGDemo" />    //测试类的路径
      <class name = "cn.gloryroad.NewTest" />
    </classes>
  </test>
</suite>

七、测试用例的分组(group)

  7.1 只执行一组分组配置如下:

<suite name = "TestNG Suite">
  <test name = "Grouping">
    <groups>
      <run>
        <include name = "动物" />
      </run>
    </groups>
    <classes>
      <class name = "cn.gloryroad.Grouping"/>
    </classes>
  </test>
</suite>

  7.2 执行多组分组时配置如下(两种形式都可以):

<suite name = "TestNG Suite">
  <test name = "Grouping">
    <groups>
      <run>
        <include name = "动物" /> //name分组名称
<include name = "人" />
      </run>
    </groups>
    <classes>
      <class name = "cn.gloryroad.Grouping"/>
    </classes>
  </test>
</suite>
<suite name = "TestNG Suite">
<test name = "Grouping">
<groups>
       <define name = "All">
          <include name = "动物" />
          <include name = "人" />
       </define>
       <run>
          <include name = "All" />
       </run>
     </groups>
    <classes>
      <class name = "cn.gloryroad.Grouping"/>
    </classes>
  </test>
</suite>

八、依赖测试(dependsOnMethod)

  @Test(dependsOnMethod = {"方法名称"})

  被依赖的方法优先于此方法执行

九、特定顺序执行测试用例(priority)

  @Test(priority = 0/1/2/3/4/…)

  按照数字大小顺序优先执行,优先执行1,然后是2…

十、如何跳过某个测试方法(enabled = false)

  @Test(priority = 0/1… , enabled = false)

  执行结束后,在测试报告中显示跳过的测试用例数,例如skip=1

十一、数据注解

  11.1 参数化测试(@Parameters-》通过xml文件从外部给测试方法传参):<Parameter name="Type" value="chrome"/>  -》参考http://www.yiibai.com/html/testng/2013/0916303.html 

创建测试案例类

    创建一个Java测试类 ParameterizedTest1.java.

    测试方法parameterTest()添加到测试类。此方法需要一个字符串作为输入参数。

    添加注释 @Parameters("myName") 到此方法。该参数将被传递testng.xml,在下一步我们将看到一个值。

创建Java类文件名 ParameterizedTest1.java 在 C:\ > TestNG_WORKSPACE

  import org.testng.annotations.Parameters;
  import org.testng.annotations.Test;   public class ParameterizedTest1 {
  @Test
  @Parameters("myName")
  public void parameterTest(String myName) {
  System.out.println("Parameterized value is : " + myName);
  }
  } 创建 TESTNG.XML 创建 testng.xml C:\ > TestNG_WORKSPACE 执行测试案例   <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
  <suite name="Suite1">
  <test name="test1">
  <parameter name="myName" value="manisha"/>
  <classes>
   <class name="ParameterizedTest1" />
   </classes>
   </test>
  </suite> 我们还可以定义参数在<suite>级别。假设我们已经定义在两个<suite>和<test>级别myName,在这种情况下,常规的作用域规则适用。这意味着,任何类里面<test>标签将查看值参数定义在<test>,而testng.xml文件中的类的其余部分将看到定义在<suite>中值 编译使用javac的测试用例类。 C:\TestNG_WORKSPACE>javac ParameterizedTest1.java 现在,运行testng.xml,其中将运行parameterTest方法。TestNG的将试图找到一个命名myName的第一<test>标签的参数,然后,如果它不能找到它,它会搜索包围在的<suit>标签。 C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml 验证输出。 Parameterized value is : manisha ===============================================
Suite1
Total tests run: 1, Failures: 0, Skips: 0
=============================================== TestNG 对testng.xml 的参数的类型指定的值会自动尝试转换。下面是支持的类型: String int/Integer boolean/Boolean byte/Byte char/Character double/Double float/Float long/Long short/Short

  11.2 数据驱动(@DataProvider)-》参考http://www.yiibai.com/html/testng/2013/0916303.html 

 当你需要通过复杂的参数或参数需要创建从Java(复杂的对象,对象读取属性文件或数据库等..),在这种情况下,可以将参数传递使用数据提供者。数据提供者@DataProvider的批注的方法。这个注解只有一个字符串属性:它的名字。如果不提供名称,数据提供者的名称会自动默认方法的名称。数据提供者返回一个对象数组。

让我们看看下面的例子使用数据提供者。第一个例子是@DataProvider的使用Vector,String或Integer 作为参数,第二个例子是关于@DataProvider 的使用对象作为参数。
实例 1 在这里 @DataProvider 通过整数和布尔参数。
创建Java类 创建一个java类PrimeNumberChecker.java。这个类检查,如果是素数。创建这个类在 C:\ > TestNG_WORKSPACE   public class PrimeNumberChecker {
   public Boolean validate(final Integer primeNumber) {
   for (int i = 2; i < (primeNumber / 2); i++) {
   if (primeNumber % i == 0) {
   return false;
  }
  }
  return true;
  }
  } 创建测试案例类 创建一个Java测试类 ParamTestWithDataProvider1.java. 定义方法primeNumbers(),其定义为DataProvider 使用注释。此方法返回的对象数组的数组。 测试方法testPrimeNumberChecker()添加到测试类中。此方法需要一个整数和布尔值作为输入参数。这个方法验证,如果传递的参数是一个素数。 添加注释 @Test(dataProvider = "test1") 到此方法。dataProvider的属性被映射到"test1". 创建Java类文件名ParamTestWithDataProvider1.java 在 C:\ > TestNG_WORKSPACE   import org.testng.Assert;
  import org.testng.annotations.BeforeMethod;
  import org.testng.annotations.DataProvider;
  import org.testng.annotations.Test;   public class ParamTestWithDataProvider1 {
   private PrimeNumberChecker primeNumberChecker;
  
   @BeforeMethod
   public void initialize() {
   primeNumberChecker = new PrimeNumberChecker();
   }   @DataProvider(name = "test1")
   public static Object[][] primeNumbers() {
  return new Object[][] { { 2, true }, { 6, false }, { 19, true },
     { 22, false }, { 23, true } };
  }    // This test will run 4 times since we have 5 parameters defined
  @Test(dataProvider = "test1")
   public void testPrimeNumberChecker(Integer inputNumber,
  Boolean expectedResult) {
  System.out.println(inputNumber + " " + expectedResult);
  Assert.assertEquals(expectedResult,
  primeNumberChecker.validate(inputNumber));
  }
  } 创建 TESTNG.XML 创建 testng.xml C:\ > TestNG_WORKSPACE 执行测试案例。   <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
  <suite name="Suite1">
   <test name="test1">
  <classes>
   <class name="ParamTestWithDataProvider1" />
   </classes>
   </test>
  </suite> 编译使用javac的测试用例类。 C:\TestNG_WORKSPACE>.javac ParamTestWithDataProvider1.java PrimeNumberChecker.java 运行testng.xml. C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml 验证输出。 2 true
6 false
19 true
22 false
23 true ===============================================
Suite1
Total tests run: 5, Failures: 0, Skips: 0
=============================================== 实例 2 在这里,@DataProvider 传递对象作为参数。
创建Java类 创建一个Java类 Bean.java, 对象带有 get/set 方法, 在 C:\ > TestNG_WORKSPACE. public class Bean {
private String val;
private int i;
public Bean(String val, int i){
this.val=val;
this.i=i;
}
public String getVal() {
return val;
}
public void setVal(String val) {
this.val = val;
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
} 创建测试案例类 创建一个Java测试类 ParamTestWithDataProvider2.java. 定义方法primeNumbers(),其定义为DataProvider使用注释。此方法返回的对象数组的数组。 添加测试类中测试方法TestMethod()。此方法需要对象的bean作为参数。 添加注释 @Test(dataProvider = "test1") 到此方法. dataProvider 属性被映射到 "test1". 创建Java类文件名 ParamTestWithDataProvider2.java 在 C:\ > TestNG_WORKSPACE   import org.testng.annotations.DataProvider;
  import org.testng.annotations.Test;   public class ParamTestWithDataProvider2 {
   @DataProvider(name = "test1")
   public static Object[][] primeNumbers() {
   return new Object[][] { { new Bean("hi I am the bean", 111) } };
   }    @Test(dataProvider = "test1")
   public void testMethod(Bean myBean) {
   System.out.println(myBean.getVal() + " " + myBean.getI());
   }
  } 创建 TESTNG.XML 创建一个文件 testng.xml C:\ > TestNG_WORKSPACE 来执行测试用例.   <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
  <suite name="Suite1">
  <test name="test1">
  <classes>
   <class name="ParamTestWithDataProvider2" />
   </classes>
   </test>
  </suite> 编译使用javac的测试用例类。 C:\TestNG_WORKSPACE>javac ParamTestWithDataProvider2.java Bean.java 运行 testng.xml. C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml 验证输出。 hi I am the bean 111 ===============================================
Suite1
Total tests run: 1, Failures: 0, Skips: 0
===============================================

  

十二、测试报告中自定义日志(Reporter.log(“输入自定义内容”)),例如:

  @Test(groups = {"人"})

  public void student(){

    System.out.println("学生方法被调用");

    Reporter.log("学生方法自定义日志");

  }

TestNG详解(单元测试框架)的更多相关文章

  1. TestNG详解-深度好文

    转自: https://blog.csdn.net/lykangjia/article/details/56485295 TestNG详解-深度好文 2017年02月22日 14:51:52 阅读数: ...

  2. 详解Executor框架

    在Java中,使用线程来异步执行任务.Java线程的创建与销毁需要一定的开销,如果我们为每一个任务创建一个新线程来执行,这些线程的创建与销毁将消耗大量的计算资源.同时,为每一个任务创建一个新线程来执行 ...

  3. 详解工作流框架Activiti的服务架构和组件

    摘要:通过这篇文章,可以对工作流有一个基本的认识,为后续工作流框架Activiti的学习打下坚实的基础. 本文分享自华为云社区<BPMN工作流的基本概念!详解工作流框架Activiti的服务架构 ...

  4. TestNg JAVA 自动化单元测试框架Demo

    TestNg TestNg 是java的一个自动化单元测试框架 参考:http://testng.org/doc/index.html 环境准备 既然是java 的自动化单元测试框架,就必须要有jav ...

  5. [转载] 多图详解Spring框架的设计理念与设计模式

    转载自http://developer.51cto.com/art/201006/205212_all.htm Spring作为现在最优秀的框架之一,已被广泛的使用,51CTO也曾经针对Spring框 ...

  6. JavaWeb配置详解(结合框架SpringMVC)

    详解 先说一说常识性的东西,我们的JavaWeb程序运行一开始走的是web.xml文件,这是我们的核心文件,可以说没有web.xml文件我们就无法运行项目,这个文件长什么样子,读者自己新建一个web项 ...

  7. hadoop之yarn详解(框架进阶篇)

    前面在hadoop之yarn详解(基础架构篇)这篇文章提到了yarn的重要组件有ResourceManager,NodeManager,ApplicationMaster等,以及yarn调度作业的运行 ...

  8. JAVA Eclipse使用Maven构建web项目详解(SSM框架)

    tips: 启动项目后,welcome-file的链接即为测试用例 部署maven web项目 Eclipse使用Maven构建web项目详解 pom.xml添加webapp依赖: <depen ...

  9. unittest----常用属性详解(框架属性详解)

    很久没有写关于测试的随笔了,最近有空学习.整理一下关于unittest框架的知识. unittest单元测试框架,不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行. unittest ...

随机推荐

  1. python全栈开发 * 07知识点汇总 * 180607

    07  set集合,深浅拷⻉以及部分知识点补充 一.while,for 循环知识点补充 二.int, str的相关操作 1.列表变字符串 # lst=["红","橙&qu ...

  2. C和C指针小记(十五)-结构和联合

    1.结构 1.1 结构声明 在声明结构时,必须列出它包含的所有成员.这个列表包括每个成员的类型和名称. struct tag {member-list} variable-list; 例如 //A s ...

  3. html form禁止表单回车自动提交(通常原因是为在ajax提交前、后进行js判断控制)

    @*onkeydown事件用于禁止回车自动提交form,这样就不经过js控制跳转*@ <form action="/Account/CheckPsw" method=&quo ...

  4. [dev] 啥是Virtual Private Network

    先来读wiki:https://en.wikipedia.org/wiki/Virtual_private_network 摘要: VPNs can be either remote-access ( ...

  5. linux学习:【第3篇】远程连接及软件安装

    狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! linux学习:[第3篇]远程连接及软件安装 远程连接 xshell , xftp软件官网 : ...

  6. 002-自定义打开terminal,以及快捷键,其他程序类似,ssh管理-sshpass, Shuttle

    一.利用Automator软件完成服务设定 1.使用Command+Space,打开Spotlight,搜索Automator 2.搜索到之后,双击打开,选择“服务[或快速操作]” 3.将“服务收到[ ...

  7. 【Java】NO.80.Note.1.Java.1.001-【Java 各种特性概念】

    1.0.0 Summary Tittle:[Java]NO.80.Note.1.Java.1.001-[Java 各种特性概念] Style:Java Series:Java Since:2018-0 ...

  8. 本地node启动服务步骤

    启动node服务: 1.git bash here (node server-run.js) 2.如果第一次启动node服务,要根据提示装依赖文件npm install 依赖文件名 3.启动成功提示: ...

  9. CentOS 7 下使用yum安装MySQL5.7.20

    CentOS7默认数据库是mariadb, 但是 好多用的都是mysql ,但是CentOS7的yum源中默认好像是没有mysql的. 上一篇安装的是5.6的但是我想安装5.7的  yum安装是最简单 ...

  10. docker安装配置gitlab详细过程

    docker安装配置gitlab详细过程   获取镜像 1.方法一 1 docker pull beginor/gitlab-ce:11.0.1-ce.0 2.方法二如果服务器网路不好或者pull不下 ...