Ich versuche, eine Testumgebung mit Pytest zu erstellen. Die Idee besteht darin, Testmethoden in Klassen zu gruppieren.Pytest Befestigung mit Bereich "Klasse" läuft auf jede Methode
Für jede Klasse/Gruppe möchte ich eine config
Leuchte anhängen, die parametrisiert wird. Damit kann ich alle Tests mit "Konfiguration A" und dann alle Tests mit "Konfiguration B" und so weiter durchführen.
Aber auch ich möchte eine reset
Leuchte, die vor bestimmten Methoden oder allen Methoden einer Klasse ausgeführt werden kann.
Das Problem, das ich habe ist, wenn ich meine reset
Befestigung anwenden (ein Verfahren oder eine ganze Klasse), die config
Halterung scheint im Funktionsumfang statt des Klassenbereich zu arbeiten. Also, sobald ich die reset
Fixture anwenden, wird die config
Fixture vor/nach jeder Methode in der Klasse aufgerufen.
Das folgende Stück Code reproduziert das Problem:
import pytest
from pytest import *
@fixture(scope='class')
def config(request):
print("\nconfiguring with %s" % request.param)
yield
print("\ncleaning up config")
@fixture(scope='function')
def reset():
print("\nreseting")
@mark.parametrize("config", ["config-A", "config-B"], indirect=True)
#@mark.usefixtures("reset")
class TestMoreStuff(object):
def test_a(self, config):
pass
def test_b(self, config):
pass
def test_c(self, config):
pass
Der Test zeigt, wie die config
Befestigung funktionieren soll, für die ganze Klasse nur einmal ausgeführt werden. Wenn Sie die usefixtures
Dekoration auskommentieren, können Sie feststellen, dass die config
Leuchte in jeder Testmethode ausgeführt wird. Kann die Vorrichtung reset
verwendet werden, ohne dieses Verhalten auszulösen?
Dies ist eigentlich ein Fehler in Pytest 3.2.5: https://github.com/pytest-dev/pytest/issues/2938 –