匯智妹一直央求寶哥出版一本《Selenium+Python自動化測試》的書。經寶哥思來想去,最終還是決定免費公開出來,希望給大家帶來一些幫助。
今天首先介紹下自動化測試的理論知識。

自動化測試的未來

大概在2007年的時候,開始全球掀起實施敏捷開發模式的熱潮,敏捷模式流行的趨勢隨之引起測試領域發生了重大的變化。由于敏捷開發強調所謂的“小步快跑”方式,其迫使測試人員需要在更短的時間內完成整個測試過程,而以前純手工測試的方式應付這種“短平快”的開發節奏變得越來越吃力,于是縮短測試周期提升測試效率則變成了能否很好支撐開發的關鍵。而提升測試速度和效率,自動化測試就變得比以往任何時候都顯得更加重要。測試自動化成為必然的趨勢,目前軟件開發所流行的敏捷、DevOps、持續交付、持續部署等等,通通都是以自動化為根基的(不僅僅是測試的自動化),沒有自動化是做不到的,總結Google、Indeed和Github的趨勢研究 和 世界質量報告、智能與信息報告等分析的結果,未來自動化測試將有呈現9大趨勢:

自動化測試基礎

1.移動測試:由于移動設備數量的增加以及移動端研發技術的變化,移動應用軟件對軟件測試行業將產生重要的影響,主要包括有功能、性能、兼容性、安全性和易用性等方面的測試。基于移動端的自動化測試遲早會超越網站自動化測試。正是由于開源框架、移動DevOps和APP市場的不斷增長,這為移動自動化測試開辟了一個很廣闊的前景。
2.大數據測試:隨著大數據行業的興起,如何管理眾多設備、應用和網絡成為巨大的挑戰,沒有好的質量管理最終導致的錯誤,必將付出慘重代價,行業的興起,技術的提高,對于大數據測試的人員需求必然增長。
3.接口測試:企業對微服務的投資增加,因為微服務可以在不改變其他應用程序和流程情況下進行測試,它更容易被測試和部署一個獨立的功能,這使得應用軟件和產品可以加快上線速度。另一方面,為了對應用程序進行全面測試,測試應用程序與其他應用程序之間的依賴關系的接口測試,也是會需求量放大。

4. Web 服務和SOA的測試自動化:Web服務和SOA體系結構的測試作為對應用程序的端到端進行性能測試也將同等重要。現在復雜應用系統的集成,要求測試系統之間消息是否能正確傳輸和響應,因此,將有越來越多的企業投資于SOA和Web服務的自動化測試。
5.基于TDD和BDD 的左移測試:在開發生命周期的早期開始進行測試工作,幫助軟件開發在整個生命周期出現的缺陷更少。企業采用TDD和BDD方法開發應用程序,因為可以及時無錯誤的滿足客戶的要求。采用TDD和BDD的方法,開發團隊可以得到與需求一樣的基于開發的想法,而不會有對需求的誤解而帶來的麻煩。
6 持續集成的自動化:持續集成的自動化可以讓開發人員將和測試人員進行持續的同步工作,幫助他們互相之間要不斷的更新和反饋消息,以了解軟件質量的實時狀況和快速的修復缺陷。
7. 物聯網和硬件測試:物聯網(Internet of Things,IOT)時代越來越近,專家預測,大約有500億個對象連接到網絡上,他們將通過某種連接和傳感器連接,構成了物物相息的環境。這自然會要求針對物聯網眾多對象進行測試,特別是要驗證持續產生的、來來回回傳輸的數據。硬件測試也將成為物聯網測試的重要趨勢。
8. 安全性:用戶使用移動互聯網和物聯網的頻率大大增加,近幾年安全性問題將越來越受到人們的關注,系統的安全性非常重要,它要確保沒有數據和信息被黑客攻擊、竊取和濫用。因此自動化測試領域中安全性測試占有重要地位。
9. Selenium自動化: Selenium在自動化測試工具中的使用率正在飛速增長。很多商業工具提供了對Selenium的技術支持,以實現web應用的自動化測試。這些工具通過整合Selenium Web Driver與后臺架構,與Selenium打包在一起而發揮更好的作用,這種融合不僅可以幫助測試客戶端的應用程序,而且測試那些通過API進行交互的Web應用。

什么是自動化測試

所謂“自動化測試”,一般是指在測試執行過程中,通過工具自動化的執行本由人工來執行完成的測試過程,重點強調是解決“測試執行過程”的效率;它是把以人為驅動的測試行為轉化為機器執行的一種過程。通常,在設計了測試用例并通過評審之后,由測試人員根據測試用例中描述的規程一步步執行測試,得到實際結果與期望結果的比較。在此過程中,為了節省人力、時間或硬件資源,提高測試效率,便引入了自動化測試的概念。
“測試自動化”,是指在測試領域中的任何方面都可以通過各種自動化的方式和手段來加快測試的效率,保證測試的質量,縮短軟件交付的周期。所以它強調的階段是整個測試的過程而不僅僅是執行過程。如測試數據準備的自動化、測試環境搭建的自動化都,測試結果分析的自動化等等,所以測試自動化范圍更廣。當前DevOps (DevOps(英文Development和Operations的組合)是一組過程、方法與系統的統稱,用于促進開發(應用程序/軟件工程)、技術運營和質量保障(QA)部門之間的溝通、協作與整合。它的出現是由于軟件行業日益清晰地認識到:為了按時交付軟件產品和服務,開發和運營工作必須緊密的合作越來越受到業界重視,在此情況下TestOps孕育而生,TestOps工程師的出現就是具備測試自動化思維的工程師,毫無疑問未來將是Dev + Test + Ops將成為主流模式。

測試自動化的目的

測試自動化的目的:最核心的目的是保證軟件的質量。
第一個目的:提高軟件功能的測試覆蓋率。在公司做做測試時,為了保證軟件無缺陷,我們需要在軟件研發,版本升級,缺陷修復等過程需要進行回歸測試,回歸測試的工作量巨大,有限的時間很難保證完全測試完畢,所以如果通過自動化,則可以一定程度上解決問題,從而提升整個軟件質量。
第二個目的:提高測試速度。主要表現在兩方面:一是執行動作的連續性提高,由于把測試過程腳本話,那么執行過程就可以連續執行,即使一個熟練的測試工程師執行一次用例的時間也遠遠低于測試腳本的執行速度,特別是執行測試用例的數量是巨大的,這種時間的差異會越來越明顯。另外一個是測試的不間斷執行,自動化測試軟件可以在機器上連續24小時不間斷的運行(理論上只要腳本不存在內部錯誤,軟件本身和硬件設備不出現異常),這一點是人力所無法完成的,以上兩點都可以提高測試的執行周期,加快了軟件版本的迭代。

第三個目的:完成人力無法勝任的測試。如性能測試,現代大型互聯網系統支撐數以億計的用戶,同時并發的數量也是巨大的,2015年雙十一期間,淘寶每秒鐘訂單創建14萬筆,支付寶支付達到了每秒8.59萬筆。以上場景如果在測試階段,要求進行測試,就需要模擬14萬用戶并發創建訂單的用戶場景,難度是相當高。首先要實施14萬用戶在“同一時間“操作的真人版測試付出的成本就是巨大的,按照每個人1小時給50元費用,一小時的人力成本就是700萬,迭代測試5次就是3500萬,何況如何組織14萬人能夠同一時間發出動作也是巨大的挑戰。所以性能測試用工具來解決是不錯的方案之一。

適合測試自動化的項目

以前某咨詢公司的調查分析,自動化測試腳本只有執行超過5次以上,ROI(投資回報率)才是合理的。按照這個結論,系統多年不需要升級的,沒有必要自動化;系統UI變化頻率過高,造成腳本維護成本非常高,每次版本功能需要變化導致ui界面變化,都需要投入資源重新開發腳本,這種投入成本過高的不值得做自動化測試。按照此分析結果很多項目都不能做自動化測試,而用“測試自動化”的思維來思考自動化測試的實施,那么就可以在測試數據準備上做自動化,在部署測試環境上自動化,看到軟件系統UI變化過快,就去完成接口(API)級別的自動化測試。所以一名測試工程師要有“自動化”的意識,把“自動化”植入思維中。只要日常工作中任何能幫你減少重復勞動、提升測試工作效率的方面都可以嘗試用“自動化”去幫忙解決,而不是緊緊狹義的理解“測試自動化”就是“UI的測試自動化”。測試人員隨時都要用測試自動化的思維來看待項目,那么任何項目都可以做自動化。