Clojure - 自動化測試



本章將討論 Clojure 提供的自動化測試選項。

客戶端應用程式測試

為了使用 Clojure 框架進行測試,您必須使用位於 https://github.com/slagyr/speclj#manual-installation 的依賴項。

此 URL 提供了 **speclj** 框架,它用作 Clojure 的測試資料驅動或行為驅動測試框架。使用任何 “speclj” 庫時,必須確保使用 Clojure 1.7.0 框架。預設情況下,測試檔案與 Clojure 程式碼檔案不同,需要放在 “spec” 目錄中。

下面是一個測試檔案的示例程式碼。

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

關於以上程式碼,需要注意以下幾點:

  • 首先,我們必須確保使用 “require” 語句將 “speclj” 框架中的所有核心庫包含進來。

  • 接下來是 “describe” 函式。它用於為正在建立的測試用例提供描述。

  • 下一個函式是 “it” 函式,它是實際的測試用例。“is true” 字串是給該測試用例起的名字。

  • should 和 should-not 被稱為 **斷言**。所有斷言都以 should 開頭。should 和 should-not 只是眾多斷言中的兩種。它們都接受表示式,並分別檢查其真假性。

如果執行測試用例,您將得到以下輸出。輸出顯示測試用例執行所花費的時間(毫秒)。

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

基於 Web 的應用程式測試

**Selenium** 是用於測試現代基於 Web 的應用程式的關鍵框架之一。Clojure 庫也可用於測試基於 Web 的應用程式。

讓我們看看如何使用 Selenium 庫測試 Clojure 基於 Web 的應用程式。

**步驟 1** - 第一步是確保我們使用 Ring 和 Compojure 框架建立一個需要測試的基於 Web 的應用程式。讓我們使用我們前面章節中的一個示例。以下程式碼是一個簡單的 Web 應用程式,它在瀏覽器中顯示 “Hello World”。

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

**步驟 2** - 接下來,確保下載 selenium jar 檔案 https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-server/2.47.0 並將其包含在您的類路徑中。

**步驟 3** - 還要確保下載 “clj” web driver,它將用於從以下位置執行 Web 測試。

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

**步驟 4** - 在您的專案目錄中,建立另一個名為 features 的目錄,並建立一個名為 “config.clj” 的檔案。

**步驟 5** - 接下來,將以下程式碼新增到前面步驟中建立的 “config.clj” 檔案中。

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

上面的程式碼基本上告訴 Web 測試框架測試在 URL **https://:3000** 載入的應用程式。

**步驟 6** - 最後,讓我們編寫程式碼來執行我們的測試。

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

以上程式碼將執行以下操作:

  • 啟動應用程式伺服器。
  • 在瀏覽器中開啟根路徑。
  • 檢查頁面上是否存在 “Hello World” 訊息。
  • 關閉瀏覽器。
  • 關閉伺服器。
廣告