使用Test Swarm对JavaScript进行集成测试
作者 Dionysios G. Synodinos译者 张龙 发布于 2009年4月1日 上午12时9分
Ruby, .NET, Java 主题 RIA, JavaScript 标签 jQuery, 持续集成
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
分享到:
相关推荐
Jenkins mavn git docker-compose swarm 构建持续集成及一键式部署
在本案例中,"pso_test.rar_The Test_pso swarm"是一个包含C语言实现的PSO算法测试程序,主要文件为“pso_test.c”。通过深入分析这个源代码,我们可以详细了解PSO的基本原理以及如何用C语言进行实现。 PSO算法的...
swarm, 群模拟器 javascript/浏览器客户端 群模拟器。 从只有少数虫子和一小堆肉开始,建立一个无穷大的巨大外星 Bug 群。Evan,,swarm,generator,generator,generator,generator,generator,generat
这有助于代码的可读性和可维护性,同时允许对个体行为进行单独测试和调试。 6. **调试与优化**:Java的调试工具如JVisualVM和IntelliJ IDEA的内置调试器可以帮助开发者跟踪Swarm仿真的运行过程,识别并修复可能出现...
8. **监控和日志**:Swarm集成了Prometheus、Grafana等工具,方便对集群性能进行监控。同时,日志可以通过Fluentd、Logstash等工具收集并存储,便于分析和排查问题。 压缩包中的"Swarm-2.2-java"可能包含以下内容:...
10. **测试与验证**: 良好的软件工程实践要求对代码进行测试和验证,确保其正确性和可靠性。这可能包括单元测试、集成测试和性能测试。 通过以上分析,我们可以看到`swarm例程_agent2d`是一个涉及多智能体系统、...
Swarm的核心特点在于其**面向对象**的设计,使用Objective-C编程语言,这是一种C语言的扩展,支持类的创建和实例化,非常适用于构建具有独立行为的主体。**层次结构**是Swarm程序的另一个关键特性,通常由"observer ...
通过学习这三份文档,你将能够深入理解 Swarm 仿真的基本概念,掌握如何使用 Swarm 框架进行多智能体系统的建模与仿真,以及如何利用 jSimpleBug 这样的工具进行更便捷的编程。无论是学术研究还是工程实践,这些资料...
5. **测试与运行**:在Cygwin终端中运行编译后的Swarm二进制文件,进行测试和调试。 此外,理解Swarm的源代码可以帮助你深入学习Docker集群的工作原理,包括: 1. **调度算法**:Swarm采用的调度策略,如何根据资源...
### Swarm安装与使用教程知识点汇总 #### 一、Swarm简介 Swarm是一款开源软件平台,主要用于模拟复杂系统,特别是那些具有多个相互作用主体(agents)的系统。它支持多种编程语言,包括Java和Objective-C,并提供了...
Docker Swarm 的集成是 Shipyard 的核心功能之一,Swarm 是 Docker 的原生集群管理系统,负责处理容器的调度和分布,以实现对集群资源的有效利用。 在了解 Shipyard 之前,我们先来认识一下 Docker。Docker 是一个...