(一)先看测试业务的情况:

有各种各样的任务包括代码构建、部署搭建、单元测试、功能自动化测试(包括许多模块的功能自动化测试,有十几个居多),性能测试、正确性验证;复杂一点的是这些任务在不同的测试阶段中都必须部署一套,一般测试至少都需要有三套环境:dailyrun环境、两套test环境用来测试不同版本。日常每天有每日构建环境,正式版本发布有发布环境。要做到持续集成,则每天晚上都需要运行所有的构建、部署、ut、ft、性能、正确性,这些任务达到五十五个,彼此之间存在依赖关系,功能测试则由于资源有限不得不也做成前后依赖模式,占用资源比较多的分开运行。

问题有:

(1)原本使用jenkins默认的任务依赖模式,修改任务调度次序的时候就会很悲剧,每个回归都需要从头到尾的修改一次;

(2)当前一个任务由于各种原因超时或者是执行失败的时候后面所有任务都等待,到了第二天要手工全部杀掉,否则无法运行;

(3)任务过多以后查找也很麻烦,难以找到对应任务的链接,每次翻都翻到手痛;遇到版本发布更痛苦,每个jenkins任务中git地址的版本都需要修改。

(4)测试结果用邮件发送的,没有地方可以看到全部回归的整体情况,比如某天挂了,并不能立即知道是build阶段、deploy阶段、ut阶段或者是ft的具体某个阶段的问题,还是要一层层去调查;

(二)我们的解决方案:

首先,这个系统要能够替代jenkins的任务依赖关系,在修改任务依赖的时候可以通过全局配置,这样解除掉问题1;

其次,每个任务设置超时时间去监控jenkins执行情况,当超时的时候杀死掉当前任务,同时不影响下面任务的执行,这就解决问题2;

第三,把jenkins信息和每个阶段信息存放到mysql中,其中配置修改直接通过调用jenkins api,修改git地址,修改配置相关信息,这样就解决问题3;

第四,当第一个任务做完以后,调度独立以后,可以获取到每个阶段执行是否成功的情况,测试报告同时上传到mysql数据库中,前端再用个web系统展示。

jenkins 提供了一整套api体系,可以触发任务,获取任务状态,可修改任务配置,将这些调用串起来。

为了能有效利用回归机器资源,设置机器池子,运行jenkins任务的时候从池子中随机获取机器进行下发,这样全部配置信息都来自于数据库中,规避测试过程中各种配置不对的情况。

一个tip对于jenkins slave机器本身,使用ssh模式启动,jenkins master会通过监控手段确保slave failover操作,当slave挂的时候master会启动,不需要人工操作。

下面是任务依赖的配置

[
[{"jobname":"Cupid","slave":"TEST3-JK-10"}],
[{"jobname":"Cupid-HiveTest","slave":"TEST3-JK-1"}],
[{"jobname":"git-console","slave":"TEST3-JK-10.1"}],
[{"jobname":"git-console-public","slave":"TEST3-2"}],
[{"jobname":"OpenMrLocal","slave":"TEST3-JK-10"}],
[{"jobname":"OpenMrOnLot","slave":"TEST3-JK-10"}],
[{"jobname":"Graph","slave":"TEST3-JK-1222"}],
[{"jobname":"MR","slave":"TEST3-JK-101"}],
[{"jobname":"SqlTask-Finance","slave":"TEST3-JK-1180"}],
[{"jobname":"SqlTask-Lot","slave":"TEST3-JK-1010"}],
[{"jobname":"Moye","slave":"TEST3-JK-10"}],
[{"jobname":"Security","slave":"TEST3-JK-1"}],
[{"jobname":"SqlTask-Chinese","slave":"TEST3-JK-1"}],
[{"jobname":"SqlTask-ServiceMode","slave":"TEST3-JK-1"}],
[{"jobname":"SqlTask-Taobao","slave":"TEST3-JK-1"}],
[{"jobname":"XLib","slave":"TEST3-JK-1"}],
[{"jobname":"RESTFulAPI","slave":"TEST3-JK-1"},{"jobname":"RESTFulAPI-AdminTask","slave":"TEST3-JK-1"},{"jobname":"RESTFulAPI-Event","slave":"TEST3-JK-1"}],
[{"jobname":"CopyTask","slave":"Test-1"}],
[{"jobname":"ReplicationTask","slave":"Test-10"}],
[{"jobname":"MetaTest-FromFinance","slave":"TEST3-JK-1"}],
[{"jobname":"Console-UT","slave":"TEST3-JK-1693"}],
[{"jobname":"SDK-UT","slave":"TEST3-JK-100"}],
[{"jobname":"PL-492","slave":"1"}],
[{"jobname":"FT-gcc492","slave":"Test-vm-13"}],
[{"jobname":"RESTApi-FT","slave":"Test-vm-13"}],
[{"jobname":"FT","slave":"Test-vm-10"}],
[{"jobname":"Api-FT-gcc492","slave":"Test-vm-1"}],
[{"jobname":"CppSdk-FT-gcc492","slave":"Test-vm-1"}],
[{"jobname":"OldSdk-FT-gcc492","slave":"Test-vm-1"}],
[{"jobname":"Lot","slave":"TEST3-JK-1"}]
]

该配置文件中用逗号分隔的表示任务是并行执行的关系,放在一个中括号里面用大括号分隔表示其前后存在依赖关系,执行完毕前面的才是后面的。下面是调用这个配置的主程序入口,这里的startbuilds会去读取任务配置,API是对各种jenkins api的包装

# -*- coding: utf-8 -*-
import jenkins
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
sys.path.append("./pkg")
sys.path.append("./pkg/jenkinsapi")
sys.path.append("./pkg/pytz")
sys.path.append("./pkg/requests")
sys.path.append("../watchmen/watchmen_upload/")
import common ,cfg ,watchmen_upload
from param import get_job_xml,get_job_slave,get_job_cfgparam,get_job_child,getAllJob,gendict,rerun,build_job_poll,build_job if __name__ == "__main__":
print "start job dependencies"
if len(sys.argv) < 2:
print "please input the jobName"
exit(1) args = sys.argv[1]
print "jobName===>"+args
api = jenkins.API() stime= common.getNow()
api.startbuild(args)

下面的函数对jenkins里面的git配置进行修改

def modify_branch(jobname,new_branch):
print(jobname)
if jobname=="None" or jobname is None :
return
jkserver=jenkins.API().get_jenkins_instance()
job=jkserver.get_job(jobname)
try:
branch=job.get_scm_branch()
except Exception,e:
print e
return
print(branch)
job.modify_scm_branch(new_branch)
branch=job.get_scm_branch()
print(branch)

测试运行结果收集这块,测试平台提供一个restful接口,每个模块的报告最后调用一下这个接口,首先把自己的报告上传到远程的一个ftp上面,然后再把模块名称、环境名称、成功失败用例个数,这些信息上报上去,接口会存放这些信息到数据库中,在前端webserver予以展示。

一个基于集成jenkins的测试平台的更多相关文章

  1. Gitlab + Jenkins 构建,发布一个基于Go的Gin测试项目

    部署Go项目简介 对于golang的发布,之前一直没有一套规范的发布流程,来看看之前发布流程: 方案一 • 开发者本地环境需要将环境变量文件改为正式环境配置 • 编译成可执行文件 • 发送给运维 • ...

  2. 基于Windows服务器,从0开始搭建一个基于RTSP协议的直播平台

    作案工具下载 EasyDarwin 服务端程序,用来接受推流和拉流 FFmpeg 可以用来推流视频数据到服务端,也可以从服务端拉流下来播放,也可以从一个服务端拉流下来,转推到另一个服务端去. Easy ...

  3. dapi 基于Django的轻量级测试平台三 接口关联

    QQ群: GitHub:https://github.com/yjlch1016/dapi 一.接口关联思路: 在接口测试中, 很多场景下, 上一个接口的出参要作为下一个接口的入参, 即上一个接口的响 ...

  4. dapi 基于Django的轻量级测试平台一 设计思想

    GitHub:https://github.com/yjlch1016/dapi 一.项目命名: dapi:即Django+API测试的缩写 二.设计思想: 模拟性能测试工具JMeter的思路, 实现 ...

  5. dapi 基于Django的轻量级测试平台七 怎样部署到生产环境

    QQ群: GitHub:https://github.com/yjlch1016/dapi Nginx+uWSGI 前置条件:以下所有操作均在root账号下面进行如果不是root用户请注意权限问题因为 ...

  6. dapi 基于Django的轻量级测试平台六 怎样使用压测功能

    QQ群: GitHub:https://github.com/yjlch1016/dapi JMeter非GUI模式下: jmeter -n -t jmx脚本 -l jtl文件 -e -o 测试报告目 ...

  7. dapi 基于Django的轻量级测试平台五 测试报告

    QQ群: GitHub:https://github.com/yjlch1016/dapi 一.柱状图 二.饼状图

  8. dapi 基于Django的轻量级测试平台四 任务设置

    QQ群: GitHub:https://github.com/yjlch1016/dapi 一.间隔时间: 二.定时时间: 三.任务设置: 四.任务结果:

  9. dapi 基于Django的轻量级测试平台二 前端页面

    QQ群: GitHub:https://github.com/yjlch1016/dapi 一.登录页login.html: 二.首页home.html: 三.产品线列表页product.html: ...

随机推荐

  1. Gradle的安装与配置

    Gradle的下载地址:http://gradle.org/gradle-download/ Tips:要先安装JDK并配置其环境变量. 下载完成后将里面的文件解压出来,如下图所示: 添加一个名称为G ...

  2. epoll讲解

    首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象.       不管是文件,还是套接字,还是管道,我们都可以把他们看作流.       之后我们来讨论I ...

  3. 简洁判断一个byte中有多少位为1的bit?

    以下是Brian W. Kernighan公开的一个方法 unsigned bit_count(unsigned v) { unsigned int c; //置位总数累计 ; v; c++) { v ...

  4. Android打包程序

    右击项目->导出export next,完成相关信息填写将得到.apk文件,即可部署到手机上. 第一次: 然后打开目录就可以看到生成的apk,可以发布到各大市场上.

  5. 在Objective-C声明Block的几种方式

    1.作为局部变量 returnType (^blockName)(parameterTypes) = ^returnType(parameters) {...}; 2.作为类的属性 @property ...

  6. JAVA_Reflection1

    package com.qf.reflection1; import java.lang.reflect.Constructor; import java.lang.reflect.Field; im ...

  7. ssh docker container

    docker run -d -p 127.0.0.1:33301:22 centos6-ssh ssh登陆容器: ssh root@127.0.0.1 -p 33301

  8. linux系统安装(虚拟机以及linux的下载与安装)

    最近开始研究linux系统,以前接触linux系统只是一些简单的命令,例如: pwd:查看当前目录   ls:遍历目录    cd :在目录之间切换等. linux系统是基于unix系统开发的,是一个 ...

  9. 我的第一篇——nginx+naxsi总结篇1

    今天是我正式在Linux下安装nginx的第一天吧,搜索,查看,安装,这之间肯定是或多或少的遇到了很多的问题,不管是大的还是小的,都应该记录下来,或许以后还会用到,或许会帮到其他人. 首先,先说一下, ...

  10. Sharepoint 移动客户端 Rshare的特点

    1.随时随地快速访问SharePoint,和同事高效合作,实时浏览日历信息,完整日程安排.查看联系人信息.浏览公告,文档和图片等. 添加图片到相册,通过Email和他人分享. 2.新建.上传:新建日历 ...