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