1、自動化測試mysql
一、自動化測試腳本大體可劃分爲:android
|、線性腳本:經過錄制直接產生的線性可執行的腳本web
|、結構化腳本:具備順序、循環、分支等結構的腳本redis
|、可共享腳本:能夠被多個用例使用,被其餘腳本調用的腳本(即模塊化腳本)sql
|、數據驅動腳本:測試數據跟業務流程控制分離的腳本,經過讀入數據文件驅動流程進行的腳本chrome
|、關鍵詞驅動腳本:腳本、數據、業務分離、數據和關鍵詞在不一樣的數據表中,經過關鍵詞來驅動測試業務邏輯,關鍵詞的特色是,它更像是描述一個測試用例在作什麼,而不是如何作shell
|、混合型腳本:以上任意兩種及以上數據庫
|、敏捷自動化測試腳本/框架:這一塊等我有了成功經驗再補充=。=設計模式
二、自動化測試執行:併發
(1)無人值守的測試:環境搭建,部署與配置;自動化測試用例與測試腳本相互綁定;自動化測試用例執行順序排列與組合
(2)異常處理與場景恢復
三、自動化測試的難點(界面的變更性和腳本的維護性):
①公共自動化用例的維護
②公共UI方法維護
③穩定性和效率提高:
|、異常處理封裝
|、分層測試
|、創建共享對象庫/測試庫
|、第三方插件引入
|、GUI業務流程解耦拆分、儘可能避免太長的端到端UI測試(例如web到移動端的業務流測試)
|、引入mock/接口測試代替部分環節的測試,從而銜接到要執行自動化測試,提升自動化測試穩定和效率
|、web處理一些不可識別第三方控件。儘量採用js來處理,更顯示穩定和高效
|、uiautomator監聽處理android系統不肯定的系統級別彈窗
④自動化測試實施項目選取策略:
|、重複性高且有必要的測試流程
|、項目週期長,系統版本不斷,而且需求不會頻繁變動項目
⑤自動化測試框架包括:
|、測試用例分佈式執行:seleniumGrid
|、腳本模塊化:分層
|、數據驅動:mysql存儲數據,testng的數據提供者
|、日誌分析:本地log4用例執行信息
|、錯誤截圖:監聽截圖
|、報表回收:測試數據存儲mysql數據庫等
|、共享對象庫/公共函數庫:UI元素信息管理/UI元素操做方法維護
|、環境配置:chromedriver/adb/IEdrver/Firefoxdriver
|、用例統一設計模式:基類(測試用例beforeclass/afterclass),多用例集中於一個需求/模塊裏
|、異常處理:testngListenter監聽,UIwater處理系統級彈窗
|、接口和mock結合介入
|、第三方工具引入:adb/shell/redis
|、用例執行方式(分佈式測試seleniumGrid、device多併發測試)
自動化廣義總結:
一、自動化測試工做不復雜但也不簡單,其須要自動化測試人員既懂業務也懂技術。
二、對自動化測試見解太低以及對自動化測試要求過高,都是由於其盲目性,一個懂產品技術和自動化測試技術的工程師,是很快能定位其自動化測試需求和開展的方法。
三、每一個公司有每一個公司本身的特色,調研和需求分析很重要。
四、自動化測試框架不難,難的是細節。
五、自動化平臺很重要,沒有一個平臺,不方便推廣,其自動化測試只能流於形式。
補充:
自動化測試框架找對象:
一般每種框架都應該支持動態跟靜態兩種找對象的方式,靜態找就涉及到對象庫,包括對象庫的讀、寫、合併、維護等一系列問題,這些均可以交給框架作;
關於動態查找,我舉個RFT的例子,大家意會一下:
Two types of find API in Rational Functional Tester:
Subitems can be either atChild() or atDescendant() or atList().
先測試工具會提供動態查找的接口或者方法,RFT裏面提供的是find方法,調用這些接口或者方法便可實現動態查找。
動態查找的好處是能夠採用「相對路徑」來定位對象,而相對的,對象庫則採用的是「絕對路徑」。若是一旦對象的一些屬性改變,靜態查找的方式可能會找不到對象,固然了,如今的自動化測試愈來愈智能,已經能夠作到選取匹配度最高的對象返回。動態查找還有個好處是它找到的對象是「代碼」,你能夠進一步在框架裏去對這些對象進行處理,而對象庫裏的每個對象都是一個獨立的對象,你可使用它們,可是很難改變它們。
一般如今的自動化測試框架都是採用動靜結合的方式,即兩種找對象的方式都會兼顧,由於通常來講,靜態查找的方式速度更快,效率更高。可是靜態查找帶來的問題也是顯著的,主要集中在對象的維護管理以及合併上,如何共享對象,避免重複加對象等。此時,規範對象命名就顯得很重要了。以往我作的自動化測試項目中,這些都是坑。