Clojure - การทดสอบอัตโนมัติ
ในบทนี้เราจะมาพูดถึงตัวเลือกการทดสอบอัตโนมัติที่ Clojure มีให้
การทดสอบแอปพลิเคชันไคลเอนต์
ในการใช้การทดสอบสำหรับ Clojure framework คุณต้องใช้การอ้างอิงที่อยู่ที่ https://github.com/slagyr/speclj#manual-installation
URL นี้ให้ไฟล์ specljเฟรมเวิร์กซึ่งใช้เป็นเฟรมเวิร์กการทดสอบที่ขับเคลื่อนด้วยข้อมูลหรือพฤติกรรมสำหรับ Clojure คุณต้องแน่ใจว่าคุณใช้เฟรมเวิร์ก Clojure 1.7.0 เมื่อใช้ไลบรารี 'speclj' ใด ๆ โดยค่าเริ่มต้นไฟล์ทดสอบจะแตกต่างจากไฟล์รหัส 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'
ถัดไปคือฟังก์ชัน 'อธิบาย' ใช้เพื่อให้คำอธิบายสำหรับกรณีทดสอบที่สร้างขึ้น
ฟังก์ชั่นถัดไปคือฟังก์ชัน 'มัน' ซึ่งเป็นกรณีทดสอบจริง ในกรณีทดสอบแรกสตริง "จริง" คือชื่อที่กำหนดให้กับกรณีทดสอบ
สิ่งที่ควรและไม่ควรเรียกว่า assertions. การยืนยันทั้งหมดเริ่มต้นด้วยควร ข้อควรและไม่ควรเป็นเพียงสองข้อยืนยันที่มีอยู่ ทั้งคู่ใช้นิพจน์ที่จะตรวจสอบความจริงและความเท็จตามลำดับ
หากคุณเรียกใช้กรณีทดสอบคุณจะได้ผลลัพธ์ดังต่อไปนี้ เอาต์พุตจะแสดงเวลาที่ใช้ในหน่วยมิลลิวินาทีเพื่อให้กรณีทดสอบทำงาน
←[32m.←[0m←[32m.←[0m
Finished in 0.00014 seconds
การทดสอบแอปพลิเคชันบนเว็บ
Seleniumเป็นหนึ่งในกรอบสำคัญที่ใช้สำหรับการทดสอบแอปพลิเคชันบนเว็บในยุคปัจจุบัน นอกจากนี้ยังมีไลบรารี Clojure ซึ่งสามารถใช้สำหรับการทดสอบแอปพลิเคชันบนเว็บ
มาดูกันว่าเราจะใช้ไลบรารี Selenium เพื่อทดสอบแอปพลิเคชันบนเว็บ Clojure ได้อย่างไร
Step 1- ขั้นตอนแรกคือตรวจสอบให้แน่ใจว่าเรากำลังใช้กรอบงาน Ring และ Compojure เพื่อสร้างแอปพลิเคชันบนเว็บซึ่งจำเป็นต้องได้รับการทดสอบ ลองใช้หนึ่งในตัวอย่างจากบทก่อนหน้าของเรา โค้ดต่อไปนี้เป็นเว็บแอปพลิเคชันธรรมดาซึ่งแสดงคำว่า“ 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))
Step 2 - ถัดไปอย่าลืมดาวน์โหลดไฟล์ซีลีเนียม jar https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-server/2.47.0 และรวมไว้ใน classpath ของคุณ
Step 3 - ตรวจสอบให้แน่ใจว่าได้ดาวน์โหลดไดรเวอร์เว็บ 'clj' ซึ่งจะใช้สำหรับการเรียกใช้การทดสอบเว็บจากตำแหน่งต่อไปนี้
https://clojars.org/clj-webdriver/versions/0.7.1
Step 4 - ในไดเร็กทอรีโปรเจ็กต์ของคุณให้สร้างไดเร็กทอรีอื่นที่เรียกว่าคุณสมบัติและสร้างไฟล์ชื่อ 'config.clj'
Step 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 "/"))
โดยทั่วไปโค้ดด้านบนจะบอกกรอบการทดสอบเว็บเพื่อทดสอบแอปพลิเคชันซึ่งโหลดที่ URL http://localhost:3000
Step 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" อยู่บนหน้าหรือไม่
- ปิดเบราว์เซอร์
- ปิดเซิร์ฟเวอร์