同學們好,我是網易AirtestProject的團隊成員曉娟,歡迎大家來到我們的視頻教程專欄《14天Airtest自動化測試小白課程》。前面我們在教大家編寫自動化腳本的時候,一直用的是我們配套的編輯器AirtestIDE,那麼也會有很多同學,他們並不想局限在我們配套的IDE上。比如他們想
直接用命令行跑腳本 ,或者他們更
習慣使用其它的python編輯器 ,比如pycharm等等。所以今天我們來學習下,如何脫離AirtestIDE來編寫或者運行腳本。之前我們就說過,airtest、pocoui和airtest-selenium都是python第三方庫,所以只要在python環境裡面裝上這幾個庫,我們就可以在這個python環境裡面運行這些測試框架的腳本。而我們的
AIirtestIDE是內嵌了1個裝好了這些庫的精簡版的python環境 ,所以即使我們不在設置裡面配置任何本地的python環境,我們依然可以跑airtest、poco或者airtest-selenium腳本。當然,不使用IDE自帶的python環境,我們也可以在選項--設置中,設置同學們本地的python環境,以此來支持更多的python第三方庫:
同理,如果我們想用本地的python環境跑自動化腳本時,就必須保證這個環境已經安裝好了我們所需要的庫。另外,對於python版本,我們更建議大家選擇python3,python2我們雖然也支持,但畢竟官方也不維護python2了,所以我們更推薦大家使用python3作為大家的運行環境。目前我們也
已經支持了在Python3.9 下安裝我們的airtest、pocoui和airtest-selenium庫。當我們在本地安裝好1個python環境之後,可以直接執行 python 來查看本地python的詳細信息。
接下來,我們就可以安裝我們要用到的airtest和poco等庫了,命令如下:
pip install airtestpip install pocouipip install airtest-selenium需要特別注意的是,poco框架的庫名叫pocoui,同學們不要寫錯了,如果不小心同時安裝了poco和pocoui,請同學們務必卸載掉poco,只留下pocoui,避免影響後續腳本的運行,刪除命令如下:pip uninstall airtestpip uninstall pocouipip uninstall airtest-selenium安裝好了對應的庫之後,我們可以使用 pip list 命令查看相應的庫是否安裝上了:如果之後有版本更新,我們也可以直接使用命令將本地的庫直接更新到最新版本:pip install -U airtestpip install -U pocouipip install -U airtest-selenium如同學們在安裝過程中,有遇到安裝超時報錯的,可以嘗試更換一些國內的安裝源來安裝這些庫,方法如下:# 豆瓣源pip install airtest -i https:# 常見的國內源阿里雲 http:中國科技大學 https:豆瓣(douban) http:清華大學 https:中國科學技術大學 http:至此,本地的python環境就部署好了,其實還是非常簡單的,準備一個python環境,然後在這個環境裡面使用 pip install 命令安裝好airtest、pocoui和airtest-selenium庫即可。(不做web自動化的話,其實airtest-selenium也可以不安裝先,有需要的時候再把它裝上去。)在命令行執行腳本的命令是 airtest run + 腳本文件路徑 ,該命令的可傳參數如下:舉個例子,我們在D:/test/目錄下,新建1個叫report_test.air的腳本。並在腳本中編寫1條touch腳本。然後我們在命令行運行這個腳本,指定測試設備為連接上的第一臺安卓設備,log保存路徑為D:/log/,運行腳本時進行錄屏操作,錄屏文件保存到D:/log/record01.mp4:airtest run D:/test/report_test.air --device Android:/// --log D:/log/ --recording D:/log/record01.mp4運行結束後,我們可以到指定目錄下查看是否生成了我們指定的log文件和錄屏文件:① 如果腳本中沒有指定運行設備,那麼在編寫命令行的運行腳本命令時,就必須指定設備;如腳本已指定運行設備,則運行腳本的命令可以不指定設備,剛才我們的示例腳本是沒有指定設備的,如果命令行也不指定設備,命令行會提示你沒有連接設備,且腳本也不能跑下去。② 同理,如果命令未指定log參數,則默認是不保存log內容的③ --device 後面跟的是用於初始化設備的URI字符串,連接iOS、安卓和Windows窗口的字符串是不一樣的,我們給大家準備了詳細的示例,一起來看一下:# 什麼都不填寫,默認取當前連接中的第一臺手機Android:# 連接本機默認埠連的一臺設備號為79d03fa的手機Android:# 用本機的adb連接一臺adb connect過的遠程設備,注意10.254.60.1:5555其實是serialnoAndroid:# 連接一個窗口句柄為123456的Windows窗口Windows:# 連接一個Windows窗口,窗口名稱匹配某個正則表達式Windows:# 連接windows桌面,不指定任何窗口Windows:# 夜神模擬器(127.0.0.1:62001為夜神模擬器的埠號)Android:# 設備號為79d03fa的 MIUI11 設備Android:更多關於設備字符串的內容,我們可以參看這篇公眾號教程:④ 只有當airtest版本大於等於1.1.6時,--recording參數後面才允許自定義錄屏文件名,且必須以.mp4結尾。⑤ 只有當airtest版本大於等於1.1.7時,才有--no-image參數,才能指定運行腳本過程中不保存截圖。使用airtest run 命令運行完腳本以後,我們可以使用另一個命令, airtest report + 腳本文件路徑 指令來生成一份HTML格式的報告。以剛才的腳本為例,在命令行運行以後,我們就可以繼續生成它的報告了,指定log路徑為D:/log,生成html報告的路徑為D:/log/log.html,指定報告的語言為英文。airtest report D:/test/report_test.air --log_root D:/log --outfile D:/log/log.html --lang en之後我們可以到指定的文件夾裡面查看對應的報告文件:另外我們再來看下, --export 這個參數,使用這個參數,可以幫我們打包這份測試報告,然後我們可以直接把打包好的這份報告發送給別人查看。如果不使用--export來導出報告的話,html報告裡面的圖片資源、靜態資源路徑都是絕對路徑,發到別的電腦之後,別人是無法正常查看的。只有導出之後的報告,裡面的圖片資源和靜態文件資源才會使用相對路徑,這樣把報告發送到別的電腦上時,我們才能夠正常查看。airtest report D:/test/report_test.air --log_root D:/log --lang en --export D:/export/打開指定的導出路徑,可以看到導出的測試報告文件裡面包含了非常多的東西:報告裡面的圖片資源和靜態資源都是相對路徑,我們可以把這份報告發送給別人查看。最後一個參數 --static_root ,用於指定靜態資源的路徑。因為我們每次導出一份報告,都會包含一份相同的static文件,它裡面放置了報告的一些css和js等文件。一般來說,除非報告的樣式做了某些更新,否則這些靜態資源文件都是固定不變的。因此我們可以將這些資源文件部署到靜態資源文件伺服器上,用例如 https://host:port/static/css/ 的路徑來訪問它。然後在生成報告時,將這個部署出來的伺服器地址作為 --static_root的參數傳過去,這樣導出的報告文件裡面將不再包含static文件,HTML報告想要訪問靜態資源文件時,訪問的就是 static_root給的地址:airtest report D:/test/report_test.air --log_root D:/log --lang en --static_root https://host:port/ --export D:/export/需要注意的是,如果傳入給static_root的不是以http開頭的資源伺服器地址,而是一個本地路徑,導出報告時,還是會把給定的本地路徑裡面的靜態文件複製過來一份。講完了如何在命令行上運行自動化腳本,接下來我們再來看看,如果不使用AirtestIDE,如何在其它python編輯器中編寫、運行Airtest和poco腳本。以pycharm編輯器為例,首先需要保證你所用項目使用的python環境裡安裝了airtest和pocoui庫。可以在文件--設置--項目中查看:如未安裝,則點擊package右側的+號,把airtest和pocoui安裝好。環境弄好以後,我們就可以開始編寫自動化腳本了,新建一個.py文件,添加上引入和初始化代碼,也可以直接把.air腳本的初始化代碼複製過來,但需要注意的是,pycharm不會自動幫你連接設備,所以我們需要自己在腳本中添加連接設備的代碼,這裡以在auto_setup連接設備為例:auto_setup(__file__,devices=["android://127.0.0.1:5037/emulator-5554?cap_method=JAVACAP&&ori_method=MINICAPORI&&touch_method=MINITOUCH"])更多連接設備的接口,可以參看剛才給你們推薦的文章。確保先編寫完設備連接的腳本,再來編寫airtest腳本,這裡以點擊微信為例,首先截取一張微信icon的截圖,利用你們電腦裡裝有的截圖工具即可,然後把截圖文件保存在你本地路徑,比如 D:\atest_image\wechat.png,然後把截圖的保存路徑添加到你的點擊腳本裡面:touch(Template(r"D:\atest_image\wechat.png", threshold=0.8,))當然,如果要編寫poco腳本的話,因為在pycharm中看不到設備的UI樹,所以我們可以打開AirtestIDE來查看UI樹,然後在pycharm上編寫對應的poco語句即可。最後就是生成報告了,我們可以調用一些airtest提供的接口幫助我們生成報告,比如 simple_report 、LogToHtml 類等。因為報告是根據log內容來生成的,所以我們需要在腳本初始化添加logdir參數,用於保存腳本運行的log內容到指定路徑,使用simple_report生成報告的時候,也要把logpath傳進去,讓他去對應的路徑找log內容來生成報告。關於用腳本生成報告更多詳細的內容,大家可以參看這篇推文,我們就不一一在這裡講述了。那麼今天的內容就到這裡為止啦,這節課的內容比較多,大家課後可以多多實踐,好好消化下。至此,關於自動化腳本編寫專題的課程就講完了,下節課我們將進入一個新的章節,手把手教大家如何接入pocosdk,然後用poco這個框架來測試引擎渲染的遊戲。下期我們不見不散~(呀!這麼認真都看到這裡啦,幫忙點個讚或者在看鼓勵一下唄~灰常感謝~)