在测试左移、devops、持续集成等场景下,代码增量覆盖率基本都会被讨论到。
落地delta覆盖率,基本上有以下几种做法
1、自研工具或者例如diff_cover等开源工具来计算增量的代码覆盖率
2、通过SonarQube来计算增量代码覆盖率
第一种方案需要很多人力投入,其实没必要自研,本文讨论第二种方案,利用sonarqube来进行delta覆盖率计算
示意图如下:
用户往gitlab提交代码,然后pipeline通过jacoco跑覆盖率给sonar,sonar得到相对于当前master分支的delta覆盖率,然后通过sonar api接口获取sonar的delta覆盖率数据,写个判断逻辑,比如要求delta覆盖率要大于80%,如果大于80%,job成功,合入代码。如果没有达到,则失败并通知代码提交人员。
1、下载sonarqube
https://binaries.sonarsource.com/
如果有钱可以下develop版本,如果需要免费,去https://binaries.sonarsource.com/Distribution/sonarqube/下载社区版本
另外,为了得到分支代码相对于master分支代码的增量,如果是社区版需要去下载插件,地址如下
https://github.com/sonar-learn/sonarqube-community-branch-plugin
2、在gitlab的pipeline写法举例
mvn clean verify org.jacoco:jacoco-maven-plugin:prepare-agent install -e -X sonar:sonar -Dsonar.host.url=sonar地址 -Dsonar.login=sonar的token -Dsonar.branch.name=xxx -Dsonar.branch.target=master -U -f pom.xml
如果只想跑某个模块可以加pl=.,xxx-module,注意这里.需要加
PS:
-Dsonar.scm.disabled=true这个千万不能加,否则没有办法算增量覆盖率
GitLab project settings > CI/CD > General pipelines 这里要用 git clone 不能用 git fetch
这样就能算到delta覆盖率并且在sonar上可以看到(如下图)
3、获取计算好的delta覆盖率
可以看到sonarqube是提供了很多webapi的,在gitlab的pipline里可以写脚本获取刚才上传的覆盖率信息,并做判断,具体用哪个接口,按自己的需求,这里就不展开描述了
总结下,没必要中间加1个Jenkins,也没必要用什么sonar的gitlab-plugin插件