制作基于Buildbot的自动化测试系统Docker镜像
Buildbot in Docker
前言
最近使用Buildbot做了一个自动测试的框架,为了部署方便,可以把测试框架做成Docker镜像,方便部署。这里记录下过程,供大家参考。
项目介绍
项目是一个Online的基于http的交易系统,其实就是一个Ad Exchange。然后为了对它进行自动化测试,我们会另外启动一个mock server模拟DSP,然后再启动一个mock client来向exchange发送请求,exchange会与后端DSP通讯后得到最终结果并且返回给client,client通过对收到结果的校验来进行测试。
另外,我们希望当exchange,mock client,mock dsp以及测试数据中的任意一个更新时,都去跑一遍完整的测试流程。
关键点
- 如何启动server
buildbot里直接启动web server会导致buildbot持续等待进程结束,无法到下一步。而这里我们需要启动exchange和mock dsp两个server。处理办法就是把这两个server利用supervisor来做成service,这样buildbot只需要作为一个client发出start/end命令即可。具体实施时,需要在docker镜像生成时去写supervisor的conf文件,添加service。而在buildbot进行build时,去调用supervisorctl start/end命令启停service。
Dockerfile以及master.cfg
- Dockerfile
from ubuntu:14.04
run /bin/echo -e "\
deb http://mirrors.163.com/ubuntu/ trusty main multiverse restricted universe\n\
deb http://mirrors.163.com/ubuntu/ trusty-security main multiverse restricted universe\n\
deb http://mirrors.163.com/ubuntu/ trusty-updates main multiverse restricted universe\n\
deb http://mirrors.163.com/ubuntu/ trusty-proposed universe restricted multiverse main\n\
deb http://mirrors.163.com/ubuntu/ trusty-backports main multiverse restricted universe" >\
/etc/apt/sources.list
run apt-get update
run DEBIAN_FRONTEND=noninteractive apt-get install -y python-pip python-dev \
git sudo ssh nodejs npm supervisor lsof python3-setuptools python3-dev python3-pip
run pip install buildbot buildbot_slave
首先加入国内源,以及安装必须软件。我们的测试系统是基于python的,所以加入了python3的一些依赖。
run ln -s /usr/bin/nodejs /usr/bin/node
run mkdir /programs
workdir /programs
#install mock dsp && mock client
run git clone https://***.git
run git clone https://***.git
run cd mockdsp; python3 setup.py install
run cd mockclient; python3 setup.py install
这里mock dsp和client都会自动安装到系统path中,方便以后调用。
run mkdir -p /data/buildbot
workdir /data/buildbot
#create master
run buildbot create-master master
ADD master.cfg master/master.cfg
#create slaves
run buildslave create-slave exchange localhost:9989 exchange exchange
安装buildbot,并且添加自己写的master.cfg。
#write supervisor configuration file
run /bin/echo -e "\
[program:exchange]\n\
command=npm start\n\
directory=/data/buildbot/exchange/builder-exchange/exchange\n\
autostart=false\n\
\n\
[program:mockDsp]\n\
command=/usr/local/bin/mockDsp\n\
directory=/tmp\n\
\n\
[program:master]\n\
command=twistd --nodaemon --no_save -y buildbot.tac\n\
directory=/data/buildbot/master\n\
\n\
[program:slave]\n\
command=twistd --nodaemon --no_save -y buildbot.tac\n\
directory=/data/buildbot/exchange\n" > \
/etc/supervisor/conf.d/buildbot.conf
把exchange, mockDSP都做成service,另外buildbot master和buildbot slave是肯定要做成service的,这样可以在一个docker中运行他们。
cmd ["/usr/bin/supervisord", "-n"]
启动supervisor。
- master.cfg
基本的配置比如slaves,端口,codebases我就不贴出来了。这里列出就列出supervisor启动用的Steps
####### BUILD STEPS
factory = util.BuildFactory()
...
factory.addStep(steps.ShellCommand(
command=['supervisorctl', 'start', 'exchange']
, description="starting exchange"
, descriptionDone="start exchange"
, workdir="exchange"))
factory.addStep(steps.ShellCommand(
command=["supervisorctl","restart","mock"]
, description="restarting rmock"
, descriptionDone="rmock restarted"
, workdir="rmock"))
#跑完测试后
factory.addStep(steps.ShellCommand(
command=["supervisorctl", "stop", "exchange"]
, descriptionDone="shutdown exchange"
, workdir="testData"))
#mock server会一直运行
然后把image build出来运行就行啦,就这么简单!
制作基于Buildbot的自动化测试系统Docker镜像的更多相关文章
- 制作基于软盘的Linux系统
制作基于软盘的Linux系统(张宏伟.欧阳平平 2001年07月26日 11:22) 嵌入式Linux由一个几百KB的kernel(内核)和一些根据需要进行定制的系统模块组成.由于Linux是开放源代 ...
- 制作JavaCV应用依赖的基础Docker镜像(CentOS7+JDK8+OpenCV4)
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 通过IDEA制作包含Java应程序的Docker镜像
IDEA官网在IDEA中把Java App制作成Docker镜像并启动一个容器运行 在idea上使用docker作为java的开发环境[][] ubuntu+docker+docker-compose ...
- 使用debootstrap制作debian-jessie系统docker镜像
先看一下Docker官网提示:In general, you'll want to start with a working machine that is running the distribut ...
- 转:如何制作一个定制的 PHP 基础 Docker 镜像(一)
原文来自于:http://open.daocloud.io/ru-he-zhi-zuo-yi-ge-ding-zhi-de-php-ji-chu-docker-jing-xiang/ 目标:准备一个定 ...
- 支持HTTP2的cURL——基于Alpine的最小化Docker镜像
cURL是我喜欢的开源软件之一.虽然cURL的强大常常被认为是理所当然的,但我真心地认为它值得感谢和尊重.如果我们的工具箱失去了curl,那些需要和网络重度交互的人(我们大多数人都是这样的)将会陷入到 ...
- Docker容器打包成镜像 - OpenDaylight官方 SDN Hub Tutorial VM 的docker镜像
由于工作需要,在看OpenDaylight (一个SDN的开源控制器) 官方Tutorial有一个比较基础且介绍比较详细的文档(http://sdnhub.org/tutorials/opendayl ...
- Docker源码分析(九):Docker镜像
1.前言 回首过去的2014年,大家可以看到Docker在全球刮起了一阵又一阵的“容器风”,工业界对Docker的探索与实践更是一波高过一波.在如今的2015年以及未来,Docker似乎并不会像其他昙 ...
- Docker 镜像仓库为什么要分库分权限?
先说一个事故案例: 场景:某大型互联网电商公司,使用一个镜像仓库管理所有Docker镜像.开发者打出的镜像上传到唯一的镜像库,测试通过后,运维环境的 Kubernetes 直接从这个库里拉取镜像,所有 ...
随机推荐
- python之list去重
问题就是对一个list中的新闻id进行去重,去重之后要保证顺序不变. 直观方法 最简单的思路就是: 复制代码代码如下: ids = [1,2,3,3,4,2,3,4,5,6,1]news_ids = ...
- windows平台 - 0基础学习node.js(一)
首先得明白node.js做什么用的: 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台. Nod ...
- 巨蟒python全栈开发-第7天 基本数据类型补充&深浅拷贝
1.基本数据类型补充 2.深浅拷贝 DAY7-基本数据类型(基本数据类型补充&深浅拷贝) 本节主要内容: 1.补充基础数据类型 (1)join方法 (2)split方法 (3)列表不能在循环时 ...
- javascript数组中的方法
数组中的方法 今天我们来说一下,对数组进行操作的几种方法: //添加 a=[];//空数组 a[0]="我是第一个"; a[2]="我是第三个"; ...
- selenium入门基础知识
内容转载自:http://blog.csdn.net/huangbowen521/article/details/7816538 1.selenium介绍: Selenium是一个浏览器自动化操作框架 ...
- 【我的Android进阶之旅】Android使用getIdentifier()方法根据资源名来获取资源id
有时候我们想动态的根据一个资源名获得到对应的资源id,就可以使用getResources().getIdentifier()方法来获取该id.然后再使用该id进行相关的操作. 1.Demo示例 下面用 ...
- TimeQuest学习总结
1. 基本时钟约束:creat_clock 2. 生成时钟约束:creat_generated_clock 3. I/O输入输出约束:(1)纯组合逻辑:set_max_delay & set_ ...
- go——类型的本质
在声明一个新类型之后,声明一个该类型的方法之前,需要先回答一个问题:这个类型的本质是什么. 如果给这个类型增加或删除某个值,是要创建一个新值,还是要更改当前的值? 如果是要创建一个新值,该类型的方法就 ...
- UML_visio安装及使用
安装:百度云安装visio 64bit 类图在visio当中 用例图 来自为知笔记(Wiz)
- python中json怎么转换成字典
json的标准格式:要求必须 只能使用双引号作为键 或者 值的边界符号,不能使用单引号,而且“键”必须使用边界符(双引号)