为Django配置覆盖率检查并配置在gitlab上
现在用gitlab做CI/CD,在测试阶段时会运行django的单元测试,也希望能看到当前覆盖率是多少,并且能设置一个指标,覆盖率未达标就报错,即使目前的测试全部通过。这样能尽量的提高测试覆盖率,把tdd做好,有助于代码质量。
下面记录一下django是怎么检查覆盖率的还有gitlab怎么设置的。
因为我用了pytest,于是需要安装pytest-cov。
pip install pytest-cov
运行后会装上coverage和pytest-cov的包。
然后在pytest的配置文件中添加如下内容pytest.ini
[pytest]
DJANGO_SETTINGS_MODULE = Site.settings
python_files = tests.py test_*.py *_tests.py
addopts = --nomigrations --reuse-db
--cov=modules/ --cov-report term-missing --color yes # 这里是设置检查的目录和展示结果
--cov-fail-under 100 # 这个是设置覆盖率指标,未达到就会报错
此时运行pytest命令来代替'python manage.py test -k' 时就能看到覆盖率。但是我们发现连migrations里的都出现了,这个并不是我们希望检查的文件,反而会拉低目前的覆盖率。
此时需要在coverage的配置文件中添加一些内容,不过无法添加到pytest.ini中,文件名可以自己指定,默认是.coveragerc。
[run]
omit = # 过滤的文件
*/migrations/*
*/apps.py
*/admin.py
*/tests.py
[report]
exclude_lines = # 过滤的代码内容
return self.name
此时提交后结合了.gitlab-ci.yml后就会在console中看到覆盖率的数字统计。
如果想在gitlab的页面中也看到覆盖率的话,那么可以在.gitlab-ci.yml中配置一下以获取最后的覆盖率总数。如下。
# .gitlab-ci.yml
...
before_script:
- pip3 install -r requirement.txt
- python3 manage.py makemigrations
- python3 manage.py migrate
script:
- pytest
coverage: '/TOTAL.*\s+(\d+%)$/' # here
再次提交后就能检查覆盖率的指标,也能获取到总的覆盖率数字啦。如下图。