1. 程式人生 > >Web自動化測試中針對圖片驗證碼問題的常見解決思路

Web自動化測試中針對圖片驗證碼問題的常見解決思路

圖片驗證碼(Captcha)問題在自動化測試中是一個很常見的問題,也是一個很棘手的問題。圖片驗證碼設計的初衷其實就是為了防自動化,防止一些人利用自動工具惡意攻擊網站,而很不幸的是,我們所使用的一些自動化測試工具也包含在內。當然了,對付驗證碼也不是一點辦法都沒有,方法還是有很多的,只是我們需要跳出技術層面去思考問題。廢話少說,先來看下幾種常見的解決辦法:

1、識別法(技術)

識別法就是對驗證碼的圖片進行字元識別,其原理就是通過識別演算法解析圖片,其解析的精準度取決於圖片的複雜程度。

熟悉QTP的同學應該都知道,在做文字檢查點和文字區域檢查點的時候會用到一種叫OCR識別的技術,OCR的全稱是Optical Character Recognition,中文叫光學字元識別。OCR指電子裝置(例如掃描器或數碼相機)檢查紙上列印的字元,通過檢測暗、亮的模式確定其形狀,然後用字元識別方法將形狀翻譯成計算機文字的過程;即,對文字資料進行掃描,然後對影象檔案進行分析處理,獲取文字及版面資訊的過程。

根據本人經驗,如果圖片中的字元方方正正的並且圖片背景比較單調的話,那麼OCR識別率會非常高。比如類似於以下這種驗證碼的圖片可以被OCR識別出來:

  但是對於一些複雜的圖片:字型歪歪扭扭、字型顏色和圖片背景很花哨、有故意干擾的曲直線、甚至包括計算等等,如果碰到這種情況,那麼OCR識別率將非常低甚至無能為力,比如:

新浪微博註冊頁面的驗證圖片

淘寶註冊頁面的驗證圖片

神級的驗證圖片。。。

  我們可以看到,通過OCR這種技術來識別驗證碼圖片中的字元不失為一種好的方法,但是它也有很多侷限性,只適用於一些簡單的圖片。如果你的專案中的驗證圖片很複雜,果斷放棄這種方法吧。

  2、介面法(技術)

  介面法就是讓開發人員提供一個測試介面,通過這個介面可以獲取到圖片驗證碼。這種方法的具體實現又可以有很多種,比如在服務端提供一個可被客戶端使用的介面,只要客戶端傳遞過來自己的SessionID,該介面就返回此時正確的Session,這種方法就可以很容易地讓自動測試工具直接獲取到正確的應該提交的驗證碼內容;或者在網頁中隱藏一個驗證碼內容的標籤,通過讀取這個網頁標籤內的值就可以輕鬆獲取到驗證碼內容。

  增加了獲取驗證碼的介面,勢必會增加非常大的安全風險,所以這種方法只適合在測試環境使用。

  3、移除法(非技術)

  所謂移除法非常簡單,就是把圖片驗證碼的功能去掉,這是最省力的一種方法,但是需要開發人員的配合和領導的同意。但是需要注意的一點是這種方法也只適合在測試環境使用,軟體產品上線時需要把圖片驗證碼功能還原,否則會有巨大的安全隱患。

  4、暗號法(非技術)

  顧名思義,暗號法就是通過事先達成的一種祕密協議進行溝通,在這裡是指讓開發人員提供一個“萬能驗證碼”,不論圖片如何變化,只要輸入萬能驗證碼就能通過。但是這種方式同樣會產生安全隱患,如果驗證碼被攻擊者知道的話,所以這種方法也只適合在測試環境使用。

  以上是Web自動化測試中對付圖片驗證碼問題的一些常用方法,這些方法本身都有一定優缺點和侷限性,至於採取何種方式則需要結果具體的專案情況和需求進行考慮,記住,沒有最好的方法,只有最適合的方法!