从venv安装和运行的项目包的覆盖率报告

问题描述

我具有以下结构

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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...