Clojure - Testowanie automatyczne

W tym rozdziale omówimy opcje automatycznego testowania zapewniane przez Clojure.

Testowanie aplikacji klienckich

Aby użyć testowania dla frameworka Clojure, musisz użyć zależności znajdujących się pod adresem https://github.com/slagyr/speclj#manual-installation

Ten adres URL zawiera specljFramework, który jest używany jako platforma testowa oparta na danych testowych lub oparta na zachowaniu dla Clojure. Musisz upewnić się, że używasz frameworka Clojure 1.7.0 podczas korzystania z którejkolwiek z bibliotek „speclj”. Domyślnie pliki testowe będą się różnić od plików kodu Clojure i należy je umieścić w katalogu „spec”.

Poniżej znajduje się przykładowy kod pliku testowego.

(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)

Należy zwrócić uwagę na następujące rzeczy dotyczące powyższego kodu -

  • Najpierw musimy upewnić się, że używamy instrukcji „require”, aby uwzględnić wszystkie podstawowe biblioteki we frameworku „speclj”.

  • Dalej jest funkcja „opisz”. Służy do zapewnienia opisu tworzonego przypadku testowego.

  • Następną funkcją jest funkcja „it”, która jest rzeczywistym przypadkiem testowym. W pierwszym przypadku testowym ciąg znaków „jest prawdą” jest nazwą nadaną przypadkowi testowemu.

  • Powinien i nie powinien być znany jako assertions. Wszystkie stwierdzenia zaczynają się od słów „powinny”. Powinien i nie powinien, to tylko dwa z wielu dostępnych twierdzeń. Obaj przyjmują wyrażenia, które sprawdzą odpowiednio pod kątem prawdziwości i fałszu.

Jeśli uruchomisz przypadek testowy, otrzymasz następujące dane wyjściowe. Dane wyjściowe pokazują czas w milisekundach potrzebny do uruchomienia przypadku testowego.

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

Testowanie aplikacji internetowych

Seleniumjest jednym z kluczowych frameworków używanych do testowania współczesnych aplikacji internetowych. Dostępne są również biblioteki Clojure, których można używać do testowania aplikacji internetowych.

Przyjrzyjmy się, jak możemy wykorzystać biblioteki Selenium do testowania aplikacji internetowych Clojure.

Step 1- Pierwszym krokiem jest upewnienie się, że używamy frameworka Ring and Compojure do tworzenia aplikacji internetowej, którą należy przetestować. Skorzystajmy z jednego z przykładów z naszych wcześniejszych rozdziałów. Poniższy kod to prosta aplikacja internetowa, która wyświetla „Hello World” w przeglądarce.

(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 - Następnie pobierz plik jar selenu https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-server/2.47.0 i dołącz go do swojej ścieżki klas.

Step 3 - Upewnij się również, że pobierasz sterownik sieciowy „clj”, który będzie używany do uruchamiania testu internetowego z następującej lokalizacji.

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

Step 4 - W katalogu projektu utwórz kolejny katalog o nazwie Features i plik o nazwie „config.clj”.

Step 5 - Następnie dodaj następujący kod do pliku „config.clj” utworzonego we wcześniejszym kroku.

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

Powyższy kod w zasadzie mówi platformie testowej sieci Web, aby przetestowała aplikację, która jest ładowana pod adresem URL http://localhost:3000

Step 6 - Na koniec napiszmy nasz kod, aby przeprowadzić nasz test.

(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)))

Powyższy kod podejmie następujące działania -

  • Uruchom serwer aplikacji.
  • Otwórz ścieżkę główną w przeglądarce.
  • Sprawdź, czy na stronie jest komunikat „Hello World”.
  • Zamknij przeglądarkę.
  • Zamknij serwer.