JUnit让开发人员了解测试的实用性,尤其是在单元测试这一模块上比任何其他测试框架都要简单明了。凭借一个相当简单,务实,严谨的架构,JUnit已经能够“感染”了一大批开发人员。TestNG是一个测试框架,其灵感来自JUnit和NUnit,但引入了一些新的功能,使其功能更强大,使用更方便。

一:注解的使用

import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test; public class Annotation { @Test
public void testCase1(){
System.out.println("测试用例1被执行");
} @Test
public void testCase2(){
System.out.println("测试用例2被执行");
} @BeforeMethod
public void beforeMethod(){
System.out.println("@BeforeMethod:在每个测试方法开始运行前执行");
} @AfterMethod
public void afterMethod(){
System.out.println("@AfterMethod:在每个测试方法开始运行结束后执行");
} @BeforeClass
public void beforeClass(){
System.out.println("@BeforeClass:在当前测试类的第一个测试方法开始调用前执行");
} @AfterClass
public void afterClass(){
System.out.println("@AfterClass:在当前测试类的最后一个测试方法结束运行后执行");
} @BeforeTest
public void beforeTest(){
System.out.println("@BeforeTest:在测试类中的Test开始运行前执行");
} @AfterTest
public void afterTest(){
System.out.println("@AfterTest:在测试类中的Test运行结束后执行");
} @BeforeSuite
public void beforeSuite(){
System.out.println("@BeforeSuite:在当前测试集合(suite)中所有测试程序开始运行之前执行");
} @AfterSuite
public void afterSuite(){
System.out.println("@AfterSuite:在当前测试集合(suite)中所有测试程序运行结束之后执行");
}
}

运行结果:

@BeforeSuite:在当前测试集合(suite)中所有测试程序开始运行之前执行
@BeforeTest:在测试类中的Test开始运行前执行
@BeforeClass:在当前测试类的第一个测试方法开始调用前执行
@BeforeMethod:在每个测试方法开始运行前执行
测试用例1被执行
@AfterMethod:在每个测试方法开始运行结束后执行
@BeforeMethod:在每个测试方法开始运行前执行
测试用例2被执行
@AfterMethod:在每个测试方法开始运行结束后执行
@AfterClass:在当前测试类的最后一个测试方法结束运行后执行
@AfterTest:在测试类中的Test运行结束后执行
PASSED: testCase1
PASSED: testCase2

===============================================
    Default test
    Tests run: 2, Failures: 0, Skips: 0
===============================================

@AfterSuite:在当前测试集合(suite)中所有测试程序运行结束之后执行

===============================================
Default suite
Total tests run: 2, Failures: 0, Skips: 0
===============================================

二:依赖测试

import org.testng.annotations.Test;
public class DependentTest { /**
* TestNG 依赖测试(使用dependsOnMethods参数实现)
* 有时候需要按顺序来调用测试用例, 那么测试用例之间就存在依赖关系
* 通过依赖测试,可以在不同的方法间共享数据和程序状态
*/ // dependsOnMethods={"OpenBrowser"} 表示在OpenBrowser方法被调用后才能执行login方法
@Test(dependsOnMethods={"OpenBrowser"})
public void login(){
System.out.println("login方法被调用");
} @Test
public void OpenBrowser(){
System.out.println("OpenBrowser方法被调用");
} // dependsOnMethods={"login"} 表示在login方法被调用后才能执行logout方法
@Test(dependsOnMethods={"login"})
public void logout(){
System.out.println("logout方法被调用");
}
}

运行结果:

OpenBrowser方法被调用
login方法被调用
logout方法被调用
PASSED: OpenBrowser
PASSED: login
PASSED: logout

===============================================
    Default test
    Tests run: 3, Failures: 0, Skips: 0
===============================================

三:按特定顺序执行测试

import org.testng.annotations.Test;

public class SequenceTest {
/**
* 使用priority参数,可以按特定顺序执行测试
*/ @Test(priority=2)
public void test3(){
System.out.println("test3方法被调用");
} // enabled=false 跳过这个测试方法
@Test(priority=1,enabled=false)
public void test2(){
System.out.println("test2方法被调用");
} @Test(priority=0)
public void test1(){
System.out.println("test1方法被调用");
} @Test(priority=3)
public void test4(){
System.out.println("test4方法被调用");
} }

运行结果:

test1方法被调用
test3方法被调用
test4方法被调用
PASSED: test1
PASSED: test3
PASSED: test4

===============================================
    Default test
    Tests run: 3, Failures: 0, Skips: 0
===============================================

四:测试集合,通过testng.xml方式来执行测试用例

<suite name="Suite">
<test name="Test">
<classes> <!-- 测试集合,执行cn.testng包下的Annotation及test测试类 -->
<class name="cn.testng.Annotation"/>
<class name="cn.testng.test"/> </classes>
</test>
</suite>

五:测试用例的分组,通过testng.xml方式来执行测试用例

import org.testng.annotations.Test;

public class Grouping {

    /**
* 测试用例的分组,TestNG使用groups关键字进行分组,用来执行多个Test的测试用例
*/ @Test(groups={"人"})
public void student(){
System.out.println("学生方法被调用");
} @Test(groups={"人"})
public void teacher(){
System.out.println("老师方法被调用");
} @Test(groups={"动物"})
public void cat(){
System.out.println("小猫方法被调用");
} @Test(groups={"动物"})
public void dog(){
System.out.println("小狗方法被调用");
} }

设置testng.xml

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

通过testng.xml方式来执行测试用例,结果如下:

小猫方法被调用
小狗方法被调用

===============================================
Suite
Total tests run: 2, Failures: 0, Skips: 0
===============================================

TestNG 单元测试框架的使用的更多相关文章

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

    在进行使用的eclipse的进行开发的代码中,必然就会需要进行单元测试,在单元测试的情况提供较多的框架单元测试,例如使用junit单元测试,而在国外进行开发较好的单元测试,提供了较好的测试的报告,ju ...

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

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

  3. JAVA 利用MyEclipse结合TestNG测试框架进行单元测试

    利用MyEclipse结合TestNG测试框架进行单元测试   by:授客 QQ:1033553122 测试环境 jdk1.8.0_121 myeclipse-10.0-offline-install ...

  4. unittest单元测试框架实现参数化

    当我们在使用TestNG时,发现它有一个非常好用的参数化功能.当你的测试用例有固定的参数和断言结果时,它可以相似用例的节省用例的个数. 例子如下: import static org.testng.A ...

  5. 单元测试框架unittest

    单元测试:单元测试,是指对软件中的最小可测试单元进行检查和验证,对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义如:c语言中单元指一个函数,java里单元指一个类,图形化的软件中可以 ...

  6. Python+Selenium框架设计篇之-简单介绍unittest单元测试框架

    前面文章已经简单介绍了一些关于自动化测试框架的介绍,知道了什么是自动化测试框架,主要有哪些特点,基本组成部分等.在继续介绍框架设计之前,我们先来学习一个工具,叫unittest.       unit ...

  7. Python+Selenium ----unittest单元测试框架

    unittest是一个单元测试框架,是Python编程的单元测试框架.有时候,也做叫做“PyUnit”,是Junit的Python语言版本.这里了解下,Junit是Java语言的单元测试框架,Java ...

  8. 【转】nose-parameterized是Python单元测试框架实现参数化的扩展

    原文地址: http://www.cnblogs.com/fnng/p/6580636.html 相对而言,Python下面单元测试框架要弱上少,尤其是Python自带的unittest测试框架,不支 ...

  9. 走进JavaWeb技术世界11:单元测试框架Junit

    JUnit你不知道的那些事儿 转自 老刘 码农翻身 2016-02-24 话说有一次Eric Gamma 坐飞机的时候偶遇Kent Beck(对,就是极限编程和TDD的发起人) ,  两位大牛见面寒暄 ...

随机推荐

  1. oracle data type

    NUMBER ( precision, scale) precision表示数字中的有效位.如果没有指定precision的话,Oracle将使用38作为精度. scale表示数字小数点右边的位数,s ...

  2. django使用ckeditor上传图片

    1.在模型类中设置字段为富文本类型,这里需要注意引入的是RichTextUploadingField,以允许上传图片,需要和RichTextField区分开 from ckeditor_uploade ...

  3. WinForm关于更新程序的设计思路

    开发WINDOWS应用程序一般都会有一个自动更新的功能,这就需要提供一个单独的更新程序来更新主程序,那么主程序怎么检测是否有更新,以及更新程序怎么去更新主程序呢?下面将分开研究分析. 用VS发布向导发 ...

  4. Vue01

    1.vue.js库的下载 vue.js是目前前端web开发最流行的工具库,由尤雨溪在2014年2月发布的. 另外几个常见的工具库:react.js /angular.js 官方网站: 中文:https ...

  5. DataFrame对行列的基本操作实战

    1.pandas对行列的基本操作命令: import numpy as np import pandas as pd from pandas import Sereis, DataFrame ser ...

  6. oracle sql developer 创建数据库链接

    sql developer中 创建 dblink,创建时,用户名 和密码都不需要加引号 create database link ykt_dblink2connect to account ident ...

  7. Go 变量声明后若不赋值,各类型默认值

    Go 变量声明后若不赋值,各类型默认值(数字类型默认为 0,其他类型为 nil): 数据类型 默认值 bool false string 空字符串 int 0 float32 0 float64 0 ...

  8. postman进行https接口测试所遇到的ssl证书问题,参考别人方法

    参考文档: https://learning.getpostman.com/docs/postman/sending_api_requests/certificates/ 随着 https 的推动,更 ...

  9. Linux系统下安装Angular2开发环境(Ubuntu16.0和deepin)

    说明下,以下过程都是在ubuntu16.0系统下,win系统环境下的安装过程更简单,基本上可以仿效此环境来,除了不用配置系统命令(win下自动可以),node安装是exe程序,一键安装.另外,这里面像 ...

  10. IntelliJ IDEA 下载安装以及破解

    转载自:http://blog.csdn.net/my_jack/article/details/69248495 IDEA开发工具是java语言开发的集成环境,IntelliJ在业界被公认为最好的j ...