關于Airtest的使用探索

一、Airtest的簡介

??Airtest是網易出品的一款基于圖像識別和poco控件識別的一款UI自動化測試工具。Airtest的框架是網易團隊自己開發的一個圖像識別框架,這個框架的祖宗就是一種新穎的圖形腳本語言Sikuli。Sikuli這個框架的原理是這樣的,計算機用戶不需要一行行的去寫代碼,而是用屏幕截屏的方式,用截出來的圖形擺列組合成神器的程序,這是Airtest的一部分。
??另外,Airtest也基于poco這個U控件搜索框架,這個框架也是網易自家的跨平臺U測試框架,原理類似于appium,通過控件的名稱,id之類的來定位目標控件,然后調用函數方法,例如click(),swip()之類的方法來對目標控件進行點擊或者是操作。

二、關于自動化測試

??概念:自動化測試,就是把繁雜的人工測試用例利用自動化測試工具編寫成代碼,讓機器代替人工自動跑用例的過程。實際上就是把以人為驅動的測試行為轉化為機器執行的一種過程。
??意義:節省人力、物力、時間、硬件資源等,提升測試效率,特別對于繁瑣重復的測試用例,可以使測試人員更專注于新的測試模塊的建立和開發,從而提高測試覆蓋率。

三、市面上常見的UI自動化測試工具以及優缺點

image.png

以上主流工具的優點跟缺點:

image.png

相較于以上工具來說,Airtest有以下優點和缺點:


image.png

所以其實基于圖像識別的Airtest更適合用于游戲測試多一點。

四、環境的搭建

1.AirtestIDE的下載
AirtestIDE已經幫你集成了所有的環境,自帶錄制腳本欄,自動生成腳本,自帶編輯器還自帶模擬器,有了一個AirtestIDE就可以輕松簡單的錄制腳本了。下載地址是Airtest的官網:

http://airtest.netease.com/

AirtestIDE的使用教程跟文檔也在下面的連接中:

http://airtest.netease.com/docs/docs_AirtestIDE-zh_CN/index.html

如果你想要利用Airtest的API,自己拓展更多的高級功能的話,可以先下載airtest的python第三方依賴庫:

$brew install python3.6.4
#下載python3   
$pip install Airtest
#下載Airtest python第三方依賴庫
$pip install poco
#下載Airtest提供的Android app ui測試庫pocoui
$brew cask install android-sdk 
#安裝Android-sdk,詳細的配置教程網上有,這里不詳細說了。

然后再下載一個Python的編輯器來編輯代碼,個人推薦使用的是pycharm。接下來就是使用官方提供的啟動demo代碼:

from airtest.core.api import *
# 通過ADB連接本地Android設備
connect_device("Android:///")
#安裝待測軟件apk,路徑信息。
install("path/to/your/apk")
#開始運行app
start_app("com.pingan.certicationApp")
#點擊某個圖片,Airtest中基于圖像識別語法,圖片自己提供。
touch(Template("image_of_a_button.png"))
#滑動語音,開頭圖片跟結尾圖片
swipe(Template("slide_start.png"), Template("slide_end.png"))
#添加斷言的圖片
assert_exists(Template("success.png"))
#點擊Android上的返回鍵
#keyevent("BACK")
#點擊Android上的Home鍵返回
#home()
#uninstall("package_name_of_your_apk")

以上已經添加了每一句作用的注釋,小伙伴們可以動手試一下將程序跑起來,當然如果說易操作性還是AirtestIDE比較容易上手一點。

五、AirtestIDE的真實場景運用

以上介紹了那么多的就來講一下實際操作,以平安的智能雙錄app為例子,首先我們先來看一下用例步驟:

  • 1、點擊雙錄列表待上傳頁面的重新錄制按鈕
  • 2、進入錄制后點擊開始錄制按鈕
  • 3、點擊錄制完成
  • 4、點擊確認完成
  • 5、在彈框中點擊“確認”
    首先連接設備并進行錄制:


    image

然后我們用IDE開始錄制腳本,先截取每一個按鈕的圖片,進行touch操作,如圖1,左邊就會產生每張被截取的控件的樣式。

之后機器就會在整個界面中取一張截屏,然后在截屏中尋找我們截取的那個部分,然后再定位到圖片的位置,對圖片進行點擊的操作,從而達到通過圖像識別進行測試的自動化,當然基于圖像識別的方式比較難進行輸入值的操作,比較適合一些重復繁瑣的按鈕點擊事件。意思就是說這種通過截取圖像再的方式并不是很適合用來做登錄類的需要用戶輸入數據的東西。

圖1

那么問題來了,怎么樣才能夠讓Airtest也精準定位到輸入框,從而完成自動輸入信息類型的自動化測試呢?其實我們別忘了Airtest還有基于poco這個UI控件搜索框架,所以如果是Android類的app,還是比較適合用poco來定位控件的位置,從而實現自動化,下面有一個智能雙錄軟件新建保單的測試用例:

  • 1、點擊新建雙錄按鈕進入新建雙錄頁面
  • 2、隨機輸入000開頭的14位保單號
  • 3、輸入投保人姓名
  • 4、輸入投保人證件類型
  • 5、輸入投保人證件號
  • 6、輸入保險產品
  • 7、輸入被保人幸免
  • 8、選擇銷售渠道、產品類型、繳費頻次
  • 9、填寫繳費期、每期保費、保險期間
  • 10、勾選雙錄材料

如圖2所示,只要點擊AirtestIDE左上角,Android旁邊的錄制按鈕,然后只要點擊右邊模擬器的響應的控件,就會幫你自動定位那個控件的位置,然后再選擇動作事件,例如:點擊chlick(),滑動swipe()之類的操作,如果要輸入字符的話,可以通過先選中需要輸入內容的輸入框,然后再用test(“要輸入的內容”)來自動進行輸入操作,是不是很簡單省事?

圖2

除了以上這些,我們還可以往腳本里面加入斷言,然后利用Airtest一鍵生成測試報告,如圖3所示,這種報告不僅可以讓你快速了解到你測試的哪個步驟出錯了,而且同時也便于判定UI有沒有展示異常,但是Airtest有一個缺陷,就是只要某張圖片識別不出來,整個腳本錄制進程就會停止,后面的控件就不會再去識別,報告也只會停留在失敗的那一步,生成報告可以點報告按鈕或者ctrl+l,報告以網頁的形式呈現,如下圖:

圖3

總結

??Airtest操作比較簡單,基本上不涉及到代碼,所以非常適合剛入門沒什么測試經驗的人利用這個工具做UI自動化測試,同時Airetest又提供了開源的API,讓資深測試工程師可以基于Airtest的框架上再做高級的定制化擴展功能。
??如果說這個軟件有存在不足的地方,個人認為就是不支持斷點續傳,如果測試中出現了錯誤以后整個測試就停下來并且要手動從頭開始,這里可以進行二次開發,第一種讓某個錯誤出現的時候選擇自動重新跑腳本,這種場景適用于前面的按鈕跟后面的按鈕不在同一個頁面上,沒有點擊到前面的按鈕,后面的按鈕也不會出現,第二種將錯誤記錄,再跑接下來的腳本,這種場景適用于兩個按鈕都在同一級頁面,相互間影響不大可以先觸發后面的按鈕進行測試。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。