Web自動化測試中針對圖片驗證碼問題的常見解決思路
圖片驗證碼(Captcha)問題在自動化測試中是一個很常見的問題,也是一個很棘手的問題。圖片驗證碼設計的初衷其實就是為了防自動化,防止一些人利用自動工具惡意攻擊網站,而很不幸的是,我們所使用的一些自動化測試工具也包含在內。當然了,對付驗證碼也不是一點辦法都沒有,方法還是有很多的,只是我們需要跳出技術層面去思考問題。廢話少說,先來看下幾種常見的解決辦法:
1、識別法(技術)
識別法就是對驗證碼的圖片進行字符識別,其原理就是通過識別算法解析圖片,其解析的精準度取決于圖片的復雜程度。
熟悉QTP的同學應該都知道,在做文本檢查點和文本區域檢查點的時候會用到一種叫OCR識別的技術,OCR的全稱是Optical Character Recognition,中文叫光學字符識別。OCR指電子設備(例如掃描儀或數碼相機)檢查紙上打印的字符,通過檢測暗、亮的模式確定其形狀,然后用字符識別方法將形狀翻譯成計算機文字的過程;即,對文本資料進行掃描,然后對圖像文件進行分析處理,獲取文字及版面信息的過程。
根據本人經驗,如果圖片中的字符方方正正的并且圖片背景比較單調的話,那么OCR識別率會非常高。比如類似于以下這種驗證碼的圖片可以被OCR識別出來:
但是對于一些復雜的圖片:字體歪歪扭扭、字體顏色和圖片背景很花哨、有故意干擾的曲直線、甚至包括計算等等,如果碰到這種情況,那么OCR識別率將非常低甚至無能為力,比如:
新浪微博注冊頁面的驗證圖片
淘寶注冊頁面的驗證圖片
神級的驗證圖片。。。
我們可以看到,通過OCR這種技術來識別驗證碼圖片中的字符不失為一種好的方法,但是它也有很多局限性,只適用于一些簡單的圖片。如果你的項目中的驗證圖片很復雜,果斷放棄這種方法吧。
2、接口法(技術)
接口法就是讓開發人員提供一個測試接口,通過這個接口可以獲取到圖片驗證碼。這種方法的具體實現又可以有很多種,比如在服務端提供一個可被客戶端使用的接口,只要客戶端傳遞過來自己的SessionID,該接口就返回此時正確的Session,這種方法就可以很容易地讓自動測試工具直接獲取到正確的應該提交的驗證碼內容;或者在網頁中隱藏一個驗證碼內容的標簽,通過讀取這個網頁標簽內的值就可以輕松獲取到驗證碼內容。
增加了獲取驗證碼的接口,勢必會增加非常大的安全風險,所以這種方法只適合在測試環境使用。
3、移除法(非技術)
所謂移除法非常簡單,就是把圖片驗證碼的功能去掉,這是最省力的一種方法,但是需要開發人員的配合和領導的同意。但是需要注意的一點是這種方法也只適合在測試環境使用,軟件產品上線時需要把圖片驗證碼功能還原,否則會有巨大的安全隱患。
4、暗號法(非技術)
顧名思義,暗號法就是通過事先達成的一種秘密協議進行溝通,在這里是指讓開發人員提供一個“萬能驗證碼”,不論圖片如何變化,只要輸入萬能驗證碼就能通過。但是這種方式同樣會產生安全隱患,如果驗證碼被攻擊者知道的話,所以這種方法也只適合在測試環境使用。
以上是Web自動化測試中對付圖片驗證碼問題的一些常用方法,這些方法本身都有一定優缺點和局限性,至于采取何種方式則需要結果具體的項目情況和需求進行考慮,記住,沒有最好的方法,只有最適合的方法!
posted on 2013-04-01 10:04 順其自然EVO 閱讀(728) 評論(0) 編輯 收藏 所屬分類: selenium and watir webdrivers 自動化測試學習