2017-08-24 84 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