Ich führe Pytests mit einer Testdatenbank mit den folgenden DB-Einstellungen.Django: Verwenden derselben Testdatenbank in einem separaten Thread
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'postgres',
'USER': 'something',
'PASSWORD': 'password',
},
}
Mit dem @ pytest.mark.django_db, greifen meine Testfunktionen eine Datenbank 'test_postgres' erstellt für die Tests genannt.
@pytest.mark.django_db
def test_example():
from django.db import connection
cur_ = connection.cursor()
print cur_.db.settings_dict
Ausgänge:
{'ENGINE': 'django.db.backends.postgresql_psycopg2', 'AUTOCOMMIT': True, 'ATOMIC_REQUESTS': False, 'NAME': 'test_postgres', 'TEST_MIRROR': None,...
aber wenn ich ein Gewinde im Inneren test_example auszuführen:
I, die in diesem Thread sehen kann der Cursor unter Verwendung der Datenbank 'postgres' genannt wird, das ist die nicht testende Datenbank. Ausgang:
{'ENGINE': 'django.db.backends.postgresql_psycopg2', 'AUTOCOMMIT': True, 'ATOMIC_REQUESTS': False, 'NAME': 'postgres', 'TEST_MIRROR': None,...
Gibt es eine Möglichkeit, eine Datenbankverbindung Argument zu meinem Thread von der ursprünglichen Testfunktion zu übergeben und mein Thread Routine sagen denselben Datenbanknamen (‚test_postgres‘) als meine Testfunktion zu benutzen?
Dank für Ihre Anregung, gibt die oben eine ‚PicklingError: Beize kann nicht: Es ist nicht so ... gefunden hat.‘ Außerdem möchte ich die Thread-Funktion unter vielen Tests teilen. Ich habe versucht, die Thread-Funktion mit der pytest.mark.db zu dekorieren, aber es wird nichts tun, da es durch das Multiprocessing-Modul und nicht durch den Test-Runner läuft. –
mpaf
aktualisiert meine Antwort – ptr
Ich habe versucht, es zu einer Klassenmethode, aber immer noch die verwendete Datenbank ist die Standard-Datenbank, nicht die Test-Datenbank. Ich denke, das Problem ist, dass wir keinen Kinderprozess durch irgendwelche Django-Testläufer laufen lassen - was ich nicht möchte, da es kein Test ist (es gibt kein PASS/FAIL). Ich würde gerne die Django-Einstellungen dieses Kindprozesses steuern können, aber ich war dazu nicht in der Lage. – mpaf