一、封裝方法
1、編程如何越來越快:
首先,需要經驗豐富,知識面廣。
其次,每一個熟練編程的人員,都會有自己的一個庫,解決各種問題、各種通用的方法函數。
同理,自動化腳本也是編程,測試用例則為需求,UI自動化編寫雖然容易,但是界面變化快、維護龐大。所以封裝通用方法,是最快最容易的途徑。
2、哪些方法需要封裝:
公共的操作方法
經常使用的步驟:超過兩次以上
經常使用的組件:輸入框、文本框、列表
經常操作的布局:多個組件組成通用的布局
經常操作的頁面:ui頁面由一個一個單獨Activity組成,就可以將Activity封裝成單獨的類
通用的工具函數:文件操作、時間操作之類
3、初級封裝:
通用方法庫:將通用的方法封裝在一個java文件中,比如登陸、文件操作、時間操作
專用方法庫:比如登陸專用的方法:qq登陸、微博登陸等
用例集:通過調用方法庫中的方法實現用例,這樣看起來簡潔清晰。
4、設計一個用例的過程:
先編輯好用例執行步驟、順序
然后設計好對應的方法名
然后新建一個class將這些寫入,要將編輯好的用例步驟、方法名等作為注釋,這樣更清晰
比如設計簡單用例如下:
Cer_MTBF_01:聯系人的添加和刪除
預置條件:1、在添加聯系人之前通訊錄內無任何聯系人
執行步驟 | 對應方法 |
打開通訊錄
|
openContent
|
清空聯系人
|
clearContent |
新建聯系人
|
newContent
|
確認聯系人新建成功
|
confirmContents |
刪除聯系人
|
deleteContens |
確認聯系人刪除成功
|
confirmDelContents |
退出通訊錄
|
exitContent |
二、接口化
1、面向接口的變成也可以引入自動化用例編寫中。可以用到設計核心用例,基本核心用例20-30條,核心功能基本不會變,但是UI變化比較大,這樣我們沒必要把用例重新寫一遍,只要把方法重新實現一下。
設計用例與實現用例分離
規范化用例
多態-應用的多版本
三、組件化與布局化
1、對常用的組件單獨編寫組件常用方法。我們最終獲取的每個對象都為某一個類型的組件
例如:對EditView設計通用的方法,首先想想你是如何測試編輯框的,將這些方法全寫在抽象的 EditView類中
獲取EditView對象
輸入文本
清除數據
判斷編輯框類型
判斷編輯框
各種異常與特殊方法預置、
四、界面化
1、界面化知識應用由不同的Activity組成,那我們可以將每一個界面封裝成一個類,操作、方法、變量,也就是屬性和方法再單獨封裝。
這樣只要哪個界面有變化,再修改對應的Activity就可以了。
實例:
撥號盤頁面
屬性:
常用的固定號碼,如:10086,10010,10000
常用的暗碼:*#06#、*#*#4636#*#*
組件ID:頁面各個組件ID按功能命名
頁面對象:頁面各個UI對象
方法:
輸入號碼
清除號碼、刪除號碼
撥號
其他設置(添加聯系人、暫停、等待、發送短信)
選擇號碼
2、Activity查詢方法
方法1:有源碼,從Manifest文件中獲取
方法2:使用命令查詢應用的全部Activity
adb shell dumpsys package<包名>
方法3:查詢當前Activity棧定的Activity
adb shell dumpsys activity
方法4:找到焦點Activity
adb shell dumpsys activity | find "mFocusedActivity"
簡化搜索字符
adb shell dumpsys activity | find "mF"
五、邏輯與數據分離
1、實際用例編寫過程中有很多數據非固定的而是可變的
如:
賬號信息:郵箱賬號、無線登陸賬號、即時通訊軟件
邏輯控制:log輸出、代碼分枝切換
電話號碼
。。。。。
對於可變的數據,我們應該剝離出來,使用一個數據類來進行控制和獲取
思路:
我們單獨設計一個class,功能就是,從某個地方讀取變量,再賦值給我們設計好的變量。
2、數據獲取方式
1)從命令傳入參數:-e 鍵值對
2)從文件傳入參數:寫一個配置文件,文件里包含配置變量的信息,放到手機目錄下,然后文件讀取,賦值給我們的變量。
3)從雲端傳入參數:需要有一個雲服務測試系統,用例通過POST請求,請求服務器,服務器上設置好信息,服務器再把信息返回給用例,用例再把信息賦值給對應的變量,然后其他用例再從數據類中讀取。
簡單實例:
建一個管理數據的package
建一個數據類
設置變量
在寫一些獲取變量值的方法
public class Date extends UiautomatorBase{ public static String wlan=""; public static String QQ=""; public static String phone=""; } public void getConfig(){ wlan=""; QQ=""; phone=""; } }