在Windows上一鍵啟動IOS穩定性測試

2022-01-01 快樂學習Python

收錄於話題 #IOS穩定性測試 6個

本內容由以下幾部分組成:

iOS Monkey介紹

工具介紹

環境搭建

代碼實現

iOS Monkey介紹

一款系統或者軟體是否穩定,我們需要對其進行穩定性測試,業內用的比較多的工具就是Monkey工具。

1、Android Monkey介紹

Monkey,猴子,小淘氣。Monkey工具,可以解釋為像猴子或者小淘氣一樣任性的操作工具。

Android平臺自帶有monkey工具,所以日常我們可以很方便的使用命令來使用monkey工具。那麼android的monkey工具在運行當中究竟發生了什麼呢?

其實,它是向Android系統或裝在Android系統上的軟體發送偽隨機的用戶事件流,純坐標的,用以模仿用戶的動作(屏幕點擊、屏幕滑動和觸控螢幕輸入等)進行操作Android設備,對Android設備或者運行在Android上的軟體進行穩定性測試。

但是,相比純坐標式的點擊,解析控制項樹,從而從控制項的角度去隨機點擊,這樣可以提高測試效率。例如Maxim這款針對原生monkey工具的二次開發,就屬於解析控制項樹層面的monkey工具。

2、iOS Monkey介紹

ios平臺有沒有自帶的monkey工具呢,沒有!但是因為ios的使用用戶眾多,所以各大網際網路企業陸陸續續的開發出一些比較好的工具,如Apple的uiautomator框架和xctest框架,Facebook的webdriverAgent框架,淘寶的tidevice和Facebook的idb等,基於這些工具,聰明的工程師們開發了一些類monkey工具用以輔助對運行在iOS設備上的應用進行穩定性測試。

以下是幾款相對較好的ios端穩定性 Monkey測試工具:

 

基於上圖,就能發現,這些工具基本都是基於XCTest和WDA來實現的,但是普遍問題是更新維護不及時,甚至是已經停止維護很久。

3、Fastbot-ios

工具研發麵臨的首要問題是對ios新版兼容開發成本巨大,特別是涉及WDA(WebDriverAgent,提供了某些跨進程App調度和獲取控制項樹的能力)私有接口的兼容,往往面臨等待Facebook解決WDA的兼容後才能著手展開。但是如今Facebook已經放棄了對WDA的後續兼容,轉向idb研發(類似於安卓中的adb工具,但在真機上存在穩定性問題尚無法完全替代WDA,WDA目前已由Appium以社區形式接手繼續迭代。)

除了兼容性問題,ios獲取GUI頁面信息的能力也需要關注,上面多款Monkey工具都集成了解析GUITree控制項樹的能力,相比於純坐標點擊,其優勢在於基於控制項解析的操作效率上要高很多,例如多次點擊幾個坐標很可能都是在同一個控制項區域內反覆操作;另外擁有控制項解析能力後,就可以定製某些行為樹或控制項屏蔽的配置機制來豐富工具的能力;同時相對來說控制項解析速度實際上也是考量的一個重要指標,作為壓力測試工具,我們肯定不希望10秒鐘才點擊一次,相反希望其擁有控制項解析能力的同時,速度上接近基於坐標的事件產生的速度。

而選擇fastbot-ios,卻是因為這一款工具自從發布就引起了業內廣泛的關注。它是字節跳動Quality Lab這個部門開發的,其擁有Android和ios兩個版本。在Android端,被融合了機器學習和算法,大大的強化了穩定性測試,且其算法已被解耦,也就是ios端也可以使用機器學習和算法,而且持續在更新優化中,最可喜的是它可以輔助其他工具擺脫xcode運行,後續日誌等功能開發也在排期中。

工具介紹

工具的核心是字節跳動的fastbot-ios,幫助我們可以擺脫MAC從而在Windows上運行的是淘寶的tidevice,達到一鍵觸發測試的是自己使用python封裝的執行文件。

1、fastbot-ios的介紹

1.1、控制項解析

上一章有介紹,許多工具都放棄低效的純坐標點擊,轉而使用解析GUITree控制項樹,從而達到基於控制項的隨機操作。但是這些工具基本上使用的是XCUITest或者WDA dump GUITree遞歸解析GUITree控制項樹,這裡它有一個問題,在複雜的頁面下這樣的遞歸會引起資源佔用問題,這樣會引起比較高的概率中斷和手機發熱問題。在這裡,字節跳動放棄了常規的解析頁面的方式,轉而僅依賴一個XCUITest的截屏接口進行跨平臺的圖像結構化編碼技術,從而達到了頁面的解析。

1.2、算法

算法的融合是這款工具最強大的地方

A、基於狀態的探索與利用

遍歷時,選擇當前State下對應Value最大的Action,選擇能夠帶來最大Value加成的Action。比如下圖StateA狀態下,可以採取的Action有3個,但是Action2帶來的Value最大,所以最終Agent進入StateA狀態時,就會選擇Action2。(當然,在強化學習訓練開始時,Value值是不知道的,我們一般都默認為0。然後讓Agent不斷去嘗試各類Action,不斷與環境交互,最終Value值會趨向於一個穩定的數字,才能得出特定State下,選擇某個Action,會得到怎樣的Value)

 

B、獎勵稀疏問題

在遍歷過程中獎勵(reward)往往是十分稀疏的,選擇使用好奇心強化學習的方法,同時結合自然語言處理對頁面信息做特徵抽象,在原有的reward function基礎上增加了好奇心(Curiosity)的reward,這樣就可以隨著模型變得「博學」,最後達到工具對測試覆蓋達到比較明顯的效果,尤其是前期。如下圖:

 

reward計算不添加Curiosity、只提供Curiosity都比原reward疊加Curiosity效果略差。

C、測試經驗復用

考慮到每次遍歷時間並非固定,不同APP情況也不同,當遍歷時間較短時,訓練就可能存在不充分的情況。所以將每次訓練完的模型也進行持久化保存,在下次測試前會先加載上次的模型繼續訓練,這樣「地圖」也就越來越全了。

1.3、日誌

iOS設備的日誌收集一直是比較麻煩的事,但是Fastbot-ios已經把日誌相關內容提上日程。

1.4、可測性提升

以下功能暫時還未開放出來,後續會陸陸續續的給出配置方法:

A、場景限定

能夠將測試局限於APP的某一個場景下,可以進入到該場景的任意子頁面,如果

退出該場景Fastbot-ios會立即重新進入限定的場景頁面。

B、屏蔽跳轉

屏蔽QQ,微信,淘寶等其他所有第三方跳轉。

C、自動登錄

從帳號池中獲取指定類型帳號並自動完成登錄。

2、tidevice的介紹

Android有adb,其實ios也有一個類似的工具---idb,但是目前還不夠穩定,還沒有tidevice強大。tidevice是阿里淘寶團隊開源的一個內部使用的ios自動化工具,那麼tidevice可以做什麼:

a、設備信息獲取

b、應用安裝、卸載、啟動、停止、查看應用信息、已安裝應用列表

c、啟動WebDriverAgent(不依賴xcode)

d、運行XCTest

e、性能數據採集

f、設備截圖、設備日誌等

詳細如下圖:

 

3、使用python相關介紹

一直以來,ios自動化的實現和執行都依賴MAC,其主要原因是因為需要通過xcode編譯和安裝WDA到ios設備中,然後在xcode上通過WDA實現對被測應用進行操作。直到出現了tidevice,讓ios的自動化脫離MAC成為一種可能。

在這裡使用python的目的主要是借用tidevice,對相關數值的獲取,最終達到可以一鍵啟動Windows上的ios設備進行穩定性測試,與此同時收集當前ios設備日誌。

環境搭建

通過上文知道,要想在Windows上一鍵啟動對ios設備的穩定性測試,其需要fastbot-ios的支持,需要tidevice的支持。

使用tidevice啟動連接在Windows上的ios設備命令是:tidevice xctest -B bytedance.FastbotRunner.xctrunner -e BUNDLEID:com.lianjia.beike -e duration:99999 -e throttle:500

我們可以發現命令需要使用的有tidevice、xctest和fastbot-ios。

1、安裝tidevice

A、安裝python

tidevices是依賴python的,需要安裝python3.6以上的版本地址:

https://www.python.org/downloads/windows/

安裝好以後,在dos窗口輸入python -V

 

如果像上圖一樣,返回python的版本,即可確定python已經安裝好了。

B、安裝tidevice

安裝python的一個庫,可以使用pip安裝:

pip3 install -U "tidevice[openssl]"

如果安裝失敗,可以試試pip3 install -U tidevice

安裝好以後,在dos窗口輸入tidevice -v

 

如果像上圖一樣,返回tidevice的版本,即可證明tidevice已經安裝好了。

2、安裝驅動

此時在dos窗口輸入tidevice list,你會發現會報一個10061的錯:

ConnectionRefusedError:[WinError 10061] 由於目前計算機積極拒絕,無法連接。

這是因為什麼呢?因為電腦的ios驅動沒有安裝:Apple Mobile Device Support

我們安裝一個apple官方的工具iTunes就行,安裝好以後在dos窗口再次輸入tidevice

list,就會正常的返回如下圖所示的內容:

 

如果需要在win7上面安裝可以去雲盤裡下載老版本的iTunes: https://pan.baidu.com/s/1shwC0ZmAN2qG2A8J7ZtQMw 提取碼: 464n

3、安裝xctest

從前文知道,我們使用命令啟動穩定性測試是需要用到xctest的,而其核心是通過xctest裡面的截圖功能接口來獲取GUITree的。

建議使用appium維護的包,Facebook的包沒有繼續維護了,可能存在其他問題,appium維護的包的路徑:https://github.com/appium/WebDriverAgent/tree/v2.16.1

A、下載到本地以後,進入WebDriverAgent-master裡面,再雙擊「WebDriverAgent.xcodeproj」

 

B、連接好設備以後,點擊如下圖所示的開始按鈕

 

C、當手機桌面出現了如下圖所示的圖標,即代表打包安裝成功

 

詳情可以參考:https://www.jianshu.com/p/2645776367d3(關注《WebdriverAgent項目編譯》)

4、安裝fastbot-ios

Fastbot-ios下載地址:https://github.com/bytedance/Fastbot_iOS

A、下載到本地以後,進入Fastbot_iOS-master裡面,再雙擊「Fastbot-iOS.xcodeproj」

 

B、連接好設備以後,點擊如下圖所示的開始按鈕

 

C、當手機桌面出現了如下圖所示的圖標,即代表打包安裝成功

 

詳情請參考:

https://github.com/bytedance/Fastbot_iOS/blob/main/Doc/handbook-cn.md

代碼實現

我們的最終目的是Windows上一鍵啟動針對ios設備的穩定性測試,那麼代碼究竟要如何實現呢?

從上文知道使用tidevice組合的命令,即可啟動針對ios設備上的「貝殼找房」這款APP的穩定性測試:

1、獲取參數

    

    

2、執行穩定性測試

     

3、獲取日誌

 

這裡獲取日誌是通過tidevice syslog獲取到的手機系統log。

4、保存日誌

5、保活和停止

備註:這裡的fastbotRunner就與Android裡面的monkey.jar是類似的

6、多線程處理

一邊處理跑穩定性測試的業務,一邊處理獲取系統日誌的業務,還需要一邊處理保存系統日誌的業務,在這裡引入多線程。

當穩定性測試的時間到了(或者關停止穩定性測試),即可停止測試(子線程和主線程都銷毀)。

引用資料:

https://github.com/bytedance/Fastbot_iOS

https://github.com/alibaba/taobao-iphone-device

相關焦點

  • 網際網路測試必須要知道的App穩定性測試
    App穩定性測試穩定性測試就是指軟體長時間的持續運行,系統版本是否穩定,是否能否持續的為用戶提供服務。
  • iOS10.0-iOS10.3.3系統支持一鍵越獄,64位系統
    這段時間,各大版本的越獄都有重大的更新,同時各個版本的越獄工具也開始普及,近日,愛思助手更新至7.61版本,正式在愛思助手上增加ios10.0-
  • Android穩定性測試利器-Monkey介紹及環境配置
    它向系統發送偽隨機的用戶事件流(如屏幕的點擊、滑動和系統按鍵操作等),實現對正在開發的app進行壓力測試。Monkey主要用於對android系統中開發的app進行穩定性測試。Monkey在使用時需要通過USB將手機設備與PC相連,在PC端使用Adb shell命令調用設備端的Monkey程序,設備端的Monkey程序自己生成隨機的操作序列來執行。
  • Windows 7經典啟動故障排除
    Windows 7啟動流程及易發故障★本階段常見故障【故障1:找不到活動分區】【故障2:活動分區引導記錄被改變】如果系統分區的引導記錄正確(Windows 7系統分區的引導記錄是NT60格式),接下來電腦就會根據NT60
  • 小雞模擬器ios版遊戲官方下載_小雞模擬器ios版手遊官方下載_18183...
    遊戲安裝一鍵完成:遊戲運行簡單方便,不需要專業知識及繁瑣操作;針對每款遊戲參數經過最佳優化、簡單更好玩。3. 找遊戲方便:遊戲歸類一目了然,特有中文遊戲、漢化遊戲專區,尋找經典遊戲方便快捷。4. 海量遊戲快速下載:內置上萬款經典遊戲,所有遊戲經過驗證可玩,節省遊戲尋找、嘗試時間,省心省力;免費、超高速、多線程下載。
  • Windows未能啟動原因可能是最近更改了硬體或軟體解決方法
    電腦開機無法進入Windows系統中,並提示了「Windows未能啟動,原因可能是最近更改了硬體或軟體,解決此問題的步驟
  • 紅隊測試之Windows提權小結
    本文與「酒仙橋六號部隊」的公眾號文章《紅隊測試之Linux提權小結》是兄弟篇,本節主要針對Windows作業系統下的權限提升進行介紹,提權是後滲透重要的一環節,在權限較低的情況下,站在攻擊者的視角進行內部網絡安全測試、系統安全測試、應用安全測試等方面會出現「束縛」,所測試出的質量與結果也會不同。
  • 一鍵解決所有Windows系統問題的神器-Windows Repair Pro-高級windows系統修復工具
    Windows Repair 是來自國外Tweaking公司的一款效果顯著全功能高級windows系統修復工具,
  • Y-平衡測試—動態穩定性測試
    其中在測量前要測試上下肢的肢體長度,測試結束後,上肢測試的兩側正常差值為4cm,下肢測試則除前側伸展的正常差值為4cm外,另外兩側的正常差值為6cm。Plisky等人認為,在上肢三個方向測試的數值中,肢體不對稱差距在4cm以上的,上肢損傷的風險比正常範圍高出2.5倍。 Y-平衡測試(上肢)是一個動態的測試,它對上肢的靈活性、穩定性都有很大的挑戰。
  • 虛擬機VMware安裝windows系統最全教程
    與「多啟動」系統相比,VMWare採用了完全不同的概念。多啟動系統在一個時刻只能運行一個系統,在系統切換時需要重新啟動機器。VMWare是真正「同時」運行,多個作業系統在主系統的平臺上,就象標準Windows應用程式那樣切換。而且每個作業系統你都可以進行虛擬的分區、配置而不影響真實硬碟的數據,你甚至可以通過網卡將幾臺虛擬機用網卡連接為一個區域網,極其方便。
  • 【教程】基於Hyper-v平臺的 Windows 封裝系列教程
    (命令行分區、基於命令行進行磁碟映射、dism應用系統映像、命令行修復引導等);系統優化設置及打補丁;創建hyper-v還原點;第一階段封裝及第一階段後創建還原點、導出和備份虛擬機及系統分區;PE下第二部分封裝及創建還原點、系統備份;格式化虛擬機C盤並重新應用封裝好的wim映像;測試尋找bug;後續總結(下一套教程:作業系統精簡及office定製——作業系統批量部署即MDT合SCCM入門)。
  • 如何安裝linux和windows雙系統
    像我們運維學習者,平常會用到linux,但是又必不可免的會用到windows,所以在一臺電腦上安裝linux和windows雙系統就成了剛需,那麼如何來安裝
  • 一鍵激活windows或者office,小白也可以使用~
    好了,進入今天的主題,一鍵激活windows或者office,小白也可以使用~小白也會用的激活神器,一鍵智能激活系統或者office~軟體名:HEU_KMS_Activator_v20.0.0點擊中間圖標位置,即可自動判斷選擇激活方式~
  • 分利寶IOS自動化打包
    到了測試階段,需要頻繁的打包提交到測試平臺,整個流程包括:編譯-打包-上傳,整個過程需要我們去堅守每一步操作,提交app store同樣免不了一系列複雜動手操作過程。對此,我們研究了iOS自動化打包,通過使用shell腳本,輸入命令,一鍵打包上傳,提高工作效率。
  • 史上最全的 iOS 各種測試工具集錦
    具體參考資料:https://developer.apple.com/library/ios/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/UIAutomation.htmlXCTest 是蘋果在 iOS 7 和 Xcode5 引入的一個簡單而強大的測試框架,
  • 測試Windows Subsystem for Linux
    這些努力集中在四個主要支柱:Linux測試項目,基於場景的測試,模糊測試和社區反饋。LTP    改進兼容性的一個重要工具是Linux測試項目(LTP)。LTP是聯合創建的單元測試庫,旨在驗證Linux內核的系統調用和文件系統接口。 LTP通過提供標準化回歸檢查和未來開發的路線圖,幫助我們驗證實現的穩健性和穩定性,這是非常寶貴的。
  • windows 10 密碼繞過與更改
    有時候會出現忘記windows密碼的情況,win8與win10之前的系統,重置密碼與繞過密碼都可以實現。
  • 電腦系統的一鍵還原 學會使用 事半功倍
    電腦上一鍵還原鍵快捷鍵是一般是F11還是
  • 一套完整的Appium自動化測試環境搭建過程
    Appium是一個開源的自動化測試框架,支持跨平臺,支持多種程式語言,可用於原生,混合和移動web應用程式,使用webdriver驅動ios,android應用程式、那麼為了學習app自動化測試首要任務肯定就是搭建測試開發環境, 因此在這裡記一次搭建Appium自動化測試環境的完整過程,文章較長,需要花費一定的時間,請耐心閱讀,如果文中有什麼錯誤請指正。
  • 一鍵徹底禁用windows系統更新,這個小工具解君愁
    今天給大家分享一個小工具,專治win系統更新,一鍵徹底禁用更新,如果你想要更新,一鍵打開,就是這麼簡單,對小白特別友好。windows update blocker很小,不到半M,但很強