关于TestNG好的资源:

官网文档:http://testng.org/doc/documentation-main.html

一 下载并安装

1. JDK 1.7
$ java -version
2. Eclipse

二 使用TestNG

1. 进入到eclipse marketplace中,搜索TestNG ,下载并安装TestNG for Eclipse。
2. 新建一个java工程“TestNG_demo" 。在src文件夹下面新建一个包“com.testNG.demo"。
3. 导入testng 和selenium 该有的libraries 。
4. 在"com.testNG.demo"上右键,选择“TestNG"-> "create TestNG class" 新建一个TestNG测试类 Test01.java。

package iquicktest.com.selenium_maven_eclipse; 

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.Test; public class BaiduSearch{
public WebDriver driver;
public BaiduSearch(){
driver = new FirefoxDriver();
}
@Test
public void SearchBaidu(){
driver.get("http://www.baidu.com");
driver.findElement(By.name("wd")).sendKeys("iquicktest");
Assert.assertTrue(driver.getTitle().contains("百度"));
driver.quit();
}
}

5. 继续新建测试类:Test02.java.
6. 在工程“TestNG_demo"上右键,新建一个File,名字为“testng.xml"。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="none">
<test name="Test">
<classes>
<class name="com.testNG.demo.Test01"/>
<class name="com.testNG.demo.Test02"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->

7. 在testng.xml上右键,“Run As"-> "TestNG Suite"。即可看到case正在运行。
8. 等case运行结束,在项目上右键,选择“Refresh“刷新项目。可看到项目下面多了一个“test-output"文件夹。
9. 打开 “test-output" -> "index.html" ,可查看到生成的可读性良好的html报告。

三 附注

1. testng 简介

两个框架的不同在于核心设计。JUnit 一直 是一个单元测试框架,也就是说,其构建目的是促进单个对象的测试,它确实能够极其有效地完成此类任务。而 TestNG 则是用来解决更高 级别的测试问题,因此,它具有 JUnit 中所没有的一些特性。
以下是testNG在测试用例中使用的10种注解方法。
@BeforeSuite:被此注解的方法将在所有测试运行之前运行该方法。
@AfterSuite: 被此注解的方法将在所有测试运行之后运行该方法。
@BeforeTest:被此注解的方法,将在测试运行之前运行。
@AfterTest: 被此注解的方法,将在测试运行之后运行。
@BeforeGroups:被此配置的方法,将在列表中的group前运行,这个方法保证在第一个属于这些组列表的测试方法调用前运行。
@AfterGroups:被此配置的方法,将在列表中的group后运行,这个方法保证在最后一个属于这些组列表的测试方法调用后运行。
@BeforeClass:被此注解的方法,将在当前类的第一个测试方法调用之前运行
@AfterClass:被此注解的方法,将在当前类的所有测试方法调用之后运行
@BeforeMethod:被此注解的方法,将在每个测试方法调用之前运行

@AfterMethod:被此注解的方法,将在每个测试方法调用之后运行。

@DataProvider 标记一个方法用于为测试方法提供数据。
@Factoy 标记方法作为一个返回对象的工厂,这些对象将被TestNG用于作为测试类。这个方法必须返回Object[]
@Parameters 描述如何传递参数给@Test方法
@Test 标记一个类或方法作为测试的一部分

2.testng vs junit

JUnit类 TestNG类 作用
org.junit.Test org.testng.annotations.Test 标注方法为测试方法
org.junit.Assert org.testng.Assert 检查测试结果
org.junit.Before org.testng.annotations.BeforeMethod 标注方法在每个测试方法之前运行
org.junit.After org.testng.annotations.AfterMethod 标注方法在每个测试方法之后运行
org.junit.BeforeClass org.testng.annotations.BeforeClass 标注方法在所有测试方法之前运行
org.junit.AfterClass org.testng.annotations.AfterClass 标注方法在所有测试方法之后运行

3. testng 的优点

参考: http://www.ibm.com/developerworks/cn/java/j-cq08296/
(1)依赖性测试
JUnit 框架想达到的一个目标就是测试隔离。它的缺点是:人们很难确定测试用例执行的顺序,而这对于任何类型的依赖性测试都非常重要。开发者们使用了多种技术来解决这个问题,例如,按字母顺序指定测试用例,或是更多地依靠 fixture 来适当地解决问题。
与 JUnit 不同,TestNG 利用 Test 注释的 dependsOnMethods 属性来应对测试的依赖性问题。有了这个便利的特性,就可以轻松指定依赖方法。例如,前面所说的登录将在某个方法之前 运行。此外,如果依赖方法失败,它将被跳过,而不是标记为失败。
如: @Test (dependsOnMethods = {"verifyLogIn"})

对于大型测试套件,TestNG 这种不标记为失败,而只是跳过的处理方法可以减轻很多压力。您的团队可以集中精力查找为什么百分之五十的测试套件被跳过,而不是去找百分之五十的测试套件 失败的原因!更有利的是,TestNG 采取了只重新运行失败测试的机制,这使它的依赖性测试设置更为完善。

(2)失败和重运行
在大型测试套件中,这种重新运行失败测试的能力显得尤为方便。这是 TestNG 独有的一个特性。在 JUnit 4 中,如果测试套件包括 1000 项测试,其中 3 项失败,很可能就会迫使您重新运行整个测试套件(修改错误以后)。不用说,这样的工作可能会耗费几个小时。

一旦 TestNG 中出现失败,TestNG 自动创建一个 testng-failed.xml 文件,对失败的测试加以说明。如果利用这个文件执行 TestNG 运行程序,TestNG 就只 运行失败的测试。所以,在前面的例子里,您只需重新运行那三个失败的测试,而不是整个测试套件。

(3)参数化测试
estNG 中另一个有趣的特性是参数化测试。在 JUnit 中,如果您想改变某个受测方法的参数组,就只能给每个 不同的参数组编写一个测试用例。多数情况下,这不会带来太多麻烦。然而,我们有时会碰到一些情况,对其中的业务逻辑,需要运行的测试数目变化范围很大。

一个简单的TestNG例子的更多相关文章

  1. 一个简单的CORBA例子

    因为对CORBA分析的需要,这里写一个简单的CORBA例子.从JDK1.2开始,JDK中集成了ORB的实现,本例子使用了JDK1.7,对于JDK1.2+应该都没有问题.这个例子实现一个简单的加减乘除的 ...

  2. 轻松创建nodejs服务器(1):一个简单nodejs服务器例子

    这篇文章主要介绍了一个简单nodejs服务器例子,本文实现了一个简单的hello world例子,并展示如何运行这个服务器,需要的朋友可以参考下   我们先来实现一个简单的例子,hello world ...

  3. 使用Multiplayer Networking做一个简单的多人游戏例子-3/3(Unity3D开发之二十七)

    使用Multiplayer Networking做一个简单的多人游戏例子-1/3 使用Multiplayer Networking做一个简单的多人游戏例子-2/3 使用Multiplayer Netw ...

  4. 使用Multiplayer Networking做一个简单的多人游戏例子-2/3(Unity3D开发之二十六)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/51007512 ...

  5. 使用Multiplayer Networking做一个简单的多人游戏例子-1/3(Unity3D开发之二十五)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/51006463 ...

  6. 一个简单的cmake例子

    一个简单的cmake例子CMakeLists.txt,生成动态库文件,可以指定发布目录. 尚不支持: 1.交叉编译环境配置 2.添加依赖库   #在当前目录新建一个build目录,然后cd build ...

  7. 一个简单的springmvc例子 入门(1)

    一直是从事棋牌游戏,平常用的东西 大多数只是使用一些javase的一些 api对spring 这方面 用到的比较少,每次学了都忘,始终记不住.为了 更轻松学习springboot,从新学习了sprin ...

  8. 利用VisualStudio单元测试框架举一个简单的单元测试例子

    本随笔很简单,不涉及mock和stub对象,而是只给出一个简单的利用Visual Studio单元测试框架的最简单例子.如果需要深入理解Unit Test的原理与艺术,请参考<The art o ...

  9. 撸一个简单的MVVM例子

    我个人以为mvvm框架里面最重要的一点就是VM这部分,它要与Model层建立联系,将Model层转换成可以被View层识别的数据结构:其次也要同View建立联系,将数据及时更新到View层上,并且响应 ...

随机推荐

  1. mui.pushToRefresh组件下拉回调函数中this指向问题

    先看一段代码 (function($) { //阻尼系数 var deceleration = mui.os.ios ? 0.003 : 0.0009; $('.mui-scroll-wrapper' ...

  2. poj 1125 Stockbroker Grapevine (dij优化 0ms)

    #include<iostream> #include<cstdio> #include<cstring> #include<queue> #defin ...

  3. 11、SQL Server 视图、数据库快照

    SQL Server 视图 什么是视图? 视图是一个虚拟的表,内容源于查询的结果集.只有当视图上建立了索引后,才会具体化. 视图可以筛选和处理数据,而不是直接访问基础表.如:创建一个视图,只展示源表中 ...

  4. 用CSS3实现带小三角形的div框(不用图片)

    现在看到了很多带小三角形的方框,如微信.Mac版的QQ.QQ空间的时间轴等等,在聊天或者是发表的状态的内容外面都有一个带小三角形的矩形框包围着,感觉看着很不错,于是决定亲自动手写一个,我上次用的是偏移 ...

  5. tabswitch

    <!DOCTYPE html> <html lang="en" ng-app="myApp"> <head> <met ...

  6. js如何设置网页横屏和竖屏切换

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  7. 自签名SSL生成

    本教程以AppServ生成自签名证书为例,同时配置OpenSSL环境1.生成自签名证书,控制台程序进入Apache目录下的bin目录 >openssl req -config ../conf/o ...

  8. 关于mtk Android打开串口权限问题

    最近在做一个测试串口读写回路的APK,jni代码部分遇到一个小小问题: fd = open(path_utf, O_RDWR);返回值是-1,要么就是权限问题,要么就是文件不存在所以需要打印错误信息, ...

  9. 五、C# 类

    面向对象编程 类是面向对象编程的3个主要特征---封装.继承和多态性---的基础.   封装允许隐藏细节.   继承 继承关系至少涉及两个类,其中一个类(基类)是另一个类的更泛化的版本.   为了从一 ...

  10. createElement()结合appendChild()的实例

    createElement()作用是在JavaScript中创建一个元素 appendChild()向html元素添加节点 下面是冲浪后改编的例子代码 先插html代码 <body> &l ...