:ベースクラスで@ pytest.markを使用するには?私はpy.test 2.2.4を使用していますし、次のように私のテストケースが整理されてい
import pytest
class BaseTests():
def test_base_test(self):
pass
@pytest.mark.linuxonly
class TestLinuxOnlyLocal(BaseTests):
pass
@pytest.mark.windowsonly
class TestWindowsOnly(BaseTests):
pass
class TestEverywhere(BaseTests):
pass
このセットアップの問題点は、最初のクラスのデコレータは、第二のクラスの中に漏れているということです。
import pytest
import sys
def pytest_runtest_setup(item):
print "\n %s keywords: %s" % (item.getmodpath(), item.keywords)
skip_message = None
if 'windowsonly' in item.keywords and not sys.platform.startswith('win'):
skip_message = "Skipped: Windows only test"
if 'linuxonly' in item.keywords and not sys.platform.startswith('linux'):
skip_message = "Skipped: Linux only test"
if skip_message is not None:
print skip_message
pytest.skip(skip_message)
を私は実行すると、この出力はマーキングが積み重ねるように見えることを示して設定します:
$ py.test --capture=no
========================================== test session starts ===========================================
platform linux2 -- Python 2.7.3 -- pytest-2.2.4
collected 3 items
test_cases.py
TestLinuxOnlyLocal.test_base_test keywords: {'linuxonly': <MarkInfo 'linuxonly' args=() kwargs={}>, 'test_base_test': True}
.
TestWindowsOnly.test_base_test keywords: {'linuxonly': <MarkInfo 'linuxonly' args=() kwargs={}>, 'test_base_test': True, 'windowsonly': <MarkInfo 'windowsonly' args=() kwargs={}>}
Skipped: Windows only test
s
TestEverywhere.test_base_test keywords: {'linuxonly': <MarkInfo 'linuxonly' args=() kwargs={}>, 'test_base_test': True, 'windowsonly': <MarkInfo 'windowsonly' args=() kwargs={}>}
Skipped: Windows only test
s
================================== 1 passed, 2 skipped in 0.01 seconds ===================================
だから私はそれが可能であるかを理解したい、次のように私はconftest.pyを作成するときこれらのマーキングがサブクラス間でリークすること、およびこれをどのように修正/解決することができるか(テストケースは基本クラスに存在するが、サブクラスは必要なプラットフォーム抽象化を設定する)
この問題の回避策はありますか?私は巨大な既存のテストスイートを持っていますが、私は上記のpy.test – dbn
@dbwを使用しています。 – ecatmur
これは私たちのケースではうまくいかないでしょう。私たちは、100以上の他のテストが異なるパネルに対していくつかの共通のテストを継承するという基礎テストをしています。これを行うpy.test-ishの方法に関する新しい質問を開きます。 – dbn