前些日子接口测试需要对不同分支,不同时间的代码进行新增/删除接口的统计,大致有2个思路
- 利用git和shell查找每次提交修改的文件,筛选出含有接口的文件,保存不用版本的此文件到本地,进行文本对比,此种方法准确率有限,实现快。
- 通过对工程编译后文件利用Java提取接口及参数定义,进而对比新增或修改接口,统计相对准确,但每次统计需要打好jar包。
同时因为公司方面也在完善第二种方式,不做重复工作,仅解决这几天急需功能,花费一天半时间使用方法一做了统计,在此记录下学习到的一些知识,写的粗糙,海涵。
一、命令相关:
获取X天之前提交的CommitID
git log --since=${Date}" days ago" | grep commit | tail -n 1
比较当前HEAD和X天前的提交以"Service.java"结尾的文件名,并输出到list.txtweb文件
git diff --name-only $lastcommit master | grep -E "Service.java" -->list.txt
此命令可满足不同分支之间的对比,lastcommit指的是CommitID,构建时通过参数传递给命令行。比如分支和主干对比,有一定的可用的。
lastcommit=$(git log --since=${Date}" days ago" | grep commit | tail -n 1)
lastcommit1=${lastcommit#* }
git diff --name-only HEAD ${lastcommit1}| grep -E "Service.java" -->list.txt
遍历list文件每一行,利用git checkout命令切换到不同的提交版本,提取差异文件的新旧版本
for line in `cat list.txt`
do
i=$(($i+1))
git checkout master
git branch
echo $line
#切割字符串提取类名作为文件名,方便对比
newline=${line##*/}
result=${newline%.*}
echo $result
# 获取文件的路径
cat $line | grep -A1 "@SwiftInterface" -->${result}New.txt
git checkout ${lastcommit1}
git branch
cat $line | grep -A1 "@SwiftInterface" -->${result}Old.txt
通过sort排序及去重uniq -d 获取两个文件的交集,进而对比
# 获取新旧版本文件交集
cat ${result}New.txt ${result}Old.txt | sort | uniq -d >${result}JiaoJi.txt
echo " " >>APIFile.txt
# 获取新文件和交集文件的差集,即新增或修改的文件
cat ${result}New.txt ${result}JiaoJi.txt | sort | uniq -u >${result}AddAPIFile.txt
# 判断差异文件是否为空,若为空则不追加
file=${result}AddAPIFile.txt
if [ ! -s $file ];then
echo $file is a blank file
else
echo $file is not a blank file
echo ${i}". 接口对应文件的路径"${newline01} >>AddAPIFile.txt
cat ${result}New.txt ${result}JiaoJi.txt | sort | uniq -u >>AddAPIFile.txt
fi
# 获取旧文件和交集文件的差集,即删除的文件
cat ${result}Old.txt ${result}JiaoJi.txt | sort | uniq -u >${result}DelFile.txt
# 判断差异文件是否为空,若为空则不追加
file1=${result}DelFile.txt
if [ ! -s $file1 ];then
echo $file1 is a blank file
else
echo $file1 is not a blank file
echo ${i}". 接口对应文件的路径"${newline01} >>DelAPIFile.txt
cat ${result}Old.txt ${result}JiaoJi.txt | sort | uniq -u >>DelAPIFile.txt
fi
done
二、集成Jenkins,参数化构建,以及邮件触发结果
前提:Jenkins安装好邮件插件,并进行配置以及参数化插件安装
https://www.cnblogs.com/imyalost/p/8781759.html
-
将写好的shell脚本添加到Jenkins任务中
image.png -
选择参数化构建,并写入必填参数
image.png -
Job中邮件相关配置
image.png
Attachment为Shell脚本最终生成文件的相对路径,引用参数的方式为${参数名}。
其他项均为默认值
image.png
此处的触发方式,选择的是Always -
开始参数化构建,输入相关参数
image.png
构建完成后,邮件会收到对比结果。
网友评论