Ich habe ein paar Funktionstests mit StaticLiveServerCase
gemacht. Dies funktioniert hervorragend für lokale Tests, aber jetzt möchte ich auch meinen Staging-Server testen. Der Autor von dem Buch, das ich lese schlägt folgenden Hack vor:
Ich habe ihn so angepasst, dass er super(LiveServerTestCase, cls).setUpClass()
(sowie tearDownClass
) aufruft, wenn er nicht den "temporären Server" verwendet, weil es sich falsch anfühlt, die Implementierung des (großen) Elternteils zu ignorieren.
Trotzdem ist es ein Hack, und ich würde gerne wissen, ob es sauberere Lösungen gibt. Django hat ein eigenes Argument --liveserver
, aber es kann nur verwendet werden, um die Bindungen des temporären Servers zu ändern.
Bisher habe ich folgende Ideen:
StaticLiveServerCase
, um das Argument zu analysieren, ändern Sie die Eigenschaft live_server_url
entsprechend, und lassen Sie den temporären Server nur unbenutzt starten / stoppen. Kosten einige Leistung und in der Theorie, macht die Tests weniger zuverlässig. StaticLiveServerCase
oder einige StagingServerTestCase
subclassing TransactionTestCase
) zur Laufzeit. Das ist nicht viel weniger ein Hack, und meine IDE wird es wahrscheinlich auch nicht mögen. StaticLiveServerTestCase
oder TransactionTestCase
delegiert (Komposition statt Vererbung). Sieht nach viel Arbeit aus, um diese eine Sache zu erreichen. Obwohl dieser Hack funktioniert, denke ich, dass es besser wäre, ein Tool zum Testen entfernter Server zu verwenden.
Das bekannteste Werkzeug ist Selenium , das eine gute Integration mit Django hat. Ein Test mit Django + Selenium würde den Tests ähneln, die Sie mit StaticLiveServerTestCase
durchgeführt haben, zB:
Django-Selenium funktioniert entweder mit lokalen und Remote-Servern, sehen Sie sich an Einstellungen .
Django funktioniert mit Selenium und Sie können es auch ohne Third-Party-Pakete wie Django-Selen verwenden. In der Tat wäre es einfacher, dies zu tun. Sie können auf Ihrem Entwicklungscomputer mit LiveServerTestCase
testen. Event StaticLiveServerTestCase
wird in den meisten Fällen nicht wirklich benötigt.
Wenn Sie mit Ihrem Produktionsserver testen möchten, können Sie dies tun, indem Sie unittest.TestCase anstelle von LiveServerTestCase verwenden und die damit verbundene Verlangsamung vermeiden. Sie können den gleichen Ansatz verwenden, um auch den Entwicklungsserver zu testen.
Tags und Links python django unit-testing django-1.7