一. 如何获得增量代码覆盖率?
这里介绍下思路。在我们能获取全量覆盖率之后,增量代码覆盖率的生成,我们需要知道增量代码是哪一些,然后再生成全量代码的基础之上,对获取覆盖率的文件做限定:限定为增量的代码部分。
二. 需要做哪些事情?
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. 路径限定后,生成的统计数据就是新增代码的覆盖率统计数据。
三. 补充说明
以上提供是的生成不同语言的新增代码覆盖率的思路,不同语言的工具、参数都不一样,但思路大致相同。