Hintergrund
Ich bin ein py.test mit einem fixture in einem conftest file läuft. Sie können den Code unten sehen (dies alles funktioniert gut):Wie überspringe ich einen Pytest mit einer externen Vorrichtung?
example_test.py
import pytest
@pytest.fixture
def platform():
return "ios"
@pytest.mark.skipif("platform == 'ios'")
def test_ios(platform):
if platform != 'ios':
raise Exception('not ios')
def test_android_external(platform_external):
if platform_external != 'android':
raise Exception('not android')
conftest.py
import pytest
@pytest.fixture
def platform_external():
return "android"
Problem
Jetzt möchte ich in der Lage sein, einige Tests zu überspringen, die nicht für meinen aktuellen Testlauf gelten. In meinem Beispiel führe ich Tests entweder für iOS oder Android (Dies ist nur für Demonstrationszwecke und könnte jeder andere Ausdruck sein).
Leider kann ich nicht bekommen Ahold (mein extern definiert Befestigung) platform_external
in der skipif
Aussage. Wenn ich den Code unten ausführe, erhalte ich die folgende Ausnahme: NameError: name 'platform_external' is not defined
. Ich weiß nicht, ob dies ein py.test Bug als vor Ort ist definierte Fixtures arbeiten.
Add-on für example_test.py
@pytest.mark.skipif("platform_external == 'android'")
def test_android(platform_external):
"""This test will fail as 'platform_external' is not available in the decorator.
It is only available for the function parameter."""
if platform_external != 'android':
raise Exception('not android')
Also dachte ich, ich will nur meinen eigenen Dekorateur schaffen, nur um zu sehen, dass es nicht die Geräte als Parameter erhalten:
from functools import wraps
def platform_custom_decorator(func):
@wraps(func)
def func_wrapper(*args, **kwargs):
return func(*args, **kwargs)
return func_wrapper
@platform_custom_decorator
def test_android_2(platform_external):
"""This test will also fail as 'platform_external' will not be given to the
decorator."""
if platform_external != 'android':
raise Exception('not android')
Frage
Wie kann ich definieren eine fix in einem conftest Datei und verwenden Sie es (unter Vorbehalt) einen Test überspringen?
Danke - ich wählte auch den Marker gestern als Arbeit um, aber hat es nicht gefallen, da es wie bei Ihnen nicht so elegant war. (Ich habe 'pytest_runtest_setup' für die Markierungsprüfung verwendet). Aber angesichts der py.tests-Einschränkungen scheint dies die nächste Lösung für meine Frage zu sein, und ich werde meine Frage aktualisieren, um sie auszurichten. –