JavaScript项目持续集成方案-阿里云开发者社区

开发者社区> 技术小美> 正文

JavaScript项目持续集成方案

简介:
+关注继续查看

简介: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. 用例列表展示
 



图2. 用例执行展示
 



分布式执行简介

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

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

图3. 多浏览器测试结果展示(因为浏览器执行并发,我们的实际测试每次执行时间都在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单次测试结果记录
 



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



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


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



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

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

帮助
Mail : yangbo@baidu.com
BaiduHI : bellcliff
MSN : cliff_bell.cn@hotmail.com

 















本文转自百度技术51CTO博客,原文链接:http://blog.51cto.com/baidutech/744426,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用 Jenkins 实现 Java 项目的持续集成和持续交付
本文参考中国 DevOps 社区核心组织者刘征老师在中国 DevOps 社区济南 Meetup 活动上分享的 "用Jenkins实施CI/CD工作坊",展示如何使用 Jenkins 实现 Java 项目的 CI/CD (持续集成/持续交付)。
2115 0
scrapy 爬取百度知道,多spider子一个项目中,使用一个pielines
爬取过程中 遇见 百度蜘蛛反爬 robot.txt,我们可以在scrapy 的setting.py 配置文件下配置 ROBOTSTXT_OBEY = False 最终代码 # -*- coding: utf-8 -*- from scrapy.spider import Spider from scrapy.contrib.spiders import CrawlSpi
2515 0
JavaScript 编程精解 中文第三版 七、项目:机器人
七、项目:机器人 原文:Project: A Robot 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 部分参考了《JavaScript 编程精解(第 2 版)》 […] 置疑计算机能不能思考 […] 就相当于置疑潜艇能不能游泳。
963 0
为Scrapy项目提供多个Spider
为Scrapy项目提供多个Spider scrapy startproject project name 在终端输入上述命令后,会根据生成一个完整的爬虫项目 此时的项目树如下 |-- JobCrawler |-- __init__.
1356 0
在 Ionic2 TypeScript 项目中导入第三方 JS 库
原文发表于我的技术博客 本文分享了在Ionic2 TypeScript 项目中导入第三方 JS 库的方法,供参考。原文发表于我的技术博客 1. Typings 的方式 因在 TypeScript 中引用之前的 JS 库还需要引入对应的类型定义,也就是 .d.ts 文件。
1040 0
这台计算机上缺少此项目引用的 NuGet 程序包-缺少的文件是 ..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerP
异常处理汇总-开发工具  http://www.cnblogs.com/dunitian/p/4522988.html 协助开发里面总有几个是极简爱好者,但是呢删了不该删的就会影响项目开发,下面看下完整错误信息: 这台计算机上缺少此项目引用的 NuGet 程序包。
997 0
JavaScript 编程精解 中文第三版 十二、项目:编程语言
十二、项目:编程语言 原文:Project: A Programming Language 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 部分参考了《JavaScript 编程精解(第 2 版)》 确定编程语言中的表达式含义的求值器只是另一个程序。
1083 0
+关注
4435
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载