Clojure - Kiểm tra tự động

Trong chương này, chúng ta hãy thảo luận về các tùy chọn kiểm tra tự động do Clojure cung cấp.

Kiểm tra các ứng dụng khách

Để sử dụng thử nghiệm cho khuôn khổ Clojure, bạn phải sử dụng các phần phụ thuộc tại https://github.com/slagyr/speclj#manual-installation

URL này cung cấp specljkhung, được sử dụng làm khung thử nghiệm theo hướng dữ liệu Thử nghiệm hoặc theo hành vi cho Clojure. Bạn phải đảm bảo rằng bạn sử dụng khuôn khổ Clojure 1.7.0 khi sử dụng bất kỳ thư viện 'speclj' nào. Theo mặc định, các tệp thử nghiệm sẽ khác với các tệp mã Clojure và cần được đặt trong thư mục 'spec'.

Sau đây là mã mẫu cho một tệp thử nghiệm.

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

Những điều sau đây cần được lưu ý về đoạn mã trên:

  • Trước tiên, chúng tôi phải đảm bảo sử dụng câu lệnh 'request' để bao gồm tất cả các thư viện cốt lõi trong khuôn khổ 'speclj'.

  • Tiếp theo là chức năng 'mô tả'. Điều này được sử dụng để cung cấp mô tả cho trường hợp thử nghiệm đang được tạo.

  • Chức năng tiếp theo là chức năng 'it', là trường hợp thử nghiệm thực tế. Trong trường hợp thử nghiệm đầu tiên, chuỗi “là đúng” là tên được đặt cho trường hợp thử nghiệm.

  • Nên và không nên được gọi là assertions. Tất cả các khẳng định đều bắt đầu bằng nên. Nên và không nên chỉ là hai trong số rất nhiều khẳng định có sẵn. Cả hai đều sử dụng các biểu thức mà họ sẽ kiểm tra sự thật và giả mạo tương ứng.

Nếu bạn chạy trường hợp thử nghiệm, bạn sẽ nhận được kết quả sau. Đầu ra hiển thị thời gian tính bằng mili giây để chạy trường hợp thử nghiệm.

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

Kiểm tra các ứng dụng dựa trên web

Seleniumlà một trong những khuôn khổ quan trọng được sử dụng để thử nghiệm các ứng dụng dựa trên web hiện đại. Thư viện clojure cũng có sẵn, có thể được sử dụng để thử nghiệm các ứng dụng dựa trên web.

Hãy xem cách chúng ta có thể sử dụng các thư viện Selenium để thử nghiệm các ứng dụng dựa trên web Clojure.

Step 1- Bước đầu tiên là đảm bảo chúng ta đang sử dụng khuôn khổ Ring và Compojure để tạo một ứng dụng dựa trên web, cần được thử nghiệm. Hãy sử dụng một trong những ví dụ từ các chương trước của chúng tôi. Đoạn mã sau là một ứng dụng web đơn giản, hiển thị “Hello World” trong trình duyệt.

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

Step 2 - Tiếp theo, hãy đảm bảo tải xuống tệp jar selen https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-server/2.47.0 và đưa nó vào classpath của bạn.

Step 3 - Cũng đảm bảo tải xuống trình điều khiển web 'clj', trình điều khiển này sẽ được sử dụng để chạy kiểm tra web từ vị trí sau.

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

Step 4 - Trong thư mục dự án của bạn, hãy tạo một thư mục khác có tên là các tính năng và tạo một tệp có tên là 'config.clj'.

Step 5 - Tiếp theo, thêm đoạn mã sau vào tệp 'config.clj' đã tạo ở bước trước đó.

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

Đoạn mã trên về cơ bản cho khung kiểm tra web kiểm tra ứng dụng, được tải tại URL http://localhost:3000

Step 6 - Cuối cùng, chúng ta hãy viết mã của chúng ta để thực hiện thử nghiệm của chúng ta.

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

Đoạn mã trên sẽ thực hiện các hành động sau:

  • Khởi động máy chủ cho ứng dụng.
  • Mở đường dẫn gốc trong trình duyệt.
  • Kiểm tra xem thông báo "Hello World" có trên trang hay không.
  • Đóng trình duyệt.
  • Tắt máy chủ.