2

2.5から3.2までの幅広いpythonバージョンで実行、テスト、インストールしたい小さなpythonパッケージtendoがあります。

まだ 2.5 を実行しているマシンがあり、まだアップグレードできないため、2.5 のサポートが必要です。

現在、ユニットテストはモジュール内に含まれています。これにより、モジュールを変更したときにユニットテストを更新したり、実行したりするのが簡単になります。メインがテストを実行するからです。

一部のモジュールは、すべてのプラットフォームで使用できるわけではありません。

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

Tox はpy.testすべてのプラットフォームで実行するように構成されていますが、それでも の[pytest]セクションsetup.cfgはすべてのファイル内のテストを探すように構成されてい*.pyます。

これは問題をもたらします: これらのファイルのいくつかは実行することが想定されておらず、py25そのためにそれらを調整することは不可能です.

一部のプラットフォームでロードする (または除外する) モジュールを指定できる構成を探しています。

望ましい動作は、サポートされているすべてのバージョンの Python にこのパッケージをインストールできることです。(明らかに、スキップするモジュールはほとんどありません)。

4

2 に答える 2

2

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.pysetup.pyファイルも収集されません。

于 2012-06-07T10:35:59.967 に答える
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)

py2またはをテスト ファイルに追加するpy3と、それぞれの Python バージョンでのテスト用にのみ収集されます。

于 2013-08-09T04:47:27.613 に答える