增量代码覆盖率

一. 如何获得增量代码覆盖率?

这里介绍下思路。在我们能获取全量覆盖率之后,增量代码覆盖率的生成,我们需要知道增量代码是哪一些,然后再生成全量代码的基础之上,对获取覆盖率的文件做限定:限定为增量的代码部分。

 

二. 需要做哪些事情?

1.生成diff的代码所在的文件

设置一个old_version,每次的代码提交有一个新的new_version,diff的代码文件就是new_version相对于old_version的新的增加、修改的代码,获取的方式用一个函数来实现:

# 分为比较版本间diff 与 本地修改diff两种

# git 模块分三种情况:

# 1. repo : 比较两个commit间diff

# 2. local: 已经add 未commit

# 3. change: 已commit或push 但未入库

# 注意调用时所在的workspace

# git 代码做增量覆盖率需要做文件映射

function generate_diff_mapper()

{

    local old_revision=$1

    local new_revision=$2

    local diff_type="repo"

 

    [[ ! -z $3 ]] && diff_type=$3

 

    [[ $diff_type == "repo" ]] && git diff -r ${old_revision} ${new_revision} --name-only > diff_list.$$

    [[ ${diff_type} == "local" ]] && git diff --cached --name-only > diff_list.$$

    [[ ${diff_type} == "change" ]] && git diff HEAD origin --name-only > diff_list.$$

 

    cat diff_list.$$ | awk -v svn_path=${BASE_PATH} '{printf "%s %s/%s\n", $0, CODE_DIR,$0}' > diff_mapper

    rm -rf diff_list.$$

 

    return 0

}

2. 在不同语言的代码,生成覆盖率的时候,限定统计的代码路径,比如python的coverage覆盖率,通过–source来限定路径:

    coverage run --branch --source=src/ test/TestCalc.py

3. 路径限定后,生成的统计数据就是新增代码的覆盖率统计数据。

 

三. 补充说明

以上提供是的生成不同语言的新增代码覆盖率的思路,不同语言的工具、参数都不一样,但思路大致相同。