前些日子接口測(cè)試需要對(duì)不同分支屿讽,不同時(shí)間的代碼進(jìn)行新增/刪除接口的統(tǒng)計(jì),大致有2個(gè)思路
- 利用git和shell查找每次提交修改的文件酪劫,篩選出含有接口的文件豆瘫,保存不用版本的此文件到本地珊蟀,進(jìn)行文本對(duì)比菊值,此種方法準(zhǔn)確率有限外驱,實(shí)現(xiàn)快育灸。
- 通過(guò)對(duì)工程編譯后文件利用Java提取接口及參數(shù)定義,進(jìn)而對(duì)比新增或修改接口昵宇,統(tǒng)計(jì)相對(duì)準(zhǔn)確磅崭,但每次統(tǒng)計(jì)需要打好jar包。
同時(shí)因?yàn)楣痉矫嬉苍谕晟频诙N方式瓦哎,不做重復(fù)工作砸喻,僅解決這幾天急需功能,花費(fèi)一天半時(shí)間使用方法一做了統(tǒng)計(jì)蒋譬,在此記錄下學(xué)習(xí)到的一些知識(shí)割岛,寫的粗糙,海涵犯助。
一癣漆、命令相關(guān):
獲取X天之前提交的CommitID
git log --since=${Date}" days ago" | grep commit | tail -n 1
比較當(dāng)前HEAD和X天前的提交以"Service.java"結(jié)尾的文件名,并輸出到list.txtweb文件
git diff --name-only $lastcommit master | grep -E "Service.java" -->list.txt
此命令可滿足不同分支之間的對(duì)比剂买,lastcommit指的是CommitID惠爽,構(gòu)建時(shí)通過(guò)參數(shù)傳遞給命令行。比如分支和主干對(duì)比瞬哼,有一定的可用的婚肆。
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
#切割字符串提取類名作為文件名较性,方便對(duì)比
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
通過(guò)sort排序及去重uniq -d 獲取兩個(gè)文件的交集,進(jìn)而對(duì)比
# 獲取新舊版本文件交集
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}". 接口對(duì)應(yīng)文件的路徑"${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}". 接口對(duì)應(yīng)文件的路徑"${newline01} >>DelAPIFile.txt
cat ${result}Old.txt ${result}JiaoJi.txt | sort | uniq -u >>DelAPIFile.txt
fi
done
二人弓、集成Jenkins,參數(shù)化構(gòu)建着逐,以及郵件觸發(fā)結(jié)果
前提:Jenkins安裝好郵件插件崔赌,并進(jìn)行配置以及參數(shù)化插件安裝
https://www.cnblogs.com/imyalost/p/8781759.html
-
將寫好的shell腳本添加到Jenkins任務(wù)中
-
選擇參數(shù)化構(gòu)建,并寫入必填參數(shù)
-
Job中郵件相關(guān)配置
Attachment為Shell腳本最終生成文件的相對(duì)路徑耸别,引用參數(shù)的方式為${參數(shù)名}健芭。
其他項(xiàng)均為默認(rèn)值
此處的觸發(fā)方式,選擇的是Always -
開始參數(shù)化構(gòu)建秀姐,輸入相關(guān)參數(shù)
構(gòu)建完成后慈迈,郵件會(huì)收到對(duì)比結(jié)果。