Airtest Project:一款免費的自動化測試工具
Airtest Project簡介
Airtest Project是網易出品的一款自動化解決方案,它適用於任意游戲引擎和應用的自動化測試。
Airtest Project支持Android、IOS和Windows平台。
Airtest 是一個自動化測試框架提供了利用圖像識別技術,Airtest Project不需要依賴被測對象的源碼。
Airtest Project是跨平台的API,它基本和所有Android移動應用程序和Windows游戲兼容。
在2018年3月26號的Google開發者日上,Google也宣布了這款由網易開發的項目,因此很值得一試。
Airtest Project提供了一個自動化測試編輯器Airtest IDE,Airtest IDE使用了基於圖像識別的UI自動化測試框架—Airtest來進行控件定位;它同時集成了POCO框架。
POCO框架是基於控件識別的UI自動化框架,支持主流游戲引擎:Cocos2d-x, Unity3d,支持Android原生應用。因此可以選擇是用圖像識別或者基於控件定位的方式來進行控件定位。
AirtestIDE下載及安裝
AirtestIDE是一個跨平台的IDE,可在Windows(x64)和macOS上運行。
AirtestIDE是免安裝版,直接去Airtest Project官網進行下載即可。
下載完成以后,雙擊可執行的文件AirtestIDE.exe即可使用。
Airtest Project官網:Airtest Project官網傳送門
啟動AirtestIDE,界面功能顯示如下圖所示(備注:本文演示平台為WINDOWS/Android):
我們來看看IDE窗口布局。在頂部,有一個菜單欄和快捷按鈕,用於創建新項目,保存項目,運行腳本和檢查報告輸出。
左上方有Airtest窗口,窗口提供預封裝的關鍵字,用於記錄捕獲的Airtest腳本(基於圖像識別技術)。
左下角包含Poco窗口,可處理所選界面的UI元素,以及在樹形結構表單中可以看到所選UI界面的位置。
中心區域包含腳本編輯部分,用於使用Airtest API在Python中開發自己的腳本。下面的日志輸出部分在執行腳本時顯示相應的日志內容。
在右側,有一個實時的手機屏幕,支持使用鼠標事件來遠程控制設備。
連接移動設備之前需要做什么?
為了能夠使用移動設備測試和調試移動應用和游戲,該設備需要處於開發人員模式並且 USB調試設置已打開。如果使用的操作系統是Windows操作系統,則可能還需要在系統上安裝相應的設備驅動程序。
AirtestIDE連接移動設備
連接Android手機
今天主要介紹下Android平台的操作
通過USB數據線將Android手機連接到PC上,單擊refresh ADB按鈕顯示在設備列表中已連接的手機。
如果狀態為“未授權”,請仔細檢查是否已啟用USB調試,並允許計算機在設備上執行USB調試。
點擊connect就可以連接到設備並將設備投影到IDE里,如下所示:
如果設備已鎖定,可以使用設備按鈕直接解鎖,也可以使用IDE開始操作設備。
- 例如,單擊屏幕下方的電源按鈕以喚醒設備並使用鼠標解鎖設備。
AirtestIDE的使用
成功連接手機后就可以使用AirtestIDE來進行腳本錄制與回放功能。
錄制方式分兩種,一種基於圖像識別的,另外一種基於控件定位的。
本文基於凸顯識別的錄制方式介紹兩種:
一種是手動操作app,AirtestIDE自動化錄制腳本回放;
一種是自己手動通過添加關鍵字進行圖像識別的方式,一步步記錄APP操作腳本錄制回放;
測試app我就直接測試微信,進入我們的testclass微信公眾號,點擊文章,瀏覽文章為例,詳細操作步驟如下所示:
1.點擊微信,進入微信APP;
2.通過搜索菜單欄搜索testclass,進入我們的公眾號;
3.點擊公眾號菜單,進入文章列表;
4.選擇文章進入詳情;
5.點擊“閱讀原文”,進入www.testclass.cn官網;
6.進入【關於作者】菜單;
自動錄制腳本
按照上面介紹的步驟連接上手機后,點擊IDE里的File->New,命名文件testclass.air(默認生成.air的文件),創建一個腳本如下所示:
接着點擊Airtest Assiant下的攝像機圖像錄制按鈕(或者按快捷鍵F6)即可開始錄制,如下所示:
點擊右側的設備屏幕區域,完成上面描述的1~6步驟,操作完再次點擊錄制按鈕即可停止錄制,錄制完會自動生成腳本如下:
注意:腳本錄制完成后,需要手動回退微信APP界面到主頁然后回退到手機屏幕主頁,或者點擊右邊屏幕的Home鍵,回到手機屏幕主頁。
接下來就是回放腳本,點擊菜單欄的Run Script(快捷鍵F5):
上面都是操作性的步驟,如何增加斷言呢。如下所示:
再次手動回退微信APP界面到主頁然后回退到手機屏幕主頁,F5快捷鍵,回放錄制的腳本;
執行完成后,點擊工具欄按鈕,查看執行報告:
如果測試報告不能正常顯示截圖,請復制URL在其他瀏覽器打開(谷歌、火狐);測試報告效果如下圖所示(部分截圖):
手動錄制腳本
手動錄制腳本的方式,其實和自動錄制腳本的實現原來一樣。
只是將操作步驟一步一步的分解操作,需要自己手動輸入或者選擇關鍵字實現操作方法。
同時需要通過自己手動截取定位識別的圖片。
這種腳本錄入方式可以增加准確度,同時可以減少自動錄入的誤操作的步驟,可以直接在想要加入斷言的地方加入斷言。
但是這種方法需要你會使用基本的關鍵字,例如以下幾個關鍵字的解釋:
touch()#點擊元素,參數:元素圖片;
wait()#等待時間,參數:時間; swipe()#滑動屏幕,參數1:元素坐標值;參數2:需要定位的元素圖片; exists()#判斷圖片是否存在,存在則定位元素焦點;不存在返回False; text()#輸入文本,參數:字符串; sleep()#等待時間,睡眠時間,參數:時間;
錄入腳本的方式,和手動加入斷言的方式相同,需要一個操作錄入一個關鍵字,然后在右邊屏幕區域截取參數截圖,見下圖:
控件定位方式
上面介紹了根據圖像識別技術定位的方式,接着來介紹下按元素控件來定位的方式。
圖像的話可用於不能用控件定位時的一種補充,基於控件體系的定位方式會比較精准。
穩定性相對來說也會好一點,兩種定位方式結合起來幾乎可以無所不能了。那通過AirtestIDE如何使用基於控件的定位方式呢?
點擊Script Editor下的添加按鈕,再創建一個腳本文件。
在Poco Assistant下方選擇Android,接着只要點擊IDE窗口左側的Poco Assistant下方最右側的錄制按鈕即可。詳細操作步驟如下所示:
出現以下提示,按照上圖點擊YES就行啦!別問我什么意思,我也不知道!哈哈!
Poco mode has changed. Do you want to insert poco init code at the current cursor position? Yes No
點擊Yes以后腳本區域會自動導入Poco需要的包:
from poco.drivers.android.uiautomation import AndroidUiautomationPoco poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
在安裝插件Yosemite和PocoService出現以下提示,直接忽略風險即可。
沒多大的風險,頂多盜取你幾個億,哈哈,因為不裝這個服務用不了!你用不了!
腳本錄入步驟基本上一樣,點擊IDE窗口左側的Poco Assistant下方最右側的錄制按鈕,然后手動操作步驟,IDE會自動記錄識別的腳本;
腳本錄入完成,詳細代碼如下所示:
# -*- encoding=utf8 -*- # www.testclass.cn # Altumn __author__ = "Altumn" from airtest.core.api import * auto_setup(__file__) from poco.drivers.android.uiautomation import AndroidUiautomationPoco poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False) poco(text="微信").click() poco("搜索").click() poco("com.tencent.mm:id/h1").click() text("testclass") poco(boundsInParent="[0.34814814814814815, 0.033854166666666664]").click() poco(text="一個").click() poco("com.tencent.tbs.core.webkit.WebView").click() poco("com.tencent.tbs.core.webkit.WebView").swipe([-0.0734, -0.4783]) poco("com.tencent.tbs.core.webkit.WebView").swipe([0.0056, -0.6197]) poco("com.tencent.tbs.core.webkit.WebView").swipe([0.0904, -0.8056]) poco("com.tencent.tbs.core.webkit.WebView").swipe([0.0254, -0.7722]) poco("com.tencent.tbs.core.webkit.WebView").click() poco("com.tencent.tbs.core.webkit.WebView").click() poco("com.tencent.tbs.core.webkit.WebView").click() poco("com.tencent.tbs.core.webkit.WebView").swipe([0.1215, -0.7452]) poco("com.tencent.tbs.core.webkit.WebView").click()
腳本回放方式和前面幾種方式一樣,按快捷鍵F5執行腳本回放,在此不再詳述。回放成功后會生成測試報告,測試報告查看的方式也相同。
以上文章講解了基於圖像和基於控件腳本錄制方式,如果你能夠結合兩種方法使用,基於控件定位搞不定的就把基於圖像的方法加入,這樣可以增加元素識別准確性。
本工具適用於沒有太多編碼技巧或者討厭編碼的人,同時也適用於敲代碼敲到想嘔吐的童鞋。當然在日常的工作中也可以使用基於圖像識別的定位方式去錄制一些腳本解決實際工作中的一些重復的體力活。