1. 程式人生 > >如何做自動化測試

如何做自動化測試

這個話題比較大,相信大家也都有自己的想法,我在這裡寫一些我自己的看法,請大家指教。

什麼叫做自動化測試工程師

首先,會使用自動化測試工具的測試人員不能夠稱之為完全的自動化測試人員,這類測試人員被稱為『工具小子』(Script Kid)。這個階段還是處於自動化測試的一個比較低階的階段,因為這些工具都不是測試人員開發的。

對於高手來說,要能寫一些獨立的測試指令碼甚至測試工具。

更高的高手則是能指令碼和工具和實際工作緊密結合起來,解決工作中遇到的問題。

自動化測試工程師應該具有開發能力嗎

通過上述內容,應該可以看得出來,自動化測試人員一定要有開發能力,而這恰恰是測試人員目前所欠缺的。沒有開發能力的測試人員雖然也可以做一些所謂的自動化,但是僅僅是一些皮毛,沒有辦法做到活學活用。根據某機構的調查資料,目前所有從事測試工作的人中,90%的人都沒有任何開發能力。根據目前的市場行情,如果在精通一門開發語言,能夠從純手工測試轉型為自動化測試工程師,月薪至少增加3~5k。

自動化測試的層級


一般來說,自動化測試分為三個層級:單元測試、介面測試和UI測試,這三層成一個金字塔形狀分佈。最底層是單元測試,介面測試在中間,UI測試在最上層。下面通過一個表格來對比著三層測試。

層級

所處位置

受益

測試物件

執行速度

定位問題難度

維護成本

單元測試

底層

70%

類或者方法

極快

十分容易

介面測試

中間

20%

服務介面

一般

UI測試

上層

10%

UI

較難

非常高

從表格中我們可以看到,最適合做自動化的是單元測試層,而UI層則不是十分適合進行自動化。

測試人員應該怎麼辦

單元測試

單元測試無疑是最適合做自動化的,但是,大多數單元測試都是由研發人員自己完成。單元測試的程式碼行覆蓋率能夠達到70%,就是一個非常不錯的程度了。測試人員不做單元測試,但是可以嘗試推動研發人員來編寫單元測試用例。

單元測試框架

  • 單元測試常用的框架——XUnit,比如Java的JUnit,PHP的PHPUnit,Python的unittest等等;
  • 一個測試用例通常由三部分組成——setUp,測試邏輯,tearDown。setUp用於準備測試資料,tearDown用於清理資料;
  • 一般單元測試框架都支援裝飾器設計模式的註解,比如跳過執行,測試套件的組織,測試用例依賴管理等等
單元測試框架可以無縫地在UI測試和介面測試中使用,它們的基本思想都是相通的。

UI測試

目前,大眾眼中關注的比較多的是UI的自動化測試,這是由大家的思維慣性導致的。傳統的測試行業,測試工程師都是從UI下手,來完成所有的測試工作,所以到自動化領域,大家也理所當然的喜歡從UI層來進行自動化。做UI自動化,最重要的是要能有一個好的自動化測試框架,這裡有一些框架的基本設計思路供大家參考:
  • 分散式——case增加到一定程度後,如何快速的執行所有的case,這就涉及到分散式的概念。對於Selenium,官方提供了一個Grid,感興趣的同學可以研究一下;
  • 行為驅動——也就是常說的Cucumber,這個領域筆者沒有太多的涉足,不誤導大家
  • 關鍵字驅動——由『操作物件』、『操作』、『資料』關鍵字組合成測試用例,框架來把關鍵字解析為指令碼並執行。這種框架最大的優點就是可以提供給不懂程式碼的測試人員使用,典型的代表是Robot framwork
  • 資料驅動——同一段程式碼的業務邏輯通過更換資料輸入來生成多個測試用例,我們只需維護測試資料就可以維護case,這種框架思想在很多測試工具中都有實現
  • 關鍵字和資料混合驅動——目前最高階的框架,將上述兩種框架結合起來
當然,這些思路不僅僅能用在UI層的自動化。 對於UI自動化,我個人的建議是隻做冒煙測試用例的自動化,這樣既可以從UI的角度來重複性的驗證主業務主流程沒有問題,又可以降低維護成本。

介面測試

介面的自動化是目前最適合測試工程師進行自動化的一層。介面不但變化小,執行速度快,受益高,還有著出現問題後能夠很快定位的優點。

什麼時候最適合做自動化

首先,自動化測試從來都不是用來發現新的bug的,它更多的是用來驗證原有功能是沒問題的,新的修改對原有程式碼邏輯沒有影響。所以,當一個專案相對穩定之後,以後的專案都是基於原有程式碼進行迭代,這個時候自動化的介入是非常有效的。 另外,如果某個用例需要有大量的輸入項,做手工測試比較繁瑣,我們也可以引入自動化的手段做區域性的自動化。比如,驗證某個使用者登入1000次是否能夠登入成功,這種情況使用手工的方式基本是不可能的。

總結

服務端灰盒測試是一個很好的自動化測試的方向,從功能測試向服務端自動化測試轉型,需要自己學習充足的程式設計知識,有一定的變成能力。同時還需要了解HTTP協議(或RPC協議)、設計模式、Linux、DB、前端開發、演算法、架構等知識,需要很多積累。如果你不知道怎麼做,先寫10000行程式碼!