问题描述
我具有以下结构
project
|-service
| |-utils_common_package
| |-foo_package
| |-bar_package
| |-non_packaged_code
| | |-baz
| | |- [...]
| | |- __init__.py
| |-unit_test
| |-run_foo_service.py
| |-.coveragerc
|-venv
Utils_common,foo和bar是带有setup.py的软件包,并安装在venv中
好吧,我使用Jenkins构建了一个CI,以便执行单元和功能测试并获得覆盖率报告。
通过在服务内部运行pytest
并使用--cov
参数和--cov-config=.coveragerc
来指定一些规则以便省略setup.py和测试报告中的文件,来完成单元测试。 / p>
PYTHONDONTWRITEBYTECODE=1 pytest -vv ./unit_test --cov=./ --cov=./non_packaged_code/baz --cov-config=.coveragerc --cov-report xml --junitxml=reports/junit.xml
SonarQube完美地生成并处理了覆盖率报告。
但是,问题出在运行功能测试的步骤上。最初的.coveragerc
内容已更改,导致适用于单元测试的配置不再适用于功能单元。
.coveragerc用于功能测试的内容
[run]
source =
.
./non_packaged_code/
../venv
omit =
*unit_test/*
*/utils_common_package/*
*/setup.py
*/run_foo_service.py
*/coverage/*
[paths]
source =
service
lib/python3.8/site-packages
[report]
omit =
*unit_test/*
*/utils_common_package/*
*/setup.py
*/run_foo_service.py
*/coverage/*
include = <- If I do not do this,I have to omit all venv packages one by one
*/foo_package/*
*/bar_package/*
*/baz/*
好吧,实际上是文件的当前状态,因为我做了很多修改。
第二,我运行coverage run run_foo_service.py --rcfile=.coveragerc
以启动功能测试将要使用的服务。
第三,完成功能测试后,服务会正常停止,并将生成的.coverage
文件用coverage xml
转换为xml。
现在出现了问题,我想我正确地遵循了documentation,但是在报告中,我将foo和bar打包了两次,一次打包了0行,并提供了服务内部源文件的路径,还有一个安装在venv中且命中实际行(或venv中的foo和bar,而源完全忽略)。
我尝试了诸如从项目文件夹运行而不是从服务运行并更改源路径,使用绝对路径,对te [path]节使用不同表达式,完全省略venv(不包括源代码和/或将其放入)省略参数)。
我拥有适当的coverage.xml的唯一方法是忘记源代码包,然后再使用sed修改路径,这是一个可怕的解决方法,但如果未完成,则源代码的匹配为0,SonarQube会收到功能测试覆盖率为0%的报告。
所以...如何正确合并两条路径?或者,当venv中的代码正在运行时,如何获取源代码的报告覆盖范围?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)