4

我在venvjenkins 的工作中安装了我们的一些项目包。安装后,该作业从单独的存储库中提取一些单元测试并针对已安装的包运行它们。

我的问题coverage仅涉及测试脚本,但不涉及已安装的软件包。

这是文件夹结构:

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

因此,为了进一步解释,我遍历包 in MyProject,检查每个包的测试到temp_testscdintemp_tests并调用nose2 -t ..\..\..\Venv\Lib\site-packages

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

为了完整起见,我的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
4

2 回答 2

1

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
于 2017-09-11T05:29:45.253 回答
0

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

nose2 -t ..\..\..\Venv\Lib\site-packages --coverage ..\..\..\Venv\Lib\site-packages
于 2017-09-04T23:43:11.427 回答