Clojure - Automatisiertes Testen

In diesem Kapitel werden die von Clojure bereitgestellten automatisierten Testoptionen erläutert.

Testen auf Clientanwendungen

Um Tests für das Clojure-Framework verwenden zu können, müssen Sie die Abhängigkeiten unter verwenden https://github.com/slagyr/speclj#manual-installation

Diese URL enthält die specljFramework, das als testdatengesteuertes oder verhaltensgesteuertes Testframework für Clojure verwendet wird. Sie müssen sicherstellen, dass Sie das Clojure 1.7.0-Framework verwenden, wenn Sie eine der 'speclj'-Bibliotheken verwenden. Standardmäßig unterscheiden sich die Testdateien von den Clojure-Codedateien und müssen in einem 'spec'-Verzeichnis abgelegt werden.

Es folgt ein Beispielcode für eine Testdatei.

(ns change.core-spec
   (:require [speclj.core :refer :all]))
(describe "Truth"
   (it "is true"
   (should true))
   (it "is not false"
   (should-not false)))
(run-specs)

Folgende Dinge müssen über den obigen Code beachtet werden:

  • Wir müssen zuerst sicherstellen, dass die Anweisung 'require' verwendet wird, um alle Kernbibliotheken in das Framework 'speclj' aufzunehmen.

  • Als nächstes folgt die Funktion 'Beschreiben'. Dies wird verwendet, um eine Beschreibung für den zu erstellenden Testfall bereitzustellen.

  • Die nächste Funktion ist die 'it'-Funktion, die der eigentliche Testfall ist. Im ersten Testfall ist die Zeichenfolge "is true" der Name des Testfalls.

  • Sollte und sollte-nicht bekannt sind als assertions. Alle Aussagen beginnen mit sollte. Sollte und sollte-nicht sind nur zwei der vielen verfügbaren Behauptungen. Beide nehmen Ausdrücke, die sie auf Wahrhaftigkeit bzw. Falschheit prüfen.

Wenn Sie den Testfall ausführen, erhalten Sie die folgende Ausgabe. Die Ausgabe zeigt die Zeit in Millisekunden an, die der Testfall benötigt.

←[32m.←[0m←[32m.←[0m
Finished in 0.00014 seconds

Testen für webbasierte Anwendungen

Seleniumist eines der wichtigsten Frameworks zum Testen moderner webbasierter Anwendungen. Es sind auch Clojure-Bibliotheken verfügbar, mit denen webbasierte Anwendungen getestet werden können.

Schauen wir uns an, wie wir die Selenium-Bibliotheken zum Testen von webbasierten Clojure-Anwendungen verwenden können.

Step 1- Der erste Schritt besteht darin, sicherzustellen, dass wir das Ring and Compojure-Framework verwenden, um eine webbasierte Anwendung zu erstellen, die getestet werden muss. Verwenden wir eines der Beispiele aus unseren früheren Kapiteln. Der folgende Code ist eine einfache Webanwendung, die im Browser „Hello World“ anzeigt.

(ns my-webapp.handler
   (:require [compojure.core :refer :all]
      [compojure.route :as route]
      [ring.middleware.defaults :refer [wrap-defaults site-defaults]]))
(defroutes app-routes
   (GET "/" [] "Hello World")
   (route/not-found "Not Found"))
(def app
   (wrap-defaults app-routes site-defaults))

Step 2 - Stellen Sie als Nächstes sicher, dass Sie die Selenium-JAR-Datei herunterladen https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-server/2.47.0 und füge es in deinen Klassenpfad ein.

Step 3 - Stellen Sie außerdem sicher, dass Sie den Web-Treiber 'clj' herunterladen, der zum Ausführen des Webtests vom folgenden Speicherort verwendet wird.

https://clojars.org/clj-webdriver/versions/0.7.1

Step 4 - Erstellen Sie in Ihrem Projektverzeichnis ein anderes Verzeichnis mit dem Namen "Features" und eine Datei mit dem Namen "config.clj".

Step 5 - Fügen Sie als Nächstes den folgenden Code zur Datei 'config.clj' hinzu, die im vorherigen Schritt erstellt wurde.

ns clj-webdriver-tutorial.features.config)
(def test-port 3000)
(def test-host "localhost")
(def test-base-url (str "http://" test-host ":" test-port "/"))

Der obige Code weist das Webtest-Framework grundsätzlich an, die Anwendung zu testen, die unter der URL geladen wird http://localhost:3000

Step 6 - Zum Schluss schreiben wir unseren Code, um unseren Test durchzuführen.

(ns clj-webdriver-tutorial.features.homepage
   (:require [clojure.test :refer :all]
      [ring.adapter.jetty :refer [run-jetty]]
      [clj-webdriver.taxi :refer :all]
      [clj-webdriver-tutorial.features.config :refer :all]
      [clj-webdriver-tutorial.handler :refer [app-routes]]))
(ns clj-webdriver-tutorial.features.homepage
   (:require [clojure.test :refer :all]
      [ring.adapter.jetty :refer [run-jetty]]
      [clj-webdriver.taxi :refer :all]
      [clj-webdriver-tutorial.features.config :refer :all]
      [clj-webdriver-tutorial.handler :refer [app-routes]]))
(defn start-server []
   (loop [server (run-jetty app-routes {:port test-port, :join? false})]
      (if (.isStarted server)
         server
         (recur server))))
(defn stop-server [server]
   (.stop server))
(defn start-browser []
   (set-driver! {:browser :firefox}))
(defn stop-browser []
   (quit))
(deftest homepage-greeting
   (let [server (start-server)]
      (start-browser)
      (to test-base-url)
      (is (= (text "body") "Hello World"))
      (stop-browser)
      (stop-server server)))

Der obige Code führt die folgenden Aktionen aus:

  • Starten Sie den Server für die Anwendung.
  • Öffnen Sie den Stammpfad im Browser.
  • Überprüfen Sie, ob die Meldung "Hallo Welt" auf der Seite vorhanden ist.
  • Schließen Sie den Browser.
  • Fahren Sie den Server herunter.