
- Clojure 教程
- Clojure - 首頁
- Clojure - 概述
- Clojure - 環境
- Clojure - 基本語法
- Clojure - REPL
- Clojure - 資料型別
- Clojure - 變數
- Clojure - 運算子
- Clojure - 迴圈
- Clojure - 決策
- Clojure - 函式
- Clojure - 數字
- Clojure - 遞迴
- Clojure - 檔案I/O
- Clojure - 字串
- Clojure - 列表
- Clojure - 集合
- Clojure - 向量
- Clojure - 對映
- Clojure - 名稱空間
- Clojure - 異常處理
- Clojure - 序列
- Clojure - 正則表示式
- Clojure - 斷言
- Clojure - 解構
- Clojure - 日期和時間
- Clojure - 原子
- Clojure - 元資料
- Clojure - StructMaps
- Clojure - 代理
- Clojure - 觀察者
- Clojure - 宏
- Clojure - 引用值
- Clojure - 資料庫
- Clojure - Java 介面
- Clojure - 併發程式設計
- Clojure - 應用
- Clojure - 自動化測試
- Clojure - 庫
- Clojure 有用資源
- Clojure - 快速指南
- Clojure - 有用資源
- Clojure - 討論
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” 訊息。
- 關閉瀏覽器。
- 關閉伺服器。