• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

追求代码质量: 可重复的系统测试

发布: 2009-6-22 10:41 | 作者: 不详 | 来源: 领测软件测试网采编 | 查看: 43次 | 进入软件测试论坛讨论

领测软件测试网

private IDataSet getDataSet() throws IOException, DataSetException {
  return new FlatXmlDataSet(new File("test/conf/seed.xml"));
}

private IDatabaseConnection getConnection() throws
   ClassNotFoundException, SQLException {
    Class.forName("org.hsqldb.jdbcDriver");
    final Connection jdbcConnection =
     DriverManager.getConnection("jdbc:hsqldb:hsql://127.0.0.1",
          "sa", "");
    return new DatabaseConnection(jdbcConnection);
}
}



    加入了 DbUnit,测试用例真的是可重复的了。在 handleSetUpOperation() 方法中,每当运行一个测试用例时,DbUnit 对数据执行一个 CLEAN_INSERT。此操作本质上将一个数据库的数据清空并插入一个新的数据集,从而删除任何之前创建的小部件。

    再一次探讨什么是 DbUnit?

    DbUnit 是一个 JUnit 扩展,用于在运行测试时将数据库放入一个已知状态中。开发人员使用 XML 种子文件将特定数据插入到测试用例所依赖的数据库中。因而,DbUnit 便利了依赖于一个或多个数据库的测试用例的可重复性。


    但那并不意味着已经结束了对测试用例可重复性这一话题的探讨。事实上,一切才刚刚开始。

    重复系统测试

    我喜欢将 清单 1 和 清单 2 中定义的测试用例称为系统测试。因为系统测试运行安装完整的应用程序,如 Web 应用程序,它们通常包含一个 servlet 容器和一个相关联的数据库。这些测试的目的在于校验那些设计为端对端操作的外部接口(如 Web 应用程序中的 Web 页面)。

    弹性优先级
    作为总体规则,应在任何可能的时候避免测试用例继承。许多 JUnit 扩展框架都提供特定的可继承测试用例,以便利于测试一个特定的架构。然而由于 Java™ 平台的单一继承范例,使得从框架中继承类的测试用例饱受缺乏弹性之苦。通常,这些相同的 JUnit 扩展框架提供了代理 API,这使得联合各种不具有严格继承结构的框架变得十分简单。

    由于设计它们的目的是为了测试功能完整的应用程序,因而系统测试趋向于增加运行次数而不是减少设置测试的总时间。例如,清单 1 和 清单 2 中展示的逻辑测试在运行前 需要下列步骤:

    创建一个 war 文件,该文件包含所有相关 Web 内容,如 JSP 文件、servlet、第三方的 jar 文件、图像等。

    将此 war 文件部署到目标 Web 容器中。(如果该容器尚未启动,启动该容器。)

    启动任何相关的数据库。(如果需要更新数据库模式,在启动前进行更新。)
现在,对于一个微不足道的小测试要做大量的辅助性工作!如果证明这个过程是耗时的,那么您认为这个测试会间隔多长时间运行一次呢?面对要使系统测试在逻辑上可重复(在一个连续的集成环境中)这一需求,这个步骤列表的确令人望而生畏。 

    介绍 Cargo

    好消息是可以在之前的列表中使所有主要设置步骤自动化。事实上,如果恰好从事过 Java Web 开发,可能已经用 Ant、Maven 或其他构建工具使步骤 1 自动化了。

    步骤 2 却是一个有趣的障碍。自动化一个 Web 容器还是需要一定技巧的。例如,一些容器具有定制的 Ant 任务,这些任务方便了其自动部署及运行,但这些任务是特定于容器的。而且,这些任务还有一些假设,如容器的安装位置,还有更重要的是,容器已被安装。

    Cargo 是一个致力于以通用方式自动化容器管理的创新型开源项目,因而用于将 WAR 文件部署到 JBoss 的相同的 API 也能够启动及停止 Jetty。Cargo 也能自动下载并安装一个容器。可以以不同的方式利用 Cargo 的 API,从 Java 代码到 Ant 任务,再到 Maven 目标。

    运用一个如 Cargo 这样的工具,应对了在编写合乎逻辑可重复的测试用例中遇到的主要问题之一。另外,还可以构造一个构建用于驾驭 Cargo 的功能以 自动地完成下列任务:

    下载一个所期望的容器。
    安装该容器。
    启动该容器。
    将一个选定的 WAR 或 EAR 文件部署到该容器中。
   很简单,是吧?接下来,您还能够用 Cargo 停止一个选定的容器。

    “谈谈” Cargo

    在深入 Cargo 前,最好先了解一下 Cargo 的基础知识。也就是说,由于 Cargo 与容器及容器管理相关,所以要理解了容器及容器管理的有关概念。

   

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

42/4<1234>

关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网