| 网站首页 | 测试咨讯 | 新手入门 | 专注性能 | 测试技术 | 测试管理 | 测试工具 | 开发社区 | 工具下载 | 资料下载 | 测试论坛 | 

[CNTester联盟群]交流群:34446273/21968356/64461572 白盒群:18400216 自动化群:2706508 性能群:4498858 外包群:59649884 管理群(需有管理经验):64442523

新手入门
 入门指南
 经验之谈
测试咨讯
 行业新闻
 网站动态
 人才就业
 CNTester基金
 标准规范
专注性能
 性能测试知识
 性能测试工具
 程序设计性能
 数据库性能
 Web应用服务器性能
 操作系统性能
 服务器与网络性能
测试技术
 用例设计
 性能测试
 自动化测试
 Web测试
 面向对象测试
 综合技术
 阶段性测试
 行业类测试
测试管理
 项目管理
 项目案例
 质量管理
 软件过程
测试工具
 Mercury系列
 Rational系列
 测试管理工具
 性能测试工具
 功能测试工具
 单元测试工具
 其它测试工具
开发社区
 Java技术
 DotNet技术
 C技术
 数据库技术
 操作系统
 服务器与中间件
工具下载
 测试工具
 开发工具
 企业工程
 网络通信
 媒体桌面
 游戏娱乐
 其他工具
资料下载
 测试资料
 程序设计
 数据库
 操作系统
 应用服务器
 电子期刊
 其他资料
 
 
您现在的位置: 中国测试员网站 >> 测试工具 >> 单元测试工具 >> TestNG >> 文章正文
  [图文]使用 TestNG 的新特性管理实际项目中的大量单元测试         ★★★ 【字体:
使用 TestNG 的新特性管理实际项目中的大量单元测试
作者:沈 羽    文章来源:IBM    点击数:    更新时间:2007-5-17    

级别: 中级

沈 羽 (shenyu@cn.ibm.com), 软件工程师, IBM

2005 年 10 月 19 日

随着项目的成长,单元测试的数量会迅猛增长。这就带来不少问题。首先数量巨大的单元测试难于管理,运行一遍耗时巨大。其次,有时某个微小改动可能只需要运行某个测试文件中的部分单元测试就可以,这时重新运行全部测试用例就没有必要了。其三,大多数项目需要用到多线程特性,为使用了多线程特性的代码写测试用例相当麻烦且容易出错。本文将利用 TestNG 提供的新特性,解决以上提到的问题。

TestNG 的示例代码

TestNG 提供了从命令行运行测试用例的方法。下面将首先从命令行运行测试用例。假设有如下的测试用例组:



列表 1. TestNG 示例代码
				
package example1;

import org.testng.annotations.*;

public class SimpleTest {

  @Configuration(beforeTestClass = true)
  public void setUp() {
    // code that will be invoked when this test is instantiated
  }

  @Test(groups = { "HelloWorld" })
  public void helloWorldTest() {
    System.out.println("Hello World");
    throw new Error();
  }

  @Test(threadPoolSize = 10, invocationCount = 5,  timeOut = 1000, groups = { "multiple" })
  public void multiThreadTest() {
     System.out.println("MultiThread test");
  }

  @Test(groups = { "HelloNature" })
  public void helloNatureTest() {
     System.out.println("Hello Nature");
     throw new Error();
  }
}

      

运行 TestNG 的 Ant 脚本

为了运行这组测试用例,构建了如下的 Ant 运行脚本:



列表 2. 运行测试用例组的 Ant 脚本 build.xml 文件
				
<project default="test">

  <path id="cp">
    <pathelement location="c:/spark/eclipse/plugins/org.testng.eclipse_4.7.0.0/lib/testng-jdk15.jar"/>
    <pathelement location="c:\"/>
  </path>
 
  <taskdef name="testng" classpathref="cp"
           classname="org.testng.TestNGAntTask" />

 <target name="test">
    <testng classpathref="cp" groups="HelloWorld, HelloNature">
      <classfileset dir="./" includes="example1/*.class"/>
    </testng>
  </target>
 
</project>

运行之后的结果如下:



图 1. 命令行运行 TestNG 的结果
命令行运行 TestNG 的结果

运行完成之后,会在运行目录下生成一个test-output 目录。如图 2 所示:



图 2. 生成的 test-output 目录
生成的 test-output 目录

该目录中包含有 html 形式的运行结果的报告,通过命令 start test-output\index.html 可以查看生成的测试报告。



图 3. 生成的测试报告
生成的测试报告

该目录中有一个 testng-failed.xml 文件,该文件可以被用来运行前一次运行失败的所有测试用例。下文将会详细介绍使用该文件的步骤。

重新运行前次运行失败的测试用例

随着项目开发的进行,单元测试的数量也会成倍的增加。有时仅仅有数量很小的某几个测试用例会运行失败。在这种情况之下,对于每一次修改,可能并不需要跑完所有的测试用例。只需要重新运行前次运行失败的测试用例。TestNG 内建了重新运行上次失败测试用例的功能,下文将会给出重新运行前次错误测试用例的步骤。

运行一组测试用例,如果这一组测试用例中有失败的用例,TestNG 就会在输出目录中创建一个叫做 testng-failed.xml 的配置文件。这个文件记录了本组测试用例中运行失败的测试用例。使用该文件,用户可以快速的重新运行上次运行失败的测试用例。而无需运行整个测试用例组。如前文所述,运行完 Ant 脚本之后,会在脚本运行的目录之中生成一个 test-output 目录。该目录中,包含 testng-failed.xml 文件。可以用如下的命令运行被标记为运行失败的测试用例。



列表 3. 重新运行前次运行失败的测试用例
				
C:\>java -classpath c:/spark/eclipse/plugins/org.testng.eclipse_4.7.0.0/lib/testng-jdk15.jar
 org.testng.TestNG -d test-outputs test-output\testng-failures.xml

运行结果如下:



图 4. 重新运行前次运行失败的测试用例的输出结果
重新运行前次运行失败的测试用例的输出结果 

分布式测试特性

随着测试用例规模的扩大,分组数量的增加。使用一台主机来运行所有的测试用例需要消耗大量的时间。为了解决这个问题,TestNG 提供了分布式特性。本文将介绍使用 TestNG 分布特征——使用多台主机同时运行测试用例。TestNG 提供的分布式模型如下所示:



图 5. TestNG 提供的分布式模型
TestNG 提供的分布式模型

这是一个典型的 master/slave。在这个模型中,有一个负责调度的 master 节点,和一些负责执行任务的 slave 节点。下文将介绍如何配置这样一个分布式模型。

首先,在远程机器上部署 slave 节点。如上图所示,在远程节点上不仅要配置 TestNG 运行环境,还需要复制测试用例文件。



图 6. 将需要运行的测试用例部署到远程机器上
将需要运行的测试用例部署到远程机器上

然后在这台远程机器上以 “slave” 模式启动一个 TestNG 实例,使用如下命令:java –classpath <testng_path>;<testcase_path> org.testng.TestNG -slave <port>



图 7. 以“slave”模式启动一个 TestNG 实例
以“slave”模式启动一个 TestNG 实例

这样,一个 TestNG 实例将会被启动,并且等待即将到来的连接请求。如果有需要,可以在多台机器上以 slave 模式启动 TestNG 实例。

完成了所有 slave 实例的启动之后,将所有启动 slave 实例的主机信息记录在一个配置文件中,如图 8 所示:



图 8. 分布式运行的配置文件
分布式运行的配置文件

然后使用该配置文件启动 TestNG 的 master 实例。



列表 4. 启动 TestNG 的 master 实例
				
java –classpath  c:\spark\eclipse\plugins\org.testng.eclipse_4.7.0.0\lib\testng-jdk15.jar;. 
org.testng.TestNG -hostfile hosts.properties test-output\testng-failed.xml

这样,所有的测试用例,将会被随机的分配到多个 slave 实例上运行。图9给出了在一个 slave 节点上运行测试用例的结果。



图 9. 分布式运行的 TestNG 测试用例结果
分布式运行的 TestNG 测试用例结果

TestNG 的多线程支持

测试用例分组中,针对网络应用的测试用例往往需要在多线程环境下运行。TestNG 为多线程运行某个测试用例提供了方便的内建支持。这可以通过在测试用例的方法前制定 annotation @Test 的属性来完成。



列表 5. 设置多线程属性运行测试用例
				
@Test(threadPoolSize = 3, invocationCount = 5,  timeOut = 1000, groups = { "multiple" })
public void multipleTest() {
    System.out.println("Slow test");
}


这个属性表示,运行 multipleTest 方法总共 5 次,在 3 个线程中运行这五次调用。每个线程运行该方法的时间不超过 1000 毫秒。修改 build.xml 文件,运行 multiple 组。



列表 6. 修改 build.xml 文件,运行 multiple 组。
				
<target name="test">
  <testng classpathref="cp" groups="multiple">
    <classfileset dir="./" includes="example1/*.class"/>
  </testng>
</target>



图 10. 多线程运行测试用例 multipleTest 的结果
多线程运行测试用例 multipleTest 的结果 

总结

本文希望通过场景和 TestNG 新特性的结合,可以为用户管理规模庞大的测试用例集有所帮助。场景中提到的分类方法,对实际项目中测试用例的管理具有帮助意义。其中,重跑失败的测试用例,分组运行,分布式运行,和多线程运行也是对于管理测试用例非常有帮助的特征。

文章录入:root    责任编辑:root 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     
    最新热点 最新推荐 相关文章
    · 常用软件测试工具简介!
    · Test Director 8.0安装配置!
    · Parasoft Jtest 7.5.59 使用手册
    · Test Director 8.0项目数据库维护和移植!
    · 使用CQ TestManager 运行并分析软件测试
    · TestDirector 8.2 SP2的下载与安装
    · Mercury WinRunner 软件试用 下载
    · Winrunner TSL命令简介
    · Mercury TestDirector 软件试用 下载
    · JTest7.59定义——JAVA 编码标准规范
    · 初识IBM Rational RobotJ
    · 使用 Rational Robot 实现自动化测试
    · 使用CQ TestManager 运行并分析软件测试
    · 常用软件测试工具简介!
    · 使用Functional Tester 6.1 进行功能测试
    · 使用Functional Tester 6.1 进行功能测试
    · 使用Functional Tester 6.1 进行功能测试
    · 使用Functional Tester 6.1 进行功能测试
    · 使用 EclEmma 进行覆盖测试
    · JTest7.59定义——JAVA 编码标准规范
    测试分类技术与Testng
    Eclipse 3.1 中使用TestNG:
    TestNG 使 Java 单元测试轻而
    追求代码质量: 使用 TestNG-
     
     
     
    ======> [CNTester联盟群]交流群:34446273/21968356/64461572 白盒群:18400216 自动化群:2706508 性能群:4498858 外包群:59649884 管理群(需有管理经验):64442523
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 管理登录 | 

    Copyright@2007 by CNTester.com 中国测试员网站 桂ICP备07005590

    本站为开源免费网站,非商业赢利性组织。本站文章部分从网络搜索获取,如果您认为某些侵犯了您的权益,麻烦您联系本站,我们会尽快删除相关内容,同时也希望您的谅解,我们的初衷是为了让更多人去学习这方面的知识,让行业有更好的发展。

    联系电话: 15021358905