运行 nose2 覆盖已安装的软件包

Run nose2 with coverage for installed package

我通过 jenkins 作业在 venv 中安装了一些项目包。安装后,作业从单独的存储库中提取一些单元测试,并将它们 运行 与已安装的包相对应。

我的问题是 coverage 只涵盖了测试脚本而不是已安装的软件包。

文件夹结构如下:

JenkinsWorkspace
|_Venv
|_MyProject
  |_trunk
    |_Python   
    |_Package1
    |_Package2
      |_temp_tests
        |_test_suite1.py
        |_...

因此,为了进一步解释,我遍历了 MyProject 中的包,将每个包的测试签入 temp_testscd 中的 temp_tests 并调用 nose2 -t ..\..\..\Venv\Lib\site-packages

我以为 -t 参数会设置顶级目录,并使用安装在那里的东西。是的,测试 运行 成功。但是 coverage 仅涵盖测试套件本身。 有没有办法告诉 nose 对已安装的包进行覆盖?

为了完整起见,我的 unittest.cfg:

[coverage]
coverage-report = term-missing
always-on = True
coverage-config = .coveragerc

[junit-xml]
always-on = True
keep_restricted = False
path = nose2-junit.xml
test_fullname = False

.coveragerc:

# .coveragerc
[run]
branch = True
[report]
show_missing = True
omit = 
    build/*
    tests/*
    setup.py
    */__init__.py

nose2 的覆盖率插件提供了一个选项来定义测量覆盖率的路径,--coverage PATH。 PATH 将以通常的 shell 语法接受多个目录。我建议这个命令行:

nose2 -t ..\..\..\Venv\Lib\site-packages --coverage ..\..\..\Venv\Lib\site-packages

我测试后使用coverage包解决了我的问题。

我做到了:

nose2 --plugin nose2.plugins.junitxml -s tests -c unittest.cfg
python -m coverage xml

文件夹 tests 包含我的测试。

我的 unittest.cfg 设置为:

[coverage]
coverage-report = term-missing
always-on = True
coverage-config = .coveragerc

[junit-xml]
always-on = True
keep_restricted = False
path = nose2-junit.xml
test_fullname = False

并且在 .coveragerc 中我排除了所有不需要的(系统)包:

# .coveragerc
[run]
branch = True
[report]
show_missing = True
omit = 
    build/*
    tests/*
    setup.py
    */__init__.py
    */nose/*
    */pkg_resources/*
    */six.py
    */nose2/*
    */coverage/*
    */cov_core.py