나는 py.test 2.2.4을 사용하고 다음과 같이 내을 testcases가 구성되어 있습니다 :이 설정에@ pytest.mark를 기본 클래스와 함께 사용하는 방법은 무엇입니까?
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
문제는 첫 번째 클래스의 장식이 두 번째 클래스로 유출된다는 점이다. 나는 conftest.py를 만들 때 다음과 같이
$ 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 ===================================
그래서 내가 이해하고자하는 것이 가능 방법 :
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 – dbn
@dbw를 사용하여 마이그레이션하고 싶다. – ecatmur
우리의 경우에는 작동하지 않을 것입니다 - 우리는 100 가지가 넘는 다른 테스트가 다른 패널에 대한 공통 테스트를 제공하기 위해 상속받은 기본 테스트를 가지고 있습니다. 이것을하기위한 py.test-ish 방법에 대한 새로운 질문을 할 것입니다. – dbn