Python项目在Jenkins中的自动化测试实践(语法检查、单元测试,coverage(代码覆盖率)、自动打包)
原始链接:http://blog.csdn.net/a464057216/article/details/52934077
requirments
- OS: Ubuntu 14.04+
- Gitlab 8.1 +
- Jenkins 2.19.0 +
使用Jenkins对Python项目进行自动化测试主要依赖nose(单元测试)、coverage(代码覆盖率、pylint(语法检查))等工具,配合插件在Jenkins的Web界面展示测试结果。流程如下:
1.代码改动push到Gitlab自动触发Jenkins构建项目,执行自动化测试。
2.测试包括基本功能测试、覆盖率分析、语法检查等,所有的测试结果在Jenkins上展示,包括测试通过率分析(可以具体到每个用例的通过情况)、测试覆盖率可以具体到每一行、语法检查可以具体到每一行的错误细节。
3.如果测试成功,Jenkins新建一个Tag提交到Gitlab项目中,同时生成一个供下载的zip包。
4.Jenkins界面包含项目代码行数分析。
5.在Gitlab项目的commits列表中看到可以每一次CI的结果,点击build-id后会跳转到Jenkins界面查看构建信息。在Jenkins中点击相应的commit-hash会跳转到Gitlab对应提交的diff页面。
一、jenkins中进行nose(单元测试)、pylint(语法检查)、coverage(代码覆盖率)
1、准备Gitlab侧API token
在个人信息的Account界面生成Private token:
在Jenkins上添加对应API token的Credential
Credentials管理界面添加该API token:
然后在Jenkins系统设置的Gitlab部分填写相关信息(使用刚才添加的API token,可以点击Test Connection测试配置是否OK):
配置Gitlab的webhook
在Gitlab的对应项目上配置webhook,trigger的URL是Jenkins页面中GitLab CI Service URL后面给出的URL,勾选Push events和Merge Request events等自己需要的条件,如果Jenkins没有https支持,去勾选Enable SSL verification,然后点击Add Webhook,点击Test按钮尝试触发Jenkins构建即可。
至此如果对Gitlab上的项目的master分支有修改的话,Jenkins会立即触发构建(下图中的第29次构建,当然也可以在Jenkins的Web管理界面手工触发构建如第30次构建):
构建完成后构建结果会同步到Gitlab中(点击对应的对号或者差号后再新的页面点击对应的build id会跳转到Jenkins的构建信息页面):
对于成功的构建,Jenkins会自动新建一个Tag并提交到Gitlab:
2、配置Jenkins项目
在Jenkins的自由风格的软件项目中设置如下内容:
虽然使用的是Gitlab,但是在Github project中配置相关信息之后,可以在构建记录中点击commit-id直接跳转到Gitlab的diff页面:
上面的GitLab Repository Name主要配合Gitlab logo插件使用,先在Jenkins的系统设置中设置GitLab Account Setting(使用之前在Gitlab上生成的API token):
填写项目在Gitlab的Project URL后,在Jenkins的项目列表中可以显示项目在Gitlab上的图标:
继续配置自由项目的源码管理部分,这里使用的Credentials是Jenkins服务器访问Gitlab使用的私钥信息而不是之前配置的APi token,Refspec中的信息为:
+refs/heads/*:refs/remotes/origin/* +refs/merge-requests/*/head:refs/remotes/origin/merge-requests/*
构建触发器配置如下:
这里没有选择Poll SCM的方式,如果选择这种方式的话,为了提高Jenkins的响应速度,通产会设置较短的轮询周期比如1分钟,这样Jenkins上面项目过多的话对Gitlab的API访问频率太高。
为了将Jenkins的每次构建信息发布到Gitlab,需要在构建后的操作步骤中添加Publish build status to Gitlab Commit:
如果构建成功,Jenkins提交新建的Tag到Gitlab时,需要使用的SSH私钥有可写权限,然而Gitlab的deploy key是没有写权限的,所以要在Gitlab中添加对应公钥到用户信息的SSH Keys信息中使其具有写权限,然后在Jenkins的构建后的操作步骤中添加Git Publisher:
上面配置中的
Target remote name应该与源码管理->git->Repositories中的name信息一致。
2、配置Jenkins项目构建步骤,进行测试
在构建中增加构建步骤,选择Execute shell:
在其中填写如下内容(其中mypackage是被测试的package的名字):
virtualenv --no-site-packages env
. env/bin/activate
pip install --quiet nosexcover
pip install --quiet pylint
nosetests --with-xcoverage --with-xunit --cover-package=mypackage --cover-erase
pylint -f parseable mypackage/ | tee pylint.out
sloccount --duplicates --details mypackage > sloccount.sc
tar --exclude *pyc -zcf mypackage.tar.gz mypackage
2.1、pylint(语法检查)
pylint.out
pylint生成的语法检查报告pylint.out需要配合Violations plugin插件使用,然后在构建后操作中勾选Report Violations,找到pylint的配置并填写:
构建后在构建记录中即可以看到具体到文件每一行的语法检查结果:
2.2、单元测试
coverage.xml
--with-xcoverage选项会生成coverage.xml文件,安装Cobertura Plugin后可以在构建后操作中勾选Publish Cobertura Coverage Report填写相关信息:
构建完成后,在构建信息的Cobertura Coverage Report页面,可以看到测试覆盖率变化的趋势,和具体到每个文件的覆盖情况:
nosetests.xml
--with-xunit选项会生成nosetests.xml文件,在构建后操作中勾选Publish JUnit test result report即可显示该部分的内容:
在构建结果的Test Result页面可以看到测试结果(点击进入可以看到结果详情):
2.3、sloccount项目代码行数分析工具
项目代码行数分析依赖sloccount这个工具,首先在Jenkins服务器上安装它:
# Written by: CSDN - Mars Loo的博客
sudo apt-get update
sudo apt-get install sloccount
在Jenkins的构建后的操作中添加Public SLOCCount analysis results(需要先安装SLOCCount Plug-in插件):
然后在Jenkins的构建记录页面可以看到项目代码行数的变化趋势及各个语言的代码行数变化:
Jenkins的构建后的操作步骤中添加Archive the artifacts:
把这个步骤放在构建后的操作步骤中的最后,然后在每次成功构建后会生成一个下载链接供下载包:
Python项目在Jenkins中的自动化测试实践(语法检查、单元测试,coverage(代码覆盖率)、自动打包)的更多相关文章
- 新建项目到Jenkins中
在以Jenkins为镜像创建Docker容器时,我们在jenkins的dockerfile文件中写明了要安装Docker Compose,目的也是在Jenkins容器中借助Docker Compose ...
- linux下部署python项目到jenkins
环境:linux+jenkins+tomcat+git+python3.7 1.安装jdk 上传安装包到usr/local 解压 配置环境变量 vim /etc/profile export JAVA ...
- sublime中安装sublimelinter php 语法检查
打开控制台,install package 搜 sublimelinter 先安装sublimelinter本体 安装完以后再搜索一下,安装sublimelinter-php 接下来,打开prefer ...
- 人们对Python在企业级开发中的10大误解
From : 人们对Python在企业级开发中的10大误解 在PayPal的编程文化中存在着大量的语言多元化.除了长期流行的C++和Java,越来越多的团队选择JavaScript和Scala,Bra ...
- VS2010中的自动化测试(5)——Web性能测试
原文地址:http://www.cnblogs.com/heqichang/archive/2011/11/20/2256478.html 类目见这里:http://www.cnblogs.com/h ...
- 使用jenkins + python + selenium一步步搭建web自动化测试“框架”(1) - 各部件简介
原先搭建过一个自动化测试框架,迷迷糊糊不求甚解,算是搭建了一个仅限于能用的.根本算不上框架的玩意儿. 现在回过头来好好看看究竟每一步是怎么联系起来的,是怎么运行起来的. 本次博客先说说各部件都是干什么 ...
- Jenkins部署Python项目实战
一.背景 我们工作中常用Jenkins部署Java代码,因其灵活的插件特性,例如jdk,maven,ant等使得java项目编译后上线部署一气呵成,同样对于脚本语言类型如Python上线部署,利用Je ...
- Jenkins 为Jenkins添加Windows Slave远程执行python项目脚本
为Jenkins添加Windows Slave远程执行python项目脚本 by:授客 QQ:1033553122 测试环境 JAVA JDK 1.7.0_13 (jdk-7u13-windows ...
- Jenkins持续集成_02_添加python项目&设置定时任务
前言 自动化测试脚本编写后,最终目的都是持续集.持续集成可以实现一天多次部署运行自动化脚本,对功能进行不断监控测试.由于小编使用python编写的自动化脚本,这里仅讲解下如何在Jenkins中添加py ...
随机推荐
- RPC里面的序列化反序列化以及拆包粘包
1.序列化(1)什么是序列化? Java的序列化是把对象转换成有序字节流的过程.以便进行网络传输或者保存到本地.(2)为什么要序列化? 当两个进程进行远程通信时,如果需要发送各种各样的数据,文本.音频 ...
- AGC016B Colorful Hats(构造)
题目大意: 给定n和n个数,每个数a[i]代表除了i外序列中颜色不同的数的个数,问能否构造出来这个数列. 比较简单,首先先求出来a数列的最大值Max, 如果有数小于Max-1,那么显然是不存在的 接下 ...
- 【转】64位ORACLE客户端上plsql无法识别ORACLE_HOME解决方案
转自:http://www.2cto.com/database/201503/386267.html 中文显示问号 转自:http://zhidao.baidu.com/link?url=qJDmsa ...
- [洛谷P2590][ZJOI2008]树的统计
题目大意:一棵树,支持三个操作, $CHANGE\;u\;t:$ 把结点$u$的权值改为$t$ $QMAX\;u\;v:$ 询问从点$u$到点$v$的路径上的节点的最大权值 $QSUM\;u\;v:$ ...
- BZOJ5011 [JXOI2017]颜色 【线段树 + 主席树】
题目链接 BZOJ5011 题解 一定只有我这种智障会用这么奇怪的方法做这道题.. 由题我们知道最后剩余的一定是一个区间,而且区间内的颜色不存在于区间外 所以我们的目的就是为了找到这样的区间的数量 区 ...
- 【BZOJ 1647】[Usaco2007 Open]Fliptile 翻格子游戏 模拟、搜索
第一步我们发现对于每一个格子,我们只有翻和不翻两种状态,我们发现一旦确定了第一行操作,那么第二行的操作也就随之确定了,因为第一行操作之后我们要想得到答案就得把第一行全部为0,那么第二行的每一个格子的操 ...
- [COGS 2421] [HZOI 2016] 简单的Treap 笛卡尔树
笛卡尔树就是你给两维限制,一维堆R,一维二叉搜索树K,平地拔起一棵Treap,最广范的应用:用LCA求区间最值,建Treap,还有个什么范围top k我表示并不会查都查不到.它最妙最高的地方在于用栈来 ...
- taotao用户登录springMVC拦截器的实现
在springMVC中写拦截器,只需要两步: 一.写 java 拦截器类,实现 interceptor 拦截器接口. 二.在 springMVC 的xml配置文件中,配置我们创建的拦截器对象及其拦截目 ...
- 从零开始学习MXnet(三)之Model和Module
在我们在MXnet中定义好symbol.写好dataiter并且准备好data之后,就可以开开心的去训练了.一般训练一个网络有两种常用的策略,基于model的和基于module的.今天,我想谈一谈他们 ...
- SQLMap的前世今生(Part1)
http://www.freebuf.com/sectool/77948.html 一.前言 谈到SQL注入,第一时间就会想到神器SQLMAP,SQLMap是一款用来检测与利用的SQL注入开源工具.那 ...