简介:JavaScript在越来越多的web项目中被大量应用。通过本文,您将了解到百度的开源项目Tangram,一个JS库的持续集成实现方案。

本文通过三个方面对持续集成实现进行讲述:首先,如何跨越从Html方式的用例组织到自动化测试所必须的用例执行动态组织;接着,如何实现用例的跨浏览器分布式执行;然后,针对当前热门的hudson,我们如何配置、调整以使我们的测试框架可以像常规自动化测试项目那样应用hudson实现项目的持续集成。
所有后续内容中的相关代码,您都可以在github的Tangram项目中看到相应的实现细节。
自动化测试方案
在Tangram,项目的结构被定义成常见的src和test目录的格式,并,拆分良好架构的源码和用例之间采用了一一对应的关系。所以,我们可以很方便的用php实现用例执行页面的自动组织功能。

在成功实现并应用了测试自动执行后,我们的测试执行时间从原来的16人时缩短到了3分钟。

测试用例组织与单浏览器执行流程如下:
1、遍历源码目录并比对用例目录生产测试页必须的用例列表;
2、嵌入用例列表页面的js控制逻辑组织iframe方式挨个载入每一个用例和相应的源码;
3、通过QUnit定制用例的执行;
4、定制用例执行结束逻辑并整合测试结果,回传服务器;
5、服务器端生产测试记录xml文件,并根据需要发送邮件报告或统一存储;

图1. 用例列表展示
 

JavaScript项目持续集成方案_第1张图片



图2. 用例执行展示
 

JavaScript项目持续集成方案_第2张图片



分布式执行简介

Tangram项目声明支持几乎目前在中文区常见的所有浏览器,为支持这一目标,我们在测试执行机制中引入了STAF,通过命令调用方式,实现同步的,多测试机(IE6、7、8、9没有办法在同一测试机上安装)多浏览器方式启动用例执行。

执行流程如下:
1、通过web请求确认测试执行范围(以filter模式支持)并启动执行。
2、查询项目配置信息获取测试机信息和测试浏览器信息
3、通过staf远程启动浏览器访问服务器上的测试列表页面
4、待测试完毕后,整合完毕的测试报告收集

图3. 多浏览器测试结果展示(因为浏览器执行并发,我们的实际测试每次执行时间都在3分钟以内完成)
 

JavaScript项目持续集成方案_第3张图片


 

持续集成与hudson
在完成上述所有必须的JS测试自动化细节后,我们采取了一种相对便捷的方式使hudson可以启动单次测试并执行。

步骤:
1、配置hudson拉取源码的方式为github,并配置轮询相关参数
2、配置测试框架的项目目录指向源码在本地的存放路径
3、配置ant脚本:
a) 配置报告清理及其他环境准备操作;
b) 配置web请求方式实现项目测试的一次分布式批量执行;
c) 配置一次构建所需的出口为报告的产出文件路径;
d) 配置发布所需的压缩相关操作;
e) 配置邮件发送报告和自动上传压缩文件的发布方式支持;

为支持项目发布和个人开发模式同时可以使用hudson上的自动构建功能,我们根据项目在github上的存储细节分别实现ant脚本中的两种不同的编译执行模式:
1、为开发提供的构建流程:
a) 以单个源码方式启动的构建模式;
b) 支持通过diff获取变更源码和用例列表的执行模式;
c) 可定制的分支支持模式,便于每个开发人员特定的需求:
d) 提供简版报告和详细版本报告(开发中),用于跟进具体的项目状态和做问题分析之用;
e) 结合jslint(后续计划)支持的静态检查报告;
f) 通过jscoverage结合测试框架实现的覆盖率报告;

图4. Hudson单次测试结果记录
 

JavaScript项目持续集成方案_第4张图片



图5. 多人多项目开发模式支持
 

JavaScript项目持续集成方案_第5张图片



2、为发布提供的构建流程:
a) 固定的每日构建和应需求随时可以启动的构建,两种方式支持的启动模式,用于确认项目是否合适发布;
b) 以编译、压缩后的源码方式启动的构建模式;
c) 发布前的验证工作源码指向了编译压缩产出的用于上线的源码;
d) 构建成功后,自动发送上线步骤等;


图6.项目状态跟踪图(涂抹的部分为测试执行次数)
 

JavaScript项目持续集成方案_第6张图片



小结
本文介绍了如何使用hudson结合项目特性对JavaScript项目实现持续集成。

参考资料
 参考hudson/Jenkins-ci的web站点 提供了Hudson/Jenkins的使用手册。
 参考QUnit的web站点 提供了js单元测试框架的使用手册。
 Tangram在github的web站点
 Tangram的官方文档网站

帮助
Mail : [email protected]
BaiduHI : bellcliff
MSN : [email protected]

 

【本文转自 百度测试技术空间http://hi.baidu.com/baiduqa/blog/item/aef59085e24e2a33c65cc324.html
关注百度技术沙龙