Airtest從入門到放棄?不要急,這份免費的“超長”攻略請收好!


前言

不知道你有沒有遇到這種情況?在剛接觸我們的Airtest項目的時候,總是興致滿滿、斗志昂揚;但使用一段時間后,卻總是被“找不到圖片”、“連不上設備”、“錄制的腳本不能運行”這些問題勸退。

不要着急,今天我們特意跟同學們分享下當年入坑Airtest的經驗;希望看完今天這篇攻略,可以讓你在入門Airtest的時候少走一些彎路!

1.設備連接篇

1)連接Android設備

Airtest支持2種類型的安卓設備,一種是安卓真機,另一種是安卓模擬器。

先來說下真機,用USB線連接手機和電腦、打開開發者模式的USB調試選項,這些基本操作都不在話下,重要的是,完成這些基本操作之后,發現IDE還是連不上這些安卓設備。

連不上的典型現象如下:

① 在IDE的設備連接窗口,看到待測設備的ADB status是 unauthorized 。這時候你就要看下手機上是否出現了1個 允許USB調試的彈窗 ,看到了點擊確認即可。如果沒看到的話,那就拔插設備,重新來一遍基礎操作。

② 連接設備的時候,log查看窗出現1個 AdbShellError 的報錯,這個情況就復雜的多。因為造成這個報錯的原因有很多種,比如出現ADB沖突,這時候往往會出現 adb server version (40) doesn't match this client (39); killing... 這樣的提示。又或者是你的手機沒有成功安裝Airtest的輸入法Yosemite.apk。當然,更多的可能是你這個真機是某些特殊品牌,需要開啟一些額外的設置,才能夠使用我們的Airtest,這個額外設置因設備而異,具體可以參考我們的 官方文檔 給大家 總結的特殊設備廠商需要開啟的額外設置https://airtest.doc.io.netease.com/IDEdocs/device_connection/2_android_faq/#2)。

③ 連接上設備之后黑屏、閃退或者不能點擊屏幕。這時候只能請出3個備選連接參數了,通常情況下,黑屏或者閃退,可以勾選第一個 use Javacap ,不能點擊屏幕的特殊設備,可以勾選最后一個 use Adb Touch

再來說下安卓模擬器,市面上主流的模擬器就那么幾款,連接模擬器時,除了基本的打開開發者模式的USB調試之外,我們主要注意以下事項即可:

① 手動給模擬器裝上Airtets專用輸入法Yosemite.apk,因為很多款模擬器都不能自動裝上這個應用,所以我們提前手動裝下更加穩妥

② 模擬器基本上都自帶adb工具,所以這時候要特別注意下模擬器自帶的adb工具版本跟Airtest的adb工具版本是否一致,不一致的話請統一成1個版本,不然非常容易造成ADB沖突,導致模擬器連接不上

③ 搞清楚自己所用品牌的模擬器端口和在IDE連接時是否需要勾選備選連接參數,下述表格可供同學們參考

2)連接iOS設備

目前Airtest只支持連接iOS真機;另外我們連接iOS設備,還是需要一台mac完成前期的一些部署工作。

如果底層工具使用的是我們的iOS-tagent(支持到iOS13.5),則連接步驟為:

  • 用xcode部署iOS-tagent到真機
  • 設置代理
  • 在IDE中連接iOS

詳細教程可以參考官方文檔的 iOS設備連接 章節。(https://airtest.doc.io.netease.com/IDEdocs/device_connection/4_ios_connection/)

如果底層工具使用的是appium的WebDriverAgent(Airtest1.1.8版本或者AirtestIDE1.2.8版本開始兼容),則連接步驟為:

  • 用xcode部署appium的WebDriverAgent
  • 設置代理
  • 在IDE中連接iOS

使用appium的WebDriverAgent,xcode和iOS都可以支持到最新版本;另外部署的詳細教程可以參考我們的往期推文:Airtest年前重磅更新,對iOS的支持全面升級優化啦!

此外,再跟大家分享1個用PC測試iOS的好工具--tidevice,可實現不依賴 xcode 啟動 WebDriverAgent 完成設備連接!詳細教程可以參考我們的往期推文: 脫離Mac搞iOS自動化,tidevice工具教你輕松實現!

另外,iOS測試最頭疼的1個問題就是卡頓問題,不像安卓測試那樣可以做到實時同步,這個問題受限於底層的WebDriverAgent工具,暫時沒有非常好的優化辦法,如后續有了較好的優化效果,也會同步給大家的。

3)連接Windows應用

我們需要明確,IDE連接Windows應用,有2種模式,嵌入模式和非嵌入模式。顧名思義,嵌入模式,就是連接Windows窗口時,會把應用窗口嵌入到IDE的設備連接窗口中去:

而非嵌入模式,則是連接上了Windows窗口,但該窗口不用嵌入到IDE的設備連接窗口中去,仍可在IDE之外自由活動:

還需要注意的是,選擇嵌入模式和非嵌入模式,取決於你的Windows應用適合哪種模式;因為並不是所有Windows應用都可以嵌入到IDE去進行測試。詳細的連接方式和注意事項,可以參考我們的往期推文: Airtest測試Windows窗口翻車?還是想跟你們聊聊測試win窗口的一些問題

4)暫不支持連接mac桌面

沒錯,如題所示,我們現在還不支持連接mac桌面來進行自動化測試,后續支持了會在官方Q群和官方公眾號同步更新內容。

5)腳本連接設備

在我們使用AirtestIDE運行 .air 腳本時,會默認幫我們用設備連接窗口當前連接上的設備來運行。這就相當於,在IDE運行 .air 腳本時,它幫助我們做了設備連接這個步驟。因此,即使在腳本中我們沒看到連接設備的語句,依然能夠使用設備連接窗口的設備來運行我們的自動化腳本。

但是如果我們使用 .py 腳本,或者在其它編輯器上運行我們的Airtest腳本時,就需要在腳本開頭,用腳本完成設備連接這個步驟。

# 連接安卓設備
auto_setup(__file__,devices=["Android://127.0.0.1:5037/79d03fa"])
auto_setup(__file__,devices=["Android://127.0.0.1:5037/127.0.0.1:62001?cap_method=JAVACAP&&ori_method=ADBORI"])

# 連接iOS設備
auto_setup(__file__,devices=["iOS:///127.0.0.1:8100"])

# 連接Windows窗口
auto_setup(__file__,devices=["Windows:///123456"])
auto_setup(__file__,devices=["Windows:///"])

# 不支持連接mac桌面進行自動化測試

當然,使用其它設備連接接口(比如 connect_device()init_device())的方式,以及更多腳本連接設備的注意事項,可以參考我們的往期推文:用1行代碼搞定自動化測試的設備連接問題

2.腳本錄制/編寫篇

1)腳本錄制

AirtestIDE支持Airtest、Poco和airtest-selenium腳本的錄制:

但錄制腳本功能的使用,都是有一定前提的:

① Airtest錄制,保證IDE的設備連接窗口連接上了安卓設備、iOS設備或者Windows窗口(嵌入不嵌入都行)。

② Poco錄制,保證IDE的設備連接連接上了安卓設備或者iOS設備(不支持Windows桌面應用),並且在poco輔助窗中選擇了待測的poco模式刷出了正常的UI樹。能連接上設備,不能刷出UI樹的情況,請參考我們的 官方文檔 給出的解決辦法。(https://airtest.doc.io.netease.com/IDEdocs/faq/5_quick_answer/#12ui)

③ airtest-selenium錄制,需要使用selenium window 的瀏覽器初始化按鈕,打開1個chrome或者firefox瀏覽器之后(只支持這2種瀏覽器),才能進行錄制:

另外,同學們要明確,錄制腳本只適合簡單的點擊、滑動等操作,且可以幫助新手同學快速上手框架的部分api。但是僅僅依賴錄制功能就完成內容復雜的自動化腳本,是不現實的!

而且錄制出來的腳本,並不全是符合同學們期待的腳本,有可能存在錄制出來的截圖腳本回放時不通過的情況;或者錄制出來的poco腳本層次過深,導致回放非常不穩定的情況。這時候我們就要根據實際情況來優化這些錄制出來的腳本了。

2)腳本編寫

錄制不是萬能的,最終還是要自己會用框架的api,才能編寫出更加豐富,功能更加符合需求的自動化測試腳本。

所以我們來簡單聊聊如何編寫Airtest腳本:

首先,IDE給我們提供的api快捷鍵不能放過,這里面幾乎包含了Airtest的所有核心API,鼠標移動上去,還可以看到參數詳情,非常便捷:

其次,Airtest提供了 中文版的API文檔 ,核心API還有詳細的示例供大家學習(https://airtest.readthedocs.io/zh_CN/latest/all_module/airtest.core.api.html?highlight=start_app#module-airtest.core.api):

基本上掌握了核心API,就可以實現我們的大部分測試需求了;剩下的就是python腳本能力的體現了,比如如何編寫判斷語句、循環語句等等。

不喜歡看API文檔的同學,還可以查閱我們往期整理的2篇Airtest API的匯總教程,涵蓋了Airtest核心API、設置的介紹和腳本示例:

3.腳本運行篇

1)如何運行

如果是在AirtestIDE運行腳本,那直接快捷鍵F5,或者點擊頂部菜單欄的運行按鈕即可:

那么脫離AirtestIDE如何運行腳本呢?情況大致分為2種:

① 一種是在命令行使用 airtest run test.air 命令運行,該命令后面還可以跟着設備參數、log參數和錄屏參數:

  • --device,用來指定連接的被測設備
  • --log,用來指定log內容和截圖存放的目錄
  • --recording,運行腳本時進行錄屏操作

運行腳本時帶不帶參數,取決於你的腳本是否已經完成了連接設備、保存log、錄屏等工作,如果腳本里面已經包含這些步驟,那命令行運行時,這些參數就不用帶了;如果你的腳本並沒有完成這些步驟,那命令行運行腳本時,就要根據自己的需要,有選擇性地帶上這些參數。

詳細內容可以參考我們的往期推文:如何使用命令行運行腳本、生成報告

② 第二種就是在別的python編輯器上運行我們的airtest腳本,比如pycharm。運行的話一般沒什么問題,點擊編輯器對應的運行腳本按鈕即可。重要的是編寫腳本的規范性、以及運行環境的建設問題。以pycharm為例,我們在運行腳本之前,需要部署好當前的python環境,把腳本中用到的庫,比如airtest、pocoui或者airtest-selenium裝好。另外如果腳本是AirtestIDE遷移過來的,還需要特別注意是否有設備連接語句、截圖路徑是否正確等等,詳細的注意事項,也可以參考我們的往期推文:在Pycharm上編寫Airtest腳本的常見問題,希望你可以避開

2)運行后的常見問題:圖像找不到

Picture xxx not found in screen ,可能是新手同學在學習Airtest腳本的時候最常遇到的問題了!很多同學會說,明明我用肉眼已經看到截圖是存在於設備畫面上的,為什么運行總是不通過?或者是截圖腳本運行是通過了,但是點到了別的地方去,並不是點到了我的預期位置上。

首先我們要了解截圖腳本運行的本質。實際上運行我們的截圖腳本,就是1個圖像識別的過程,airtest會用多個圖像識別算法去設備畫面里面匹配我們的截圖。算法並不是人眼,它只能依靠截圖的一些向量特征或者特征點來匹配結果,這就意味着,它匹配出來的結果會出現不滿足我們實際預期的情況。

當然,想要提高我們的截圖腳本的命中率,也是有非常多的技巧的,詳情可以參考我們的往期推文: 寫了10000條Airtest截圖腳本總結出來的截圖經驗,趕緊收藏!

3)運行后的其它語法問題

比如 invalid syntax 或者 API的用法報錯,這些問題都是沒有任何捷徑的!基本的python語法,比如符號的完整性、縮進格式的統一性,可以直接網上看一些python基礎教程來學習。

API的用法錯誤,請移步上文,多看推文的示例!多翻API文檔!

4.生成報告篇

編寫完腳本之后,先運行腳本,再生成報告!右鍵單獨運行某一條腳本,不算正式運行腳本,所以不會保存log內容,也就意味着不會生成有log內容的報告。

1)在IDE生成報告

在AirtestIDE運行 .air 腳本時,運行命令默認是帶log參數的,所以運行腳本之后都會保存運行的log內容:

運行結束之后,我們直接點擊頂部菜單欄的查看報告按鈕即可一鍵生成並打開HTML格式的報告。

在AirtestIDE新建 .py 腳本,自動生成的初始化腳本帶有 logdir=True ,所以默認也是保存了log內容的:

同理,運行完畢之后,也可以點擊頂部菜單欄的查看報告按鈕一鍵生成並打開HTML格式的報告。

2)命令行生成報告

上文我們了解了 airtest run test.air 命令用於運行腳本,使用該命令在命令行運行腳本之后,我們可以使用生成報告的指令:airtest report test.air 來生成該腳本的Airtest報告。

命令行生成報告可帶的參數非常多:

  • --log_root,指定log內容和截圖文件所在的目錄
  • --outfile,指定生成報告的目錄
  • --lang,指定報告語言,可以是中文/英文
  • --export,導出一個包含所有資源的報告文件
  • --static_root,指定靜態資源文件的路徑
3)腳本生成報告

用python腳本生成報告,有2種方式:

① 使用simple_report接口:

simple_report(__file__,logpath=True,output=r"D:\test\report02\log.html")

API的參數詳情可以參考我們的官方API文檔:https://airtest.readthedocs.io/zh_CN/latest/wiki/code/code_example_zh.html?highlight=simple_report#simple-report

② 使用LogToHtml類:

h1 = LogToHtml(script_root=r'D:\test\report01.air', log_root=r"D:\test\report01.air\log", export_dir=r"D:\test\report02" ,logfile=r'D:\test\report01.air\log\log.txt', lang='en', plugins=None)
h1.report()

此類的使用詳情可以參考文檔:https://airtest.readthedocs.io/zh_CN/latest/wiki/code/code_example_zh.html?highlight=logtohtml#logtohtml

4)生成的報告為空

報告為空,大概率是因為log.txt文件的內容為空,要么是沒有保存log,要么是生成報告的語句放在了腳本開頭,導致還沒運行到實際的步驟就已經生成了一份空報告。

小結

那么今天這篇教程,從 設備連接--腳本錄制/編寫--腳本運行--生成報告 ,詳細給大家分享了入坑Airtest的經驗,內容很長,同學們可以收藏起來,慢慢看~


Airtest官網http://airtest.netease.com/
Airtest教程官網https://airtest.doc.io.netease.com/
搭建企業私有雲服務https://airlab.163.com/b2b

官方答疑 Q 群:654700783

呀,這么認真都看到這里啦,幫忙點個推薦支持一下唄,灰常感謝~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM