使用Test Swarm对JavaScript进行集成测试

jQuery JavaScript程序库的创建者John Resig发布了Test Swarm,该平台用于对客户端JavaScript进行分布式的持续集成测试。由于对传统JavaScript测试环境(无法扩展)深感失望,John的新项目(目前还是私有的alpha版)旨在为众多的开发者和社区提供一个用以测试浏览器的系统。

正如John所述,在各种不同的浏览器中测试jQuery难度非常大:

我们力求在jQuery项目中支持所有主流浏览器的当前版本、最新发布版以及即将发布的每日构建版/beta版(我们根据用户升级浏览器的频率对这些支持标准进行了一些平衡——Safari与Opera用户的升级频率非常高)。

在本文发布时一共包含12个浏览器。
  • Internet Explorer 6、7、8。(不包括8中的7模式)
  • Firefox 2、3及每日构建版
  • Safari 3.2、4
  • Opera 9.6、10
  • Chrome 1、2

当然了,这只是Windows平台上的,还不包括OS X及Linux。对于jQuery项目我们采取了明智的策略,通常只在一种平台上进行测试,但理想情况下还需要在所有平台上测试Firefox、Safari及Opera(这三个是跨平台的浏览器)。最后的结果是在每一次提交前后我们都要在12个独立的浏览器上运行10个独立的测试套件。跨浏览器的JavaScript测试的可伸缩性还不行

如果测试需要与用户进行交互,那么这对于jQuery乃至任何大量使用JavaScript的Web应用来说都是糟糕透顶的事情了。

一些测试套件(如Yahoo UI、jQuery UI及Selenium)可以对用户交互进行自动化(你可以编写类似于“点击按钮”这样的测试)。大多数情况下这能满足我们的要求,但所有这些仅仅是对实际用户交互的一种模拟。没有什么东西可以与让人手工运行一些容易重现(并且可验证)的测试相提并论。

这是最大的可伸缩性问题。用自动化的测试套件乘以想要运行的测试个数,手工在12个浏览器中运行100个测试简直是天方夜谭。一定还有更好的办法,因为很明显: 跨浏览器的JavaScript测试的可伸缩性还不行

像Selenium Grid这样的解决方案有几个限制:

  • 据我所知,Selenium Grid需要用Selenium来运行测试。目前还没有哪个主流的JavaScript程序库使用了Selenium(这么做的代价也不小)。
  • 它无法测试非桌面机。每个服务器都必须运行一个后台程序来处理众多任务,这样移动设备就不行了。
  • 它无法测试未知的浏览器。每个浏览器都需要特殊的回调代码以让Selenium加载浏览器,这样未知的浏览器(如IE 8、Opera 10、Firefox Nightly及Chrome)可能就没法运行了。
  • 最重要的是:Selenium Grid要求你拥有大量机器来运行测试,这不太可行,尤其是在分布式的开源JavaScript开发下更是如此。因此我们需要更加行之有效的解决方案。

John提出的解决方案Test Swarm基于JavaScript客户端,该客户端会持续不断地向中央服务器发出连接请求以运行测试。服务器收集测试套件并将其发送到各自的客户端上:

以下是我设想的Test Swarm的工作方式:开源的JavaScript程序库将测试套件提交到中央服务器上,同时用户也会参与进来。程序库的用户需要在其日常的工作中额外开两个浏览器窗口来辅助我们的工作,这样他们会感觉到也在参与着项目(其实就是这样!)。

程序库还可以将手工测试发给用户。新的手工测试到来时会通知用户(通过声音提示?),这样他们就能迅速执行了。

用户提供的这些帮助也不是无偿的:我们可以统计参与最积极的用户,然后对前几名进行嘉奖(T恤、杯子、书等等)。

InfoQ联系到了John Resig以进一步了解相关的信息。

InfoQ:Test Swarm基于何种协议?

基于MIT协议(服务器端采用PHP和MySQL,客户端是一些简单的JavaScript)。

InfoQ:除了框架所有者以外,你认为它对于其他组织有何价值?

我认为这对于其他组织和厂商都大有裨益。下面是我设想的成长计划:
  • 首先开放给主流的JavaScript程序库(他们已经建立好了测试套件和测试体制)。
  • 接下来开放给其他开源的JavaScript项目。
  • 然后开放给其他组织,只要这些组织允许匿名用户运行其测试就行。
当然通过这些步骤,任何组织都可以轻松下载服务器软件并运行自己的swarm实例——无需通过主要的Test Swarm服务器的测试。

在最初的声明中,John还提到了Test Swarm的“corporate”版:

Test Swarm的“corporate”版已经引起了很多人的兴趣。目前对此还没有什么计划(除了以开源的形式发布该软件),我倒是想留点空间以便将来的扩展(或许用户会因手工测试而得到一些报酬——就像Mechanical Turk测试JavaScript那样——我不知道,但确定的是其成长空间很大)。

如果对Test Swarm感兴趣可以索取其alpha版。

还可以通过InfoQ上的JavaScript、jQuery、富Internet应用及持续集成频道了解更多信息。

查看英文原文:Crowdsourcing JavaScript Integration Testing with Test Swarm

你可能感兴趣的:(使用Test Swarm对JavaScript进行集成测试)