Verwendung von StaticLiveServerCase von Django mit Staging-Server

8

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:

%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:

  • Unterklassifizieren Sie 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.
  • Ausnutzen der dynamischen Typisierung von Python zur Bestimmung der Basisklasse ( 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.
  • Schreiben einer dritten Klasse, die entweder an StaticLiveServerTestCase oder TransactionTestCase delegiert (Komposition statt Vererbung). Sieht nach viel Arbeit aus, um diese eine Sache zu erreichen.
Thijs van Dien 21.08.2014, 14:57
quelle

2 Antworten

2

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:

%Vor%

Django-Selenium funktioniert entweder mit lokalen und Remote-Servern, sehen Sie sich an Einstellungen .

    
Renan Ivo 08.07.2015 12:48
quelle
0

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.

%Vor%

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.

    
e4c5 08.05.2016 14:33
quelle