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" อยู่บนหน้าหรือไม่
  • ปิดเบราว์เซอร์
  • ปิดเซิร์ฟเวอร์