在 Web 2.0 应用中,页面装载时间和浏览器渲染时间将成为决定性能的关键因素。我们在测试过程中不仅需要手动触发性能测试工具,而且需要模仿不同的用户行为,包括不同的浏览器、不同的网络条件和不同的使用习惯。在这种情况下我们需要新的方法与工具来覆盖特别是浏览器端的性能测试。用 Selenium WebDriver + Grid2 可以解决浏览器端性能测试中的自动化和并发性问题。本文介绍了这种新的测试框架和脚本的开发过程,并结合案例给出了具体的代码和结果分析。使用 Selenium WebDriver+Grid2 可以将已有的自动化测试资源为性能测试服务,将测试人员从繁杂的手动测试中解放出来,专注于结果分析和问题解决。
  我们需要新的方法与工具来覆盖浏览器端的性能测试
  在浏览器端的性能测试中遇到的一些问题
  在传统的互联网应用中,由于浏览器端的时间消耗比较有限,并且页面装载时间也比较简单且有限,所以在对传统互联网应用的响应时间分析中,我们通常忽略页面装载时间和浏览器渲染时间,而着重分析服务器响应时间。而在 Web 2.0 应用中,页面装载时间和浏览器渲染时间将成为决定性能的关键因素,所以我们需要新的方法与工具来覆盖特别是客户端的性能:浏览器响应时间。
  我们使用一些工具来帮助我们测试浏览器端的性能;比如说 DummyNet 可以模拟不同网络带宽和延迟,以便我们分析不同网络情况下的的网页性能;HttpWatch 可以分别记录每个请求的服务器端响应时间、页面装载时间、浏览器渲染时间;DynaTrace AJAX 是一种详细的底层工具,它不仅可以显示所有请求和文件在网络中的传输时间,还会记录浏览器 render、CPU 消耗、JavaScript 解析和运行的详细情况。我们使用这些工具的时候大多是手动触发,为了得到数据和分析报告,必须将用户案例在不同的浏览器上手动实现,并且在某一时刻打开或关闭工具和保存结果。过多的手动操作使我们很难专注于数据分析和发现问题。所以我们需要解决以下问题:
  需要有工具在模仿用户使用 web 应用程序的同时自动触发这些工具,生成分析数据。
  可以同时模仿不同的用户行为,包括不同的浏览器,网络条件和使用习惯。
  下面的章节将介绍如何利用自动化工具 Selenium 来搭建测试网页浏览器端性能的测试框架,实现浏览器端自动测试和并行测试。
  浏览器端性能测试框架中用到的技术
  我们的测试框架主要采用了以下技术:
  Selenium WebDriver
  Selenium 是针对 Web 应用的测试框架,支持多种浏览器和多种编程语。WebDriver 通过原生浏览器支持或者浏览器扩展直接控制浏览器。它提供了一个更为简单,一致的编程接口并且解决了在 Selenium-RC API 遇到的问题。Selenium WebDriver 更好的支持了动态网页。它的目标是为现代的网页程序测试提供设计良好的面向对象的 API。
  Selenium Grid2
  Selenium Grid 允许用户将测试案例分布在几台机器上并行执行。用户可以在一个集中控制点控制不同的环境。在不同的浏览器 / 系统组合上面更为容易的运行测试案例。允许用户更多的利用虚拟资源减少了维护测试环境的成本。Selenium Grid2 很好的支持了 WebDriver。利用原有的 WebDriver 脚本和 Grid 技术可以将不同的测试用例分布在不同的机器或虚机上,在特定的浏览器版本上运行,自动地启动关闭分析工具,统一地保存测试结果。Selenium Grid2 的机制如图 1,启动一个中央节点(Hub),然后启动多个远程控制节点(rc),启动 rc 时告知 Hub 的位置,这样这些 rc 可以注册到 Hub 上,测试程序与 Hub 通讯,当测试被并发地发给 Hub 时,Hub 会自动将这些测试命令分发给已经注册的 rc,rc 接到命令后执行测试。
  TestNG
  本测试系统还使用 TestNG 工具来辅助配置自动测试。TestNG 是测试 Java 应用程序的框架之一。TestNG 以其灵活性和参数化成为定义 Selenium 的驱动验收测试的。它通过一些语义注释来传递测试的参数,定义测试脚本的顺序并配置运行时的性能。用户可以通过配置来生成各式测试报告,十分方便。

  图 1. Selenium Grid2 的机制