Wie kann ich ein Fixture mithilfe der indirekten Parametrisierung in Pytest ausfallen lassen?Python

Python-Programme
Guest
 Wie kann ich ein Fixture mithilfe der indirekten Parametrisierung in Pytest ausfallen lassen?

Post by Guest »

Ich habe einen Test, der die Parameter durch indirekte Parametrisierung an eine Vorrichtung weiterleitet. Es ist bekannt, dass einer der Parameter während des Testaufbaus (eines der Geräte) ausfällt. Ich möchte den Fehler dieses einzelnen Parameters in einer Weise erwarten, dass Pytest ihn als strikten xfail markiert.
Wenn ich jedoch versuche, pytest.param mit markers=pytest.mark zu verwenden. Wenn Sie das Argument xfail verwenden und es in einer indirekten Parametrisierung übergeben, versteht Pytest nicht, dass es den Test als xfail markieren muss. Außerdem führt es letztendlich zu zusätzlichen Ausnahmen, da der Parameter als ParameterSet-Objekt und nicht als sein Wert übergeben wird.
Das ist mein Test + Parametrisierung:
values = [1, 2, 3]
bug_values = [pytest.param(4, marks=pytest.mark.xfail(reason="..."))]
dict_values = [{"key": value} for value in values] + bug_values
all_values = values + bug_values
parameters_merged = zip(all_values, dict_values)

@pytest.mark.parametrize("direct_parameter, my_fixture", parameters_merged, indirect=["my_fixture"])
def test(my_fixture, direct_parameter):
# test logic

Das ist mein Gerät:
@pytest.fixture(scope="function")
def my_fixture:
return method(**request.param)

Da pytest.param nicht analysiert werden kann, wird die folgende Ausnahme verursacht:
ERROR [100%]
test setup failed

@pytest.fixture(scope="function")
def my_fixture:
> return method(**request.param)
E TypeError:
module.my_fixture() argument after ** must be a mapping, not ParameterSet

Wie kann ich das Fixture mithilfe der indirekten Parametrisierung als xfail markieren?
Ich weiß, dass ich einen if-Block erstellen und darin den Inline-Pytest verwenden kann. xfail, aber ich versuche es zu vermeiden, da ich nicht auf wertspezifischen Code angewiesen bin und um ihn sauber zu halten, lasse ich Pytest seine Arbeit machen.
Danke!

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post