最近使用Buildbot作了一个自动测试的框架,为了部署方便,能够把测试框架作成Docker镜像,方便部署。这里记录下过程,供你们参考。node
项目是一个Online的基于http的交易系统,其实就是一个Ad Exchange。而后为了对它进行自动化测试,咱们会另外启动一个mock server模拟DSP,而后再启动一个mock client来向exchange发送请求,exchange会与后端DSP通信后获得最终结果而且返回给client,client经过对收到结果的校验来进行测试。
另外,咱们但愿当exchange,mock client,mock dsp以及测试数据中的任意一个更新时,都去跑一遍完整的测试流程。python
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的一些依赖。git
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中,方便之后调用。web
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。docker
#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中运行他们。npm
cmd ["/usr/bin/supervisord", "-n"]
启动supervisor。ubuntu
基本的配置好比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出来运行就行啦,就这么简单!框架