Integration von Django und Selen



    Hallo an alle.

    Es ist kein Geheimnis, dass das Testen von Anwendungen ein wichtiger Schritt in der Softwareentwicklung ist. Wenn Sie Webanwendungen entwickeln, müssen Sie nur die Weboberfläche testen. Glücklicherweise gibt es zu diesem Zweck ein Werkzeug wie Selen . Die bekannten Unternehmen SKB Kontur und Yandex haben es bereits als Tool für Funktionstests ihrer Anwendungen und Dienste ausgewählt (Yandex hat dies kürzlich auf der YaC besprochen).

    Nun zum Punkt.
    In einem der Projekte, an denen ich arbeite, haben wir Selen aus dem ersten Zweig verwendet. Aber die Zeit steht nicht still, veröffentlicht Selenium 2.0, basierend auf Webdriver- Technologie, funktionaler, bequemer und korrekter imitieren von Ereignissen im Browser ( mehr über die Vorteile ).

    Um den alten Selenium- Supportcode in unserer Anwendung nicht zu aktualisieren (was ist, wenn er mehrmals ausgeführt werden muss?) Und um zu versuchen, etwas Nützliches für andere Entwickler zu tun, haben wir uns entschlossen, Selenium sofort in eine separate Bibliothek zu integrieren.

    Als nächstes werde ich beschreiben, was wir getan haben und wie diese Bibliothek verwendet wird.

    Installation


    Die Bibliothek kann unter https://github.com/dragoon/django-selenium abgerufen oder über pip installiert werden:
    pip install django-selenium

    Die Möglichkeiten


    Zunächst können Sie mit der Bibliothek in das Django- Test-Subsystem integrieren . Sie können entweder einfach in den Einstellungen angeben, ob TestRunner aus der Bibliothek verwendet werden soll:
    TEST_RUNNER = 'django_selenium.selenium_runner.SeleniumTestRunner'
    oder erbe es und schreibe deine eigene Klasse.
    Hinter den Kulissen macht SeleniumTestRunner Folgendes:
    • startet den Server Selen-server.jar
    • startet die Test - Server - Instanz mit Test Befestigungen
    Um mit dem Schreiben von Selenium-Tests zu beginnen, müssen Sie die Datei seltests.py in der Anwendung erstellen , ähnlich wie bei der üblichen Datei tests.py . Dann erben Sie einfach die Testklasse von django_selenium.testcases.SeleniumTestCase und schreiben die Tests mit Selenium-Befehlen, um mit dem Browser zu interagieren.

    Standard-Treibererweiterung

    Um die Leistung von Standardoperationen zu erleichtern, wurde eine erweiterte Treiberklasse geschrieben, die mit dem Browser interagiert - django_selenium.testcases.MyDriver . Es enthält Vorgänge wie das Öffnen einer URL, das Anmelden bei der Site (die Standardform von Django), das Suchen eines Elements mithilfe der CSS-Auswahl, das Suchen eines Elements und das Klicken, das Überprüfen des Vorhandenseins von Text auf der Seite, das Empfangen von Warntext und andere. Einzelheiten finden Sie vorerst im Quellcode der MyDriver- Klasse .

    Ersetzen des Testlaufbefehls

    Um den Standardbefehl zur Ausführung von Django-Tests durch einen Befehl zu ersetzen, der Selentests unterstützt, müssen Sie die Befehlsklasse wie folgt irgendwo in Ihrer Anwendung erben:
    from django_selenium.management.commands import test_selenium
    class Command(test_selenium.Command):
        def handle(self, *test_labels, **options):
            super(Command, self).handle(*test_labels, **options)
    Der Befehl unterstützt zwei zusätzliche Optionen:
    • --selenium - Führen Sie alle Tests durch, einschließlich Seleniumtests
    • nur --- Selen - nur durchführen , Selenium - Tests
    Wie im Fall des Standardbefehls können Sie Selenium-Tests für eine bestimmte Anwendung oder nur einen bestimmten Test in der Anwendung ausführen.

    Anwendung testen


    Um das oben Gesagte zu konsolidieren, habe ich eine kleine Django-Anwendung vorbereitet, die einen Selentest enthält:
    
    # Скачиваем selenium-server.jar
    wget http://selenium.googlecode.com/files/selenium-server-standalone-2.7.0.jar
    git clone git://github.com/dragoon/django-selenium-testapp.git
    cd django-selenium-testapp
    # Установить правильный путь в переменную SELENIUM_PATH
    vi settings.py
    # Запускаем тесты
    ./manage.py test --selenium-only
    ...
    ----------------------------------------------------------------------
    Ran 1 test in 13.254s
    OK
    

    Wenn alles gut gegangen ist, sollte das folgende Bild beobachtet werden:


    Wie immer freue ich mich über Kommentare und Vorschläge zur weiteren Verfeinerung, Meinungen darüber, wie nützlich diese Bibliothek ist, und natürlich über jede Unterstützung bei der Fertigstellung durch andere Githubber.

    Vielen Dank für Ihre Aufmerksamkeit.

    Jetzt auch beliebt: