- 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” 消息。
- 关闭浏览器。
- 关闭服务器。