buildbot自动化测试工具
搭建一个完全自动化的buildbot服务器相对来说比较麻烦,所以打算开几条博客来具体说明,我以git作为本次搭建测试自动化测试的例子,
由于本次自动化测试服务器需要一台buildmaster主机、两台buildslave(linux和windows)主机,所以本次搭建需要三台虚拟机
最近公司的项目中的测试用例越来越多,并且项目必须要在linux和Windows下运行,每次提交patch后,我们只测试提交patch的部分,而没有对其他测试用例进行测试,为了防止由于提交patch而影响了其他功能,打算找一个自动化测试工具,在每次提交patch之后能够对所有的功能和测试用例进行测试,于是在网上收集了一些资料之后决定使用buildbot作为公司的自动化测试工具。
一、BuildBot简介
BuildBot是一个开源的基于python的持续集成系统,它能够以下三种方式触发相应的自动构建和测试运行,从而迅速的发现问题所在,同时指出造成这个错误的开发人员,当然我们还可以通过页面直观的了解到当前所有和master绑定的任务以及各种测试状态。
- 监控代码管理库的变化从而触发构建测试任务
- 通过配置从而定时触发构建测试任务
- 通过配置从而允许强制触发构建测试任务
因为它有很多比较好的特点:
- 跨平台:可以运行在各种平台上,实现不同平台上的测试
- 可以处理各种语言编写的程序,例如C,Java,Python
- 环境要求低并且配置简单:仅仅需要Python,和网络库Twisted
- 结果的交付方式多,例如Email,webpage,IRC或者其他协议工具
- 通过子类继承并重写父类从而灵活的配置
- 很好的实现了分布式部署和集成工作
BuildBot用python写的,该python程序只依赖python环境和Twisted(一个python网络框架),可以在很多平台运行。 自动化构建一般包括自动下载源码,编译,测试,打包。
二. buildbot工作原理
2.1系统架构
Buildbot包含一个服务端,一个或多个客户端。以星形拓扑结构连接。需要配合GIT,SVN,CVS等相关版本工具使用。master可以给任意一个slave发送命令,slave执行master发送的命令并返回执行的结果。
来回发送大量命令是不太合适的,可以在slave中写出一个总的执行脚本,而master发送的命令只是启动这个脚本。
Buildbot的原理是git,SVN等源码服务器上代码发生变化后,buildmaster(服务端)通知连接到它上的buildslave(客户端)从git或SVN服务器上自动下载源码,编译,测试,打包。最后把各个buildslave的自动化构建的结果搜集起来在web上展现,或通过email,IRC等方式通知相应的项目开发人员。
2.2测试状态结构体系
master有一个总的status对象负责监控所有连接到自己的slave的连接状态对象,通过这个连接对象获得完整构建的状态及层次结构。
在master.cfg配置文件中,控制各个status对象,获得每个slave的连接状态,以前的构建信息等,通过浏览器创建一个url调用html.Waterfall插件的query-on-demand接口可以获得Builder, Build, Step, and LogFile等各种请求信息。
每一次的项目构建都可以产生一个status对象,可以通过MailNotifier每一次构建都建立一个邮件列表。
三、安装
3.1 环境搭建
Buildbot所需要的Python依赖环境比较多,而且版本依赖比较严重,0.8.x和0.9.x中很多类的使用以及命名有很大区别本教程的master是以0.9.0b7这个版本来搭建的。
要求:
- Python 版本:2.7
官方手册中要求的是2.6或2.7,不能使用其他的版本 - Twisted 版本:11.0.0及以上
- sqlite3 版本:3.7.0及以上
- Jinja2 版本:2.1及以上
- SQLAlchemy 版本:0.8.0及以上
- SQLAlchemy-Migrate 版本:0.9.0及以上
- Python-Dateutil 版本1.5及以上
- Autobahn0.10.0及以上
- windows下还需要安装Pywin32支持
建议安装pip,由于buildbot版本更新以及python的更新,一些依赖可能并没有在官方文档里面显示出来,使用pip能使我们的安装更便捷一些
3.2 buildmaster环境搭建
环境:VMware Workstation
系统:winXP
- 安装Python
双击.msi,一路next即可。安装完成之后需要在环境变量path中加入Python路径 - install Twisted
安装 (解压进入此目录,下同)
$sudo python setup.py install
- 安装 zope.interface
安装命令:
$python setup.py build
$sudo python setup.py install
- 安装 buildbot(依赖Twisted和Python)(本例是在XP下建立master,Ubuntu下建立slave)
安装
$python setup.py build
$sudo python setup.py install
如果有安装出现Unable to find vcvarsall.bat的问题是没有安装Microsoft Visual C++ Compiler Package for Python 2.7的缘故,安装之后还需要配置环境变量,然后需要修改注册表:
- 打开注册表编辑器
- 配置
2.1. 如果你安装的Python是32位的,则,创建如下项:
HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\Setup\VC
2.2. 如果你安装的Python是64位的,则,创建如下项:
HKEY_CURRENT_USER\Software\Wow6432Node\Microsoft\VisualStudio\9.0\Setup\VC- 并在此项下新建字符串值:
- 名称:productdir。
- 数据:vcvarsall.bat所在路径。
- 注意:路径中不包含最后的反斜杠。
- 检测buildbot是否安装成功
终端下执行如下命令:
$buildbot --version
Buildbot version: 0.9.1
Twisted version: 16.6.0
- 建立buildbot master
在终端中执行如下命令:
$buildbot create-master buildbot_master
该命令会在当前目录下生成buildbot_master目录,且该目录下有一个配置文件为master.cfg.sample
1). 在启动之前,可以测试下配置文件。
终端下执行如下命令:
$cd buildbot_master
$mv master.cfg.sample master.cfg
$buildbot checkconfig master.cfg
正确则:Config file is good!
2).启动、停止
$cd buildbot_master
$buildbot start ./
$buildbot stop ./
到这里,buildmaster比较麻烦的时候就来了,在这一章节我不详细介绍master.cfg里面的各种配置,而是让大家能够让我们的master服务器正常跑起来————在浏览器中可以访问我们的buildbot。
- 运行buildmaster
buildbot是在web页面对我们的项目测试以及代码监控进行显示,对于一个局域网下,只要我们能够连接到这台虚拟机,我们就可以通过web页面的形式来随时了解我们的slave的连接以及代码的变化和以往的测试情况。
首先我们先要知道我们master主机的IP地址,在终端下执行如下命令:
$ipconfig
Ethernet adapter 本地连接:
Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 192.168.1.2
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.1.1
之后打开我们的master.cfg文件,找到c[‘buildbotURL’] 和c[‘www’] 这两个属性,修改他们的URL(本地主机的IP地址)和端口号。如下图:
保存我们的master.cfg文件,然后用启动命令启动我们的buildbot。
在上一节我们启动了buildmaster,细心的同学会发现在我们的buildmaster文件夹目录下多出来了一个twistd.log日志文件,由于buildbot所依赖的插件比较多,第一次运行不见得能成功。所以我们需要去twistd.log文件查看我们的buildbot是否启动成功,如果不成功会在.log中找到我们的出错信息。
从这些错误信息中我们可以得到我们想要的信息,这个说明我们的buildbot缺少waterfall_view这个插件,我们可以去buildbot官网上去下载安装,安装步骤如buildbot安装步骤。
如果我们下载成功,我们可以再任意一台可以ping通这台虚拟机的的电脑的浏览中输入我们在配置文件夹里面添加的url和端口号,就可以访问的我们的buildbot。
这样我们就吧我们的buildbot搭建成功了,在下一节,我会详细介绍一下master.cfg配置,和buildslave的配置,搭建一个完整的buildbot服务器,对我们的代码进行监控、测试。