专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Java教程 » 自动化测试过程:让编译和测试过程自动化 »正文

自动化测试过程:让编译和测试过程自动化

来源: 发布时间:星期四, 2009年1月8日 浏览:25次 评论:0
  极端编程(XP)主要原则其中的员必须执行定期单元测试还必须不断将变化集成到类似产品环境中去此外XP 建议尽可能让这个过程自动化毕竟如果开发者像生产代码样热切创建测试案例过程会相对轻松些

  如果单元测试做您应该会对每段代码(特别是由个别类标明)都能正常运行而满意执行持续或者不稳定编译让您明白当代码集成到生产环境时它是如何生效在开发周期中集成单元测试和定期自动编译向您和您客户保证了代码发布时是可靠

  在本文中我将为自动编译和测试过程采取实用思路方法使用 Ant 1.3 和 JUnit 测试框架将像您展示如何自动化个过程这个过程捕获每个测试套件运行相关信息、生成有吸引力报告并用电子邮件发送这个报告虽然这些性能有许多隐含在 Ant 中但我还是修改了许多核心任务来更好地满足要求这些修改是本文中心它们将全部结合到 Ant 个发行版中

  为什么使用 Ant 和 JUnit?

  Ant 1.3 是编译工具中实际标准由于用 Java 语言编写Ant 是开放源代码可以在多种平台上运行并为编译过程带来了很大灵活性JUnit 测试框架也是开放源代码它被广泛使用并和 Ant 编译过程集成(想学更多有关 Ant 和 JUnit 知识请参阅 参考资料)

  Ant 1.3 加上可选 <junit> 以及 <junitreport> 任务不经修改就可以启动基本编译和测试自动过程过程如下:

  运行 JUnit 测试实用

  捕获测试结果

  创建吸引人 HTML 整理总结报告

  旦捕获结果就可以使用 XML 格式化器将每个测试套件运行故障和连同软件Software包和类名还有测试套件执行时间起引入对于每个测试套件都有以下信息被捕获:

  测试案例名称

  执行持续时间

  故障或类型(如果适用)

  任何故障或详细信息

  这个构想中少了些什么

  虽然功能上很完美但上面描述自动化既不理想也不完整通过修改 JUnit 任务中几个我们可以创建按如下步骤运行自动过程

  执行 JUnit 测试

  将结果记录到 XML 文件或其它格式文件

  将结果转化为基于 XSL 格式测试报告

  将这个报告转化为 HTML 格式

  用电子邮件发送报告

  请给我更多数据

  除了将 Ant 和 JUnit 扩展到能自动进行编译和测试过程程度外我还添加了测试期间捕获标准数据我需要知道使用是什么操作系统、测试日期/时间、支持测试运行 JVM 版本以及 path

  为捕获这个信息我对 Ant JUnit 相关类中 4个类: JUnitTask 、 JUnitTest 、 JUnitTestRunner 以及 XMLJUnitResultFormatter 做了简单修改您会在附带源文件中发现这些变化

  作为附带优点当扩展捕获数据时最终捕获不仅是在测试套件运行时特定状态信息而且还包括了整个 Ant 操作属性集其中包含系统属性和内部 Ant 属性(例如用户定义属性)

  让数据报告自动化

  对 Ant <junit> 任务进行扩展使的能提供额外状态信息的后步就是启用自动化数据报告

  使用 Ant 最大优势的是它可扩展性 对于使用带有 XML 格式化器( <formatter type="xml"/> ) <junit> 任务运行每个测试类都创建了个 XML 文件 <junitreport> 任务提供了种很好将所有收集数据聚集到思路方法使用 XSLT它会将测试数据转化为种可以被轻松理解 HTML 格式报告

  <junitreport> 可被轻松扩展允许用户自定义 XSLT 文件用作报告生成XSLT 文件内建于 Ant optional.jar 文件中我将它和它必备伴侣 toolkit.xsl 起解压缩到本地目录然后修改 overview_summary.xsl 文件以便将 Ant 属性引入报告 而在 build.xml 中我指定了“noframes”报告在“测试套件”相应部分中添加到 overview_summary.xsl 中代码断如清单 1 所示

  清单 1. overview_summary.xsl 代码段用以显示新添入属性

<table>
   <xsl:for-each select="./Properties/Property">
     <xsl:sort select="@name"/>
     <tr>
       <td><xsl:value-of select="@name"/></td>
       <td><xsl:value-of select="@value"/></td>
     </tr>
   </xsl:for-each>
</table>


  旦修改了这些文件您就可以运行编译负责运行 JUnit 测试和创建 HTML 报告 build.xml 代码段如清单 2 所示

  清单 2. build.xml 中用以运行 JUnit 测试和创建 HTMl 报告部分

<target name="junit" depends="compiletests"
     description="Execute Unit Tests">
  <junit>
   <formatter type="xml" />
   <batchtest>
    <file dir="${build}">
     < name="test/**/*Test." />
    </file>
   </batchtest>
  </junit>
  <junitreport>
   <file dir=".">
    < name="TEST-*.xml"/>
   </file>
   <report format="noframes" styledir="etc/xsl"/>
  </junitreport>
</target>


  有关这个编译代码段您应该注意主要事情是 <junitreport> 中 <report> 元素 styledir 属性;它指定了用户自定义 XSLT 文件所在目录为捕获日期/时间戳您需要在 build.xml 某处 <junit> 任务前引入 <tstamp> 任务

  让电子邮件任务自动化

  Ant 有个内建 <mail> 任务但不幸是这个任务只有文本消息性能不能处理文件附件 但最近项任务被提交到 Ant 开发组它实现了 MIME 邮件性能

  我和另两个积极 Ant 开发者起工作改善这个最近提交任务这样它就可以支持 Ant FileSet 特性以及抄送和暗送邮件功能我还添加了另个很好特性 ― 将文件附加到电子邮件消息正文能力

  现代电子邮件阅读器可以像 MIME 那样显示附带 HTML 内容还可以像浏览器那样解读 HTML 代码图 1 显示了使用 <mimemail> 任务、用 Ant 发送 JUnit 报告电子邮件样本是什么样子

  图 1. 用 Ant 发送 JUnit 报告样本

    </file>
   </mimemail>
</target>

  代码注释:

  <taskdef> 用来定义 <mimemail> 任务现在 Ant 没有提供这个功能以后这个任务可能会成为 Ant 可选任务的;那么 <taskdef> 就会成为多余

  <tstamp> 用来创建用在电子邮件主题中 TODAY 属性在 build.xml “准备”或“化”阶段包含 <tstamp> 任务很常见所以根据您情况它可能是多余

  <mimemail> 具有清楚自解释语法提供代码中包含了这项任务 Ant 风格帮助文件(请参阅 参考资料)不仅 HTML 报告被发送(使用 messageFile 属性以便附加到消息正文部分)而且原始 XML 结果文件也作为标准 MIME 附件用 <file> 被发送了

  <junitreport> 在前面创建了个名叫 overview-summary.html 文件(指定了“noframes” 选项)

  排障、测试和部署

  我为 Ant 开发团体提供了刚才讨论所有代码修正他们已经认可将其包含到以后发行版中去但是官方 Ant 发行版还没有包含这篇文章中使用窍门技巧在让这些窍门技巧为您服务的前还需要采取些措施

  让代码生效

  第这些代码修正是基于 Ant 1.3 发行版;这是我将推荐用于这代码 Ant 版本 提供代码包含了 JUnitMail.jar 和用于生成 jar 文件源代码这个 jar 文件必须存在于启动 Ant 环境中 path 里 ― 在 Ant optional.jar 的前

  如果您是个典型 Ant 用户您通过 $ANT_HOME/bin 中包装脚本的运行 Ant这些包装脚本在启动 Ant 前将所有 $ANT_HOME/lib 中 jar 文件放入 path在 Windows 平台下只要将 JUnitMail.jar 放入 $ANT_HOME/lib 目录用 ant.bat 就可以处理 path 问题

  如果遇到过古怪行为(例如也许从 <junit> 捕获额外参数没有在 XML 文件中出现)那么就调试在包装脚本中用到 path(例如ant.bat 中 %LOCALCLASSPATH% )并修改包装脚本确保 path 中 JUnitMail.jar 在 optional.jar 的前

  测试代码

  在将这新代码集成到 path 中以后用 XML 格式化器测试个简单 JUnit 测试举例(如 清单 2所示)确保捕获了额外 Ant 属性

  额外属性作为 <Property> 元素在 XML 格式化器中被捕获如果由于某种原因致使属性元素没有出现就可能是path 问题

  确保修正后 JUnit 任务正在被使用个保险办法是使用我 JUnitMail.jar 版本中提供 JUnitTask. 、 JUnitTest. 、 JUnitTestRunner. 和 XMLJUnitResultFormatter. 来代替 optional.jar 中相应文件

  <mimemail> 任务有两个依赖条件 ― JavaMail 和 Java 活动框架(请参阅 参考资料)在启动 Ant 时这两个 jar 文件必须放在 path 中以便使用 <mimemail>

  定制布局

  您可以通过调整 XSLT 文件定制 JUnit 结果 HTML 布局我通过为每个测试套件在隐藏 <DIV> 中添加额外属性以及添加些用于隐藏及显示该额外信息 JavaScript 思路方法修改了 Ant 标准布局这些 JavaScript 窍门技巧可以在 Internet Explorer 中生效但在 Netscape 中不起作用(它显示了所有属性没有隐藏)

  我添加新捕获属性首要目仅仅是让那些信息可用不过将这些属性结合到 HTML 报告中思路方法还有很大改进余地(请记住如果您做了任何改进请将的提交到 Ant 开发者和用户团体让我们大家分享!)



  让 XP 成真

  旦您使用了我补丁让编译和测试过程自动进行只是个在 cron 作业(或者是 Windows 平台上 at 作业)中包装 Ant 执行问题

  理想化想法是自动进行过程将会把代码从您源代码管理系统中提取出来完成编译、执行单元测试、然后每晚用电子邮件发送结果还有将整个编译日志捕获并用电子邮件发送或张贴到 ranet 站点这样您就和“持续集成”和 XP 梦想接近了



0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: