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

  • 相关阅读:
    Codeforces Global Round 2
    BZOJ4762 最小集合(动态规划+容斥原理)
    BZOJ4621 Tc605(动态规划)
    Luogu5289 十二省联考2019皮配(动态规划)
    Luogu5290 十二省联考2019春节十二响(贪心+启发式合并)
    Luogu5283 十二省联考2019异或粽子(trie/可持久化trie+堆)
    Luogu5284 十二省联考2019字符串问题(后缀数组+拓扑排序+线段树/主席树/KDTree)
    【转】Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask
    android Handler更新UI
    Android 四大组件之Activity生命周期
  • 原文地址:https://www.cnblogs.com/miniren/p/4638940.html
Copyright © 2020-2023  润新知