目录
需要的工具
项目的目录
一、ant
二、Ivy 管理依赖项
三、testNg 测试框架
四、jacoco 代码覆盖率
五、运行
六、jenkins持续集成实践
七、报告
ant :用来构建
ivy:配置及用来,现在可以用maven
CI:由jenkins是检测代码库的变更,触发CI过程
testNG:写case
jacoco:统计代码覆盖率
shell/python:报警脚本
下面一步一步来说明一下。
ant 是个构建工具。主要是他的构建文件:bulid脚本(build.xml), 其有一个或者多个target 组成,每个target 完成一项特定的任务,比如编译代码,运行单元测试。对于一个bulid.xml任务来说,需要按照顺序来执行target,那么就需要有依赖文件,比如你得先编译你的代码,才能运行单元测试。为了对ant 项目的依赖项进行管理,所以引入了Ivy 项目。后面会介绍。
1、构建ant 环境
(1)安装JDK
(2)下载ant
apache ant 的网址:http://ant.apache.org/ 下载地址:apache-ant-1.9.7-bin.tar.gz
(3)解压
tar -zxvf apache-ant-1.8.4-bin.tar.gz
(4)设置ANT_HOME
如果是全局生效,则在/etc/profile文件中添加。如下:
##set java environment
export JAVA_HOME=/home/tools/jdk1.8.0_112
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH
#set hadoop environment
export HADOOP_HOME=/home/tools/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
#set ant environment
export ANT_HOME=/home/tools/apache-ant-1.9.7
export PATH=$ANT_HOME/bin:$PATH
#set ivy
export IVY_HOME=/home/tools/apache-ivy-2.4.0
export MVN_HOME=/home/tools/apache-maven-3.3.9
export HIVE_HOME=/home/tools/hive
export NODE_HOME=/home/tools/node-v6.10.0-linux-x64
export PATH=$MVN_HOME/bin:$HIVE_HOME/bin:$NODE_HOME/bin:$PATH
export PYTHON_HOME=/home/tools/python27
export PATH=$PYTHON_HOME/bin:$PATH
(5)测试一下,输入ant ,如果看到下面的内容,则表示完成了ant 的设置
Buildfile: build.xml does not exist!
Build failed
build.xml 详解可以参加另外一篇博文: http://blog.csdn.net/u011138533/article/details/52174681
ivy 特有的文件是 ivy.xml 和一个 Ivy 设置文件。ivy.xml 文件中列举了项目的所有依赖项。ivysettings.xml 文件(可以随意为此文件命名)用于配置从中下载有依赖关系的 jar文件的存储库。
1、安装ivy
从官网http://ant.apache.org/ivy/下载到最新的ivy2.4.0正式版,选择的是with dependencies的包。
在安装ivy之前,请先安装好ant1.6.2以上版本,因为Ivy是基于ant的。并且需要保证JDK是1.5以上版本的,因为ant是基于Java的。
参照官网的安装,将下载下来的ivy安装包解压,然后复制ivy的jar文件到ant的lib目录下(ANT_HOME/lib)。设置系统属性IVY_HOME到ivy的安装目录。
另外一个简单的安装方法,就是直接到ivy的src/example/hello-ivy 目录下执行ant,会从网上下载ivy并安装的。
参考链接:http://blog.csdn.net/u011138533/article/details/53945449
(1)在testng.xml 中配置需要测试的接口或者方法。
在测试过程中,可能需要大量的数据集,只是测试的数据不一致,代码逻辑完全一致,这时候就需要使用参数化传递参数。TestNG 提供了两种传递测试数据的方式。一种是:在testng.xml中配置,使测试数据和代码分离。 第二种是:@DataProvide方式,可以提供比较复杂的参数。可以通过excel来管理case数据。
可以参考博文:http://blog.csdn.net/u011138533/article/details/52174446
编写一个测试的过程有三个过程:
首先,将测试信息添加到testng.xml 文件和build.xml文件中
其次,编写测试的业务逻辑并在代码中插入TestNG annotation
最后,运行TestNG
参考博文:http://blog.csdn.net/u011138533/article/details/54091043
写完接口测试的代码之后 ,通过ant 构建运行。
ant -buildfile build.xml -propertyfile ../properties/tag_servicespp.properties -DtestngXML=tag_services.xml
更详细的教程: https://www.cnblogs.com/zz0412/tag/jenkins/
准备好以上的测试case和工具之后,可以通过Jenkins 将任务调度及模块持续集成起来。
持续集成大体分为以下5个部分:
(1)代码更新
(2)编译
(3)自动打包部署
(4)自动化测试,此步骤还可以加入主干和分支的结果diff
(5)结果报告
(6)结果通知及展现,可以用jenkins自带的邮件通知测试结果,也可以自己写通知
参数化构建过程:
主干和分支的测试过程最好分开。我的做法是,主干依赖源码管理(git),一旦master分支代码有更新之后,自动触发。分支采用参数化构建过程,可以用于自测。
构建过程可以使用SHELL
以下是自己的一个部署的例子:
#!/bin/bash
# pretend to be user WORK
source /home/.bashrc
source /etc/profile
function check()
{
if [ $1 -ne 0 ]
then
echo -e "\033[0;31mwe got an error on [$2]"
echo -e "\033[0;31mexit the hudson shell script without any doubt"
exit 1
fi
}
function steplog()
{
echo -e "\033[0;34m================================================ $@ ================================================"
}
function init()
{
#异常检查,判断buildnum号是否为空并且判断是否有同源存储路径,否则退出
if [ x${BUILD_NUMBER} = x ]
then
echo -e "the buildnum is null, please check"
exit 1
fi
echo -e "THE BUILD_NUM : ${BUILD_NUMBER}"
}
function compile()
{
echo "hostname : $(hostname)"
#禁止杀死衍生进程
OLD_BUILD_ID=$BUILD_ID
echo "OLD_BUILD_ID : $OLD_BUILD_ID"
BUILD_ID=DONTKILLME
cd $WORKSPACE
#下载tag环境部署的脚本
if [ -d tag_ci ];then
rm -rf tag_ci
fi
git clone 路径
echo "pwd : $(pwd)"
cd $WORKSPACE/tag_ci/deploy/
echo "pwd : $(pwd)"
sh deploy_tag.sh
#禁止杀死衍生进程cd
BUILD_ID=$OLD_BUILD_ID
echo "OLD_BUILD_ID : $OLD_BUILD_ID"
}
init
compile
1、日志
日志模块可以采用Log4j
2、统计结果
以上。