• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • InstrumentDriver,對iOS自動化測試說 Yes!

    發表于:2012-06-05來源:Taobao QA Team作者:ziyu點擊數: 標簽:自動化測試
    InstrumentDriver 是 Mobile自動化小組最近實現的基于 instrument,針對 iOS 的自動化測試框架,目前支持 java 語言編寫測試用例。 研究過iOS自動化測試的同學肯定對 instrument UI Automation 有所耳聞,或者已經使用它進行自動化測試實踐。iOS 4.0

      InstrumentDriver 是 Mobile自動化小組最近實現的基于 instrument,針對 iOS 的自動化測試框架,目前支持 java 語言編寫測試用例。

      研究過iOS自動化測試的同學肯定對 instrument UI Automation 有所耳聞,或者已經使用它進行自動化測試實踐。iOS 4.0 開始,蘋果官方提供了 UI Automation 以支持應用的UI自動化測試。不過4.0版本并不支持錄制功能,只能根據提供的API文檔編寫 javascript 測試腳本,instrument 驅動腳本在應用上模擬用戶行為。

      讓人興奮的是,5.0開始,UI Automation 支持錄制和回放了。用戶在應用上的操作過程被記錄下來并生成對應的腳本可以進行回放。雖然錄制的腳本回放很不穩定,健壯性不強,錄制后需要進行一些簡單調整然后加入自己的校驗邏輯,但已經很大程度上方便了用例的編寫。

      針對 instrument 錄制的腳本回放不穩定,無提供驗證框架及異常處理,我們編寫了公共 javascript 類庫,對 instrument 原型進行了擴展,加入了統一的驗證方法,異常處理,這樣編寫腳本更加方便,用例也更健壯了。

      自動化測試不是簡單的錄制回放,腳本運行通過就可以了,而是一整套的流程。instrument 支持批量運行 trace 文件中導入的 js 腳本,也支持命令行運行單個腳本,但是這并不能建立一個比較完善的回歸體系,從數據準備,到用例編寫、調試、維護,回歸,運行結果的收集,到測試報表的生成,結果的分析等。針對這些缺失,我們只能從中想出辦法補充實現這些功能。比如編寫shell遍歷目錄挨個運行用例,開發日志轉換的工具用于解析原始測試結果生成所需格式的文件等。由于 instrument 中 js 腳本無法讀取外部文件或者進行數據庫操作,這也讓數據驅動和數據準備無從談起。

      在內部使用 instrument UI Automation 進行自動化測試的過程中有很多反饋。比較強烈的問題是:錄制的腳本如同雞肋,非常冗余,可讀性差(腳本自描述性不好),難以維護,需要進行較大改動才能運行起來;無法單步調試腳本,只能通過打日志的方式查看變量的值;js編寫腳本也比較費力,經常出現語法錯誤找不到錯誤位置的情況。這大大增加了自動化測試的成本,減低了同學們的使用積極性。

      自動化測試是好東西,實施好了,能極大減輕測試人員的重復勞動,節省時間用于關注更深層次的問題,提高工作效率與質量,更好的保障產品的質量。

      雖然過程是曲折的,但前途是光明的。為了從根本上避免上述使用過程中遇到的問題,我們開始想辦法脫離 js 編寫腳本的方式,通過編寫java測試用例,來避免腳本無法單步調試、查看變量值,無自動語法檢查、代碼智能感知等極大影響自動化測試體驗的弊端。java強大的文件讀寫,數據庫操作也讓數據驅動和數據準備的實現成為可能。加上java能與豐富的外部工具進行方便的集成,這更堅定了我們采用java實現的決心。

      由于iOS系統本身的封閉性,給自動化測試帶來了諸多挑戰,要么在應用中注入測試代碼進行自動化測試(eg:我們的 AppFramework),要么使用官方的 instrument。兩種方式各有利弊,怎樣在這之中尋求一種更好的方式呢?通過調研發現 instrument 提供的一個在腳本中能夠調用外部shell的“漏洞”,讓我們想法的實現成為可能?;诖?,有了 InstrumentDriver 的實現。

      InstrumentDriver 整體框架圖:

    圖1 InstrumentDriver 整體框架圖

      圖1 InstrumentDriver 整體框架圖

      Server/Client 示意圖:

    圖2 Server/Client 通信示意圖

      圖2 Server/Client 通信示意圖

      InstrumentDriver 的實現有以下功能特點:

      1. C/S 模式運行。

      框架分為Server端和Client端,雙方進行socket通信傳遞消息:Client端(Mobile)負責請求測試步驟運行,并返回運行結果;Server端(Java用例)負責響應Client請求并接受測試步驟的運行結果。C/S模式的實現,甚至可以脫離Mac在PC上編寫、調試測試用例(運行肯定離不開Mac系統),在熟悉的window環境下,讓用例編寫更加得心應手。

      2. 純Java語言編寫測試用例,很好的兼容了instrument js格式的API。

      InstrumentDriver 用Java實現了各元素類型的之間的繼承關系以及各元素類型所提供的操作方法,還擴展了一些更易于使用的操作,如滑動操作等。熟悉instrument js語法格式的測試人員可以很快用java語言實現測試用例。

      3. 提供了清晰的控件樹狀結構打印及便利的元素查找方法。

      可以樹狀結構打印出當前窗口的所有元素或某一元素下的所有子元素。輸出屬性中不僅包括各元素的基本屬性(name,value,label,rect等),更包括代表該元素的guid,用例中直接使用該guid屬性即可代表該元素進行相應操作。findElemenByText及相關重載方法可以很方便的根據元素的顯示文本,類型,索引組合查找該元素,極大提升了用例的自描述性和可維護性,也更好的簡化了用例的編寫。

      4. Debug模式和非Debug模式運行

      用例可以debug模式和非debug模式兩種方式運行。debug模式通信時傳遞json對象或數組,返回后實例化為具體對象??梢哉{試腳本,查看相關對象的屬性值。非debug模式僅在需要操作UI元素或獲取UI元素屬性的時候才通信,較大的提升了運行速度(debug模式的2倍左右)??梢赃@么認為:用例debug模式通過后,非debug模式也能運行通過。

      5. Junit方式運行測試用例

      InstrumentDriver 以大家熟悉的Junit方式驅動測試用例,具備了Junit單元測試的所有優點??梢愿媒Y合其它工具進行持續集成和數據準備。如結合svn,maven,hudson進行持續集成,通過iTest進行數據準備等。

      一些截圖說明:

      下圖是UI Automation錄制的腳本截圖

      可以看到,腳本非常冗長,只能通過元素的子元素一級級往下查找,很多索引方式生成的腳本自描述性不高,頁面稍有變化,不能很快找到對應的腳本進行更改,這樣維護成本是很高的。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>