2012-05-30 28 views
2

我有一個小的Python包tendo,我要讓它運行,測試並安裝了廣泛的Python版本,從2.5和3.2如何使用tox和py.test將單元測試限制到支持的平臺?

結束,我需要2.5的支持,因爲我們仍然有機器上運行它並且不能升級。

當前單元測試包含在模塊內部,因此當您更改模塊並運行它們時,更容易更新它們,因爲主要將運行測試。

某些模塊不適用於所有平臺。

setup.py 
setup.cfg 
tox.ini 
mypackage/foo.py 
mypackage/bar.py 

弓形體被配置爲運行在所有平臺上,仍然setup.cfg[pytest]部分被配置爲查找所有*.py文件內部測試py.test

這會帶來一個問題:其中一些文件不應在py25上運行,因此無法調整這些文件。

我正在尋找一個配置,讓我可以指定爲某些平臺加載(或更好地排除)哪些模塊。

所需的行爲是能夠在所有支持的python版本上安裝此軟件包。 (顯然很少有模塊應該跳過)。

回答

1

您可以使用conftest.py文件來自定義測試集合。例如,你可以跳過所有版本setup.py和這樣的:在python3的特定模塊

# content of conftest.py 
import sys 

collect_ignore = ["setup.py"] 
if sys.version_info[0] > 2: 
    collect_ignore.append("pkg/module_py2.py") 

如果你把這個文件conftest.py旁邊的setup.py文件,並有一個像模塊文件這::

# content of pkg/module_py2.py 
def test_only_on_python2(): 
    try: 
     assert 0 
    except Exception, e: 
     pass 

然後你py.test --collectonly看到下Python2像這樣::

$ py.test --collectonly 
=========================== test session starts ============================ 
platform linux2 -- Python 2.7.3 -- pytest-2.2.5.dev1 
collecting ... collected 1 items 
<Module 'pkg/module_py2.py'> 
    <Function 'test_only_on_python2'> 

============================= in 0.01 seconds ============================= 

按照conftest.py定義模塊看到,而python3下的既不會收集module_py2.py也不會收集setup.py文件。

0

另一個選擇,這是我個人比較喜歡:

import os.path 
import sys 

py3 = sys.version_info[0] >= 3 

def pytest_ignore_collect(path, config): 
    basename = os.path.basename(str(path)) 
    return (not py3 and 'py3' in basename) or (py3 and 'py2' in basename) 

添加py2py3測試文件,那麼只會收集他們在各自的Python版本的測試。

相關問題