一个简单的TestNG例子

关于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 中,如果您想改变某个受测方法的参数组,就只能给每个 不同的参数组编写一个测试用例。多数情况下,这不会带来太多麻烦。然而,我们有时会碰到一些情况,对其中的业务逻辑,需要运行的测试数目变化范围很大。

posted @ 2015-07-11 16:39  微微微笑  阅读(1425)  评论(0编辑  收藏  举报