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"开始。 应该和不应该只是众多可用断言中的两个。 它们都采用表达式,分别检查真值和假值。
如果运行测试用例,您将得到以下输出。 输出显示测试用例运行所需的时间(以毫秒为单位)。
←[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 驱动程序,该驱动程序将用于从以下位置运行 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 http://localhost: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"消息。
- 关闭浏览器。
- 关闭服务器。