摘要
理論基礎
● 對被測應用界面對象/界面元素的捕獲與識别,并對其進行管理與操作;
● 對于測試腳本的編輯功能與文法解析功能;
● 對于測試資料的組織與管理;
● 對于腳本執行結果的分析與輸出;
如果細說,還可以牽扯到如腳本錄制功能,插件管理功能,與測試管理工具、缺陷跟蹤工具的整合等内容,涵蓋面相當廣泛。但所有這些都是為了一個目的:模拟測試人員行為,達到功能性回歸測試的目的。本文嘗試從以下最關鍵的幾點來分析自動化測試工具的核心構成部分。
1、關鍵字驅動
1)被測對象,即被測應用界面上的元素;
2)針對這些對象的操作,如點選(按鈕)、填充(文字)、選擇(單選框/多選框);
3)以及基于這些操作的數值;
上述三種元素可以描述為以下表格:
對象
操作
數值
文本框
輸入
文本值
按鈕
點選
無
選擇框
選擇
選項值
或者以面向對象的文法表述為:
對象.操作(值)
該語句是關鍵字驅動腳本的構成基礎。
2、對象庫
對象庫是用于儲存被測應用程式界面對象(界面元素)的地方。它是關鍵字驅動測試工具的關鍵點。有了它,使用者可以更容易的維護被測對象、更快速的建構測試腳本。它是如何做到這些的呢?讓我們看看下面的結構:
實踐
探讨完上述關于不同測試工具的使用特點,更準确的說,是安卓應用自動化測試工具的特點,我們不妨來實踐(其實是模拟)一個移動應用的測試過程。這裡我們選用api demo作為被測應用,選用droidpilot作為測試工具。
分析被測應用
被測應用api demo使用标準android sdk作為開發控件,且被測應用未加擾碼,是以,界面上所有元素可以被droidpilot識别。
對于一些非标準android sdk控件開發的應用,這裡有兩種情況:一種情況控件完全由自己開發,如果是這種情況,droidpilot完全無法識别對象;另一種情況是在标準控件基 礎上做了二次開發,這樣的話droidpilot隻能識别到原生sdk那一層。對于這兩種情況,都可以聯系droidpilot開發團隊為非标準控件度身 定制專屬插件,用于識别被測控件。
對于擾碼問題,正如上述《前置條件》章節所描述的,droidpilot本身是無能為力的,隻能請開發團隊去掉擾碼,打包一個不加擾碼的測試包給測試團隊使用了。
這裡我們假設一個測試用例是進入\app\activity\animation\fade in\界面,對界面的元素(按鈕、文本框、多選框、單選框、下拉清單)進行操作,并驗證文本框的文字是否符合我的預期結果。測試步驟如下:
測試用例1 -驗證\app\activity\animation\fade in\界面元素
前置條件:api demo已經啟動,停留在起始頁
步驟
動作
期望結果
1
點選app項
點選activity項
點選animation項
點選fade in項
在文本框輸入"put your text here"
勾選checkbox1
向下滑動一次螢幕
點選下拉框
勾選venus
檢查文本框
文字="textcolorprimary"
開發測試腳本
先使用droidpilot腳本編輯工具抓取各個螢幕的對象,然後把這些對象選入腳本設計器,按照測試用例的順序來排列,如下圖:
如下圖,傳統模式,測試工程師可能在第一輪測試才有一次full test,在後續的回歸測試中,可能隻能做到部分回歸。
如果引入自動化測試工程師,同步開發測試腳本(理想情況,每個應用自動化比率達到70%~80%,整體自動化比率達到60%~70%),有可能使得回歸測試比率有所提高。
從零做起
既然如此,何不從現在開始,從零開始,在項目中嘗試引入自動化測試,哪怕隻是抽調部分人力着手部分應用的自動化測試,至少可以達到daily build smoke test的效果。再者,移動應用自動化測試行業正處于起步階段,此時介入也不失為一個好時機。
結論
回顧上述讨論的内容,我們設想能在移動應用自動化測試領域延續桌面系統自動化測試的成功經驗,從理論基礎、工具支 持、以及後續項目管理方面都做了一番探讨。盡管主要還是局限于安卓應用的自動化方面,對于ios提及較少。不難了解,ios本身支援的機型有限,對于裝置 相容性測試并不是重點關注的内容。而在功能性回歸測試方面,它本身也有相關工具支援。至于像blackberry之類的平台,因為本身并沒有呈現爆炸性的 應用增長,是以也沒有列在讨論範圍。是以,本文仍以安卓平台作為自動化測試的突破口,希望從中能結合市面上的一些商用工具,嘗試實踐以“關鍵字驅動”為基 礎的自動化測試,而非原始的以“坐标點”為基礎的螢幕點選測試。對于開源工具也沒有提及,原因是考慮到像robotium和monkeyrunner之類 的流行工具可能更貼近于開發工程師使用,而非更貼近于測試工程師。是以,我們希望在上述的讨論中能帶給讀者在測試項目中新的啟發。
====================================分割線================================
最新内容請見作者的github頁:http://qaseven.github.io/