前言(廢話)
行文前,安利下文章:《圖形界面操作系統發展史——計算機界面發展歷史回顧》、《再談MV*(MVVM MVP MVC)模式的設計原理—封裝與解耦》
1973年4月,Xerox PARC (施樂公司帕洛阿爾托研究中心)研發出了第一台使用Alto操作系統的個人電腦,其中Alto是第一個把計算機所有元素結合到一起的圖形界面操作系統。Xerox PARC還開發了一種名為Smalltalk的程序語言和環境,它擁有自己的GUI環境(包括了彈出菜單、視窗、圖標)。
《喬布斯傳》里,Jobs就是看到施樂開發中的實驗性GUI以后,回去馬上開始搞,還從施樂挖了一波人。然后微軟有在蘋果公開的東西上面模仿。接着就是一部波瀾壯闊的GUI發展史。
從CS架構到BS架構。互聯網發展如火如荼,推薦看下《瀏覽器史話中chrome霸主地位的奠定與國產瀏覽器的割據混戰》,本人13年從Java入坑H5,但是前端的UI測試,除了前端工程師的 mocha karma jasmine 門后,就是給測試人員點點的感覺。前端UI如何自動化測試呢?
什么是自動化測試
自動化測試:把人為驅動的測試轉化為機器執行的一種過程,重點在於持續集成這個概念;
selenium 官網給出的測試類型有:
Types of testing
測試分類,我的印象是:單元測試(Unit Testing)、集成測試(Integration Testing)、端到端測試(E2E Testing)
-
Acceptance testing:驗收測試、接收測試。測試產品功能是否完全。這個一般讓產品把關。
-
Functional testing:功能測試,測試功能是否可用。
-
Regression testing:回歸測試,是指修改了舊代碼或加入新功能,重新進行測試以確認修改沒有引入新的錯誤或導致其他代碼產生錯誤
-
Performance testing:性能測試,測試程序是否穩定可靠
-
load testing:負載測試,不限制軟件的運行資源,測試軟件的數據吞吐量上限,以發現設計上的錯誤或驗證系統的負載能力。負載測試的目標是確定並確保系統在超出最大預期工作量的情況下仍能正常運行。此外,負載測試還要評估性能特征。例如,響應時間、事務處理速率和其他與時間相關的方面。負載測試是測試的一個方法,通過不斷調試並發數獲取性能瓶頸。比如80個並發,這個叫80用戶負載測試。通過80—>180這樣的並發數變化過程,就叫做性能測試。也就是說,性能測試是通過不同的負載測試來實現的。
-
Stress testing:壓力測試/強度測試,壓力測試是對系統不斷施加壓力的測試,是通過確定一個系統的瓶頸或者不能接收的性能點,來獲得系統能提供的最大服務級別的測試。壓力測試是個高壓力下的性能測試。
負載測試與壓力測試的區別:壓力測試,就是高負載的情況下進行的,目的不是為了獲取性能指標,而是想要了解系統是否穩定。這時候服務器的指標一般不超過90%。壓力測試通過長時間的運行較性能測試更能容易發現內存泄露的問題。負載測試是個方法,性能測試是一個過程。
自動化測試分層
單元自動化測試(數據處理層):
單元測試(unit testing):是指對軟件中的最小可測試單元進行檢查和驗證。
單元的含義:單元就是人為規定的最小的被測功能模塊。單元測試是在軟件開發過程中要進行的最低級別的測試活動,軟件的獨立單元將在與程序的其他部分相隔離的情況下進行測試,如C語言中單元指一個函數,Java里單元指一個類,圖形化的軟件中可以指一個窗口或一個菜單等。
單元自動化測試一般需要借助單元測試框架,如java的Junit、TestNG,python的unittest,常見的手段是code review等;
前端單元測試框架:
-
Jasmine: 自帶斷言(assert),mock功能
-
Mocha: 框架不帶斷言和mock功能,需要結合其他工具,像chai。由tj大神開發
-
Jest: 由Facebook出品的測試框架,在Jasmine測試框架上演變開發而來,集成了 Mocha,chai,jsdom,sinon等功能。
前端斷言庫
斷言庫提供了很多語義化的方法來對值做各種各樣的判斷。
前端集成管理工具
-
karma:負責自動化執行測試腳本,批量處理腳本,統計測試。Google Angular 團隊寫的,功能很強大,有很多插件。可以連接真實的瀏覽器跑測試用例。能夠用一些測試覆蓋率統計的工具統計一下覆蓋率;或是能夠加入持續集成,提交代碼后自動跑測試用例。
接口自動化測試(業務邏輯層):
接口測試:接口測試是對系統或組件之間的接口進行測試,主要是校驗數據的交換,傳遞和控制管理過程,以及相互邏輯依賴關系。其中接口協議分為HTTP,WebService,Dubbo,Thrift,Socket等類型,測試類型又主要分為功能測試,性能測試,穩定性測試,安全性測試等。
主要檢查驗證模塊間的調用返回以及不同系統、服務間的數據交換,常見的接口測試工具有postman、jmeter、loadrunner等;
這里我是強烈推薦Rap,一款開源免費的接口自動化、MOCK數據自動生成、自動化測試,企業級Web接口管理工具(阿里媽媽MUX團隊出品)。RAP通過GUI工具幫助WEB工程師更高效的管理接口文檔,同時通過分析接口結構自動生成Mock數據、校驗真實接口的正確性,使接口文檔成為開發流程中的強依賴。有了結構化的API數據,可避免更多重復勞動。
安利下自己的文章:《前后端分離API設計指南 》
接口自動化測試收益大:因為容易實現,維護成本低,有着更高的投入產出比,是每個公司開展自動化測試的首選。
UI自動化測試(GUI界面層):
UI層是用戶使用產品的入口,所有功能通過這一層提供給用戶,測試工作大多集中在這一層,常見的測試工具有UFT、Robot Framework、Selenium、Appium等;
什么樣的項目適合自動化測試
性價比:按照測試金字塔模型以及投入/產出比,越向下,回報率越高;
Google的自動化分層投入占比:
-
小測試(Unit):占比70%;
-
中測試(Service):占比20%;
-
大測試(UI):占比10%;
自動化測試面臨的挑戰:面臨的最大挑戰就是變化,因為變化會導致測試用例運行失敗,所以需要對自動化腳本不斷debug,如何控制成本、降低成本是對自動化測試工具以及人員能力的挑戰。
像那種做短平快而收錢的項目,自動化測試完全是扯蛋。
功能測試為什么要做自動化?
-
功能測試存在大量的回歸測試、大數據量測試。
-
自動化測試更高效、更嚴格。
功能自動化測試的條件:
-
需求相對穩定
-
冒煙測試通過
-
測試周期長
PC端常用的功能自動化測試工具
-
Selenium:開源工具集,用於回歸功能測試或者系統用例說明,也可瀏覽器的兼容性。支持JavaScript、java、C等主流語言
-
Monkey:安裝自帶的UI測試工具,主要用來對設備上的程序進行壓力測試,檢測程序多久的時間會發生異常。monkey命令
-
Loadrunner:商業性能測試工具,收費,功能強大,適合做復雜場景的性能測試。java編寫測試用例
-
QTP(=》UFT):商業收費軟件,支持web,桌面自動化測試。主要是用於回歸測試和測試同一軟件的新版本,支持VBScript
-
WinRunner
-
QARun
-
Robot
下篇介紹selenium:web自動化測試(2):選擇selenium優勢?與PhantomJS/QTP/Monkey對比
同行相關文章推薦:
前端自動化測試 https://blog.csdn.net/webyouxuan/article/details/100668081
大前端的自動化工廠(5)—— 基於Karma+Mocha+Chai的單元測試和接口測試 https://blog.51cto.com/13869008/2175983
轉載本站文章《web自動化測試(1):再談UI發展史與UI、功能自動化測試》,
請注明出處:https://www.zhoulujun.cn/html/Operation/test/2017_0517_8310.html