不同提交之间新增接口对比

前些日子接口测试需要对不同分支,不同时间的代码进行新增/删除接口的统计,大致有2个思路

  1. 利用git和shell查找每次提交修改的文件,筛选出含有接口的文件,保存不用版本的此文件到本地,进行文本对比,此种方法准确率有限,实现快。
  2. 通过对工程编译后文件利用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

  1. 将写好的shell脚本添加到Jenkins任务中


    不同提交之间新增接口对比_第1张图片
    image.png
  2. 选择参数化构建,并写入必填参数


    不同提交之间新增接口对比_第2张图片
    image.png
  3. Job中邮件相关配置


    不同提交之间新增接口对比_第3张图片
    image.png

    Attachment为Shell脚本最终生成文件的相对路径,引用参数的方式为${参数名}。
    其他项均为默认值


    不同提交之间新增接口对比_第4张图片
    image.png

    此处的触发方式,选择的是Always
  4. 开始参数化构建,输入相关参数


    不同提交之间新增接口对比_第5张图片
    image.png

    构建完成后,邮件会收到对比结果。

你可能感兴趣的:(不同提交之间新增接口对比)