美文网首页
不同提交之间新增接口对比

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

作者: mia米呀 | 来源:发表于2019-12-28 15:41 被阅读0次

    前些日子接口测试需要对不同分支,不同时间的代码进行新增/删除接口的统计,大致有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任务中


      image.png
    2. 选择参数化构建,并写入必填参数


      image.png
    3. Job中邮件相关配置


      image.png

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


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


      image.png

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

    相关文章

      网友评论

          本文标题:不同提交之间新增接口对比

          本文链接:https://www.haomeiwen.com/subject/shesoctx.html