codecamp

Clojure 自动化测试

在本章中,我们将讨论由Clojure提供的自动测试选项。

测试客户端应用程序

为了使用测试Clojure框架,你必须使用位于的依赖项 https://github.com/slagyr/speclj#manual-installation

此URL提供了speclj框架,用作Clojure的Test数据驱动或行为驱动测试框架。 你必须确保在使用任何'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库来测试基于Web的Clojure应用程序。

步骤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文件,并将其包含在类路径中。 http://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”消息。
  • 关闭浏览器。
  • 关闭服务器。

Clojure 应用程序
Clojure 类库
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Clojure Useful Resources

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }