2017-08-24 51 views
4

我通过jenkins工作获得了我们的一些项目软件包,安装在venv中。安装完成后,作业从单独的存储库中提取一些单元测试,并根据已安装的软件包运行它们。运行nose2覆盖已安装的软件包

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

这里的文件夹结构:

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

因此,对于进一步的解释,我遍历包在MyProject,结账为每一个测试到temp_testscdtemp_tests并呼吁nose2 -t ..\..\..\Venv\Lib\site-packages

我想-t param将设置顶级目录,并使用安装在那里的东西。是的,测试成功运行。但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 

回答

0

我在测试后使用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 
0

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

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

请注意,这只是一个猜测,因为我没有nose2和Linux准备马上。让我知道它是如何工作的。 – yacc