Airtest的前世今生

摘自《網易遊戲學院 質量保障》 出版時間2020年
——6.2 自動化測試方案Airtest介紹

Airtest框架介紹

我們在2014年開始做自動化測試的時候,看到了MIT研究人員公佈的論文,講的是一種新的圖形腳本語言Sikuli。在Sikuli中,開發人員想要使用其他界面的元素,或者調用其他程序是不需要輸入代碼的,而是隻要在代碼處插入相應的按鈕或圖標截圖。

Why Sikuli?

Sikuli automates anything you see on the screen. It uses image recognition to identify and control GUl components. It is useful when there is no easy access to a GUI's internal or source code.

這是一種理論革新,它直接以可視化的圖形,而不再是以內存中的對象來作爲調用單位,完全顛覆了以往的開發方式。

接觸了這樣一種思想之後,我們覺得非常驚豔,但是同時又認爲Sikuli更像是一個研究成果,暫時還不能夠成熟地應用在生產環境中。於是我們借鑑了它的思想,在我們自己的Airtest項目中嘗試落地,並做了更多的事情。

首先我們做了一層硬件抽象層的封裝,將Android/Windows/iOS等操作系統封裝成了一套統一的API,這樣我們就可以輕鬆地獲取到被測應用的截圖,對目標進行圖像識別,然後進行模擬操作。

圖像識別技術主要採用了OpenCV中的模板匹配和SIFT特徵值匹配。其中模板匹配對於分辨率相同的圖片匹配效果非常完美,但是由於手機分辨率各不相同,我們需要採用SIFT特徵值匹配來解決這個問題。

SIFT特徵值具有的尺度不變性和旋轉不變性滿足了這個要求,但是運行效率和識別率都不夠。於是我們進一步研究了常用遊戲引擎的UI適配規則,內置了Cocos引擎的適配規則,同時暴露了API讓遊戲開發者明確指定自己遊戲的分辨率適配算法。

這樣就完美解決了圖像識別的問題。實際上我們爲公司內項目編寫的腳本,可以運行在200種不同型號的手機上,甚至可以在電腦版客戶端上運行。

Poco框架介紹與實現原理

Poco的原理是參考了安卓測試框架UIAutomator和Web測試框架Selenium,先獲取到整個UI系統的樹狀結構,然後遞歸查找到需要操作的UI控件,再調用引擎或者設備接口進行模擬操作。

但是這些都不是針對遊戲的測試框架,具體到遊戲自動化測試上,問題就複雜很多。因爲遊戲引擎各異,除了流行的商業引擎Unity、Cocos等,還有各家公司自研的引擎,網易內部就有2款成熟的引擎。所以我們設計了一套通用的SDK,每個引擎只需按接口實現SDK即可。

我們的SDK在遊戲內啓動了一個RpcServer,外部的Python測試框架通過JSONRPC調用SDK的方法抓取遊戲的控件樹。再通過AirtestIDE顯示整個UI層次結構,通過模擬輸入進行自動化操作。

我們逐步支持了網易內部的各個引擎,也包括了Unity和Cocos,同時我們提供了多語言的SDK給其他公司開發者,他們可以自行擴展到他們的自研引擎,這樣我們就解決了遊戲跨引擎的UI自動化問題。

Airtest項目的特點和技術優勢

遊戲測試行業面臨的最大問題,如前文所述,由於遊戲引擎不統一,整套工具鏈都不統一,而且引擎方支持較少,需要開發者自行解決,這樣就使得不同引擎開發出來的遊戲不能以通用的方案去做測試,帶來了很多資源和技術上的問題。

另一個方面,對比Android/iOS/Web開發,整個遊戲行業的工具鏈和開發理念都落後很多,更別提生態環境了。Unity、Cocos的出現和流行解決了部分這類問題,但是願意投入人力和技術資源來解決這類問題的公司不多。

對於遊戲項目來說,通常開發進度超快,短時間大量迭代,所以代碼和接口不夠穩定,很難做自動化。於是我們只能從最上層UI層來做自動化。這就是Airtest Proiect整個項目誕生的初衷,我們希望能夠用盡可能低的成本,來實現高效便捷的自動化測試。

經過長時間的探索和嘗試,我們提供的Airtest Project相比於業內其他工具,有着非常巨大的優勢:
(1)跨平臺、跨引擎:支持Windows/Android/ios,支持Unity3d/Cocos2dx,同時可以擴展其他引擎。
(2)上手門檻低、上限足夠高:可視化編程,0上手門檻,同時可以結合整個Python的工具鏈進行持續集成。
(3)靈活擴展、可規模化:我們基於Airtest技術實現了大規模測試平臺TestLab,可以將腳本同時運行在上百臺手機上。
(4)經過驗證、有大量的最佳實踐:在網易遊戲內部,自動化技術已經應用在《夢幻西遊》《大話西遊》《陰陽師》等數十個產品,上千個自動化腳本累計運行上萬小時。

合作與開源

與Google的合作

Airtest之前是我們的內部工具,在內部開發和使用了3年,《夢幻西遊》《大話西遊》《陰陽師》《荒野行動》等大型遊戲都在使用。

開源這個事的契機最初是我在2017年5月去硅谷參加Google IO大會時,來到他們的Firebase Test Lab的展臺,與Google的開發者進行交流。當時我向他們介紹了我們公司這一套內部自動化解決方案,並邀請他們過來廣州參觀,他們對此非常感興趣。

後來的幾個月裏我們與Google方面一直保持密切的交流,他們也多次來廣州參觀,並評價我們是最好的遊戲自動化方案。於是我們達成了合作,將這個技術進行了完善和開源。

在與Google合作期間,我們雙方每週都有視頻會議,在Airtest項目的產品設計和技術上進行溝通。Google也在Google Firebase Test Lab上支持Airtest和Poco框架。除此之外,Google還給了我們很多開源方面的建議。

人工智能

關於人工智能我們在GDC有過分享,我們和Google合作的部分結合了人工智能嘗試改進圖像匹配算法。目前做到的程度是用Object Detection來取代單純的圖像匹配,這樣對於3D對象效果更好,即使3D對象轉向或被遮擋也能有較好的識別率。

另外我們還在積極地做一些嘗試,比如用人工智能技術做一個智能爬蟲抓取遊戲內的所有界面進行比對。再下一步就是真正帶智能地來玩遊戲,這個可能要等DeepMind團隊先把星際爭霸玩好了。

關於人工智能在遊戲行業和測試行業的應用,我是非常看好的,未來也希望能夠用它讓我們的Airtest變得更加強大。

未來與展望

遊戲領域的自動化測試是我們最擅長的,所以我們會爭取做到最好。目前我們在國內的相關社區非常活躍,有大量的用戶反饋,我們會持續優化和完善。

我們發佈時也支持了Android源生App的測試,而且反饋也不錯,這塊準備深挖一下。

接下來我們的主要開發計劃是擴展支持更多的平臺,支持所有端的自動化測試。我們在2018年5月已經發布了對iOS和Web的支持,未來會抓緊支持Hybrid/VR等其他平臺。

更重要的一點是,我們希望能把整個自動化測試的開源社區建立起來,有興趣的同學可以訪問我們的官網(http:/airtest.netease.com/)獲得更多信息以及我們團隊的聯繫方式,可以與我們一起交流技術,把開源事業做好。

 

---------------------------------------------------------------------------------

關注微信公衆號即可在手機上查閱,並可接收更多測試分享~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章