运行 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_tests
、cd
中的 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
我通过 jenkins 作业在 venv
中安装了一些项目包。安装后,作业从单独的存储库中提取一些单元测试,并将它们 运行 与已安装的包相对应。
我的问题是 coverage
只涵盖了测试脚本而不是已安装的软件包。
文件夹结构如下:
JenkinsWorkspace
|_Venv
|_MyProject
|_trunk
|_Python
|_Package1
|_Package2
|_temp_tests
|_test_suite1.py
|_...
因此,为了进一步解释,我遍历了 MyProject
中的包,将每个包的测试签入 temp_tests
、cd
中的 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