不同提交之間新增接口對(duì)比

前些日子接口測(cè)試需要對(duì)不同分支,不同時(shí)間的代碼進(jìn)行新增/刪除接口的統(tǒng)計(jì),大致有2個(gè)思路

  1. 利用git和shell查找每次提交修改的文件,篩選出含有接口的文件,保存不用版本的此文件到本地,進(jìn)行文本對(duì)比,此種方法準(zhǔn)確率有限,實(shí)現(xiàn)快。
  2. 通過對(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í)通過參數(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

通過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

  1. 將寫好的shell腳本添加到Jenkins任務(wù)中


    image.png
  2. 選擇參數(shù)化構(gòu)建,并寫入必填參數(shù)


    image.png
  3. Job中郵件相關(guān)配置


    image.png

    Attachment為Shell腳本最終生成文件的相對(duì)路徑,引用參數(shù)的方式為${參數(shù)名}。
    其他項(xiàng)均為默認(rèn)值


    image.png

    此處的觸發(fā)方式,選擇的是Always
  4. 開始參數(shù)化構(gòu)建,輸入相關(guān)參數(shù)


    image.png

    構(gòu)建完成后,郵件會(huì)收到對(duì)比結(jié)果。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容