Ich möchte einen Wert von einem Fixture zu mehreren Tests/Testklassen zurückgeben können, aber der Wert, der übergeben wird, ist eine Funktion.pytest fixture gibt immer eine Funktion zurück
Hier ist mein Code:
import pytest
@pytest.fixture()
def user_setup():
user = {
'name': 'chad',
'id': 1
}
return user
@pytest.mark.usefixtures('user_setup')
class TestThings:
def test_user(self):
assert user_setup['name'] == 'chad'
Die Ausgabe lautet:
=================================== FAILURES ===================================
_____________________________ TestThings.test_user _____________________________
self = <tests.test_again.TestThings instance at 0x10aed6998>
def test_user(self):
> assert user_setup['name'] == 'chad'
E TypeError: 'function' object has no attribute '__getitem__'
tests/test_again.py:14: TypeError
=========================== 1 failed in 0.02 seconds ===========================
Aber wenn ich meinen Test so umschreiben, dass es nicht die usefixtures
Dekorateur nicht verwendet, funktioniert es wie erwartet:
def test_user(user_setup):
assert user_setup['name'] == 'chad'
Irgendwelche Ideen, warum es nicht funktioniert, wenn ich versuche, die Decorator-Methode zu verwenden?
Danke für die klare Erklärung, wie es funktioniert. Ich dachte, dass ich dies erreichen könnte, ohne das Argument zu jeder Testfunktion hinzufügen zu müssen, die innerhalb meiner Testklasse liegt. – Cass
Ich suchte gerade nach den Unterschieden und/oder Anwendungsfällen für diese beiden Varianten und wann ich welche verwenden sollte, danke für diese Erklärung. – Zelphir
Laut offizieller Dokumentation sollten Sie 'user_setup' nicht zu jeder Testfunktion hinzufügen, wenn sie unter einer Klasse gruppiert sind, die mit' @ pytest.mark.usefixtures' versehen ist: "Aufgrund des usefixtures marker, cleandir fixture wird für die Ausführung jeder Testmethode benötigt, so als ob Sie für jede von ihnen ein "cleandir" -Funktionsargument angegeben hätten. "(Quelle: http://pytest.org/latest/fixture.html#using-fixtures) -from-classes-modules-or-projects) Schließlich besteht der springende Punkt bei Gruppentests darin, sie als Stapel zu manipulieren.) ... Vielleicht ist das ein pytest-Bug? – Zearin