前言
最近依然收到來自答疑群小伙伴對生成報告這方面的疑問,包含生成報告和導出報告的區別、能不能不用IDE來生成報告、如何在用腳本生成/導出報告等等,今天的推文將跟大家一一詳解這些問題:
- 在IDE中一鍵生成、導出報告
- 用命令行生成、導出報告
- 在腳本中生成、導出報告
1.在IDE中一鍵生成、導出報告
① 生成報告
如果同學們使用我們專用的編輯器AirtestIDE來編寫和運行腳本,那么同學們就可以非常便捷地在IDE中使用快捷鍵生成和導出報告。
運行完腳本之后,點擊頂部菜單欄的 查看報告
按鈕(快捷鍵Ctrl+L),即可快速生成並在瀏覽器中打開html格式的報告:
若想查看生成報告的本地文件,可以 右鍵 點擊腳本名稱,選擇 打開報告文件目錄
:
細心的同學還會發現,在我們點擊 查看報告
按鈕的同時,log查看窗會出現1條生成報告的命令(這條命令非常重要,下文我們也會講到):
其實在這條命令中,通過 --outfile
參數,我們也可以知道報告所在的本地文件路徑。
但這里有一個新手同學很容易犯的錯誤值得我們注意下,很多同學找到了報告所在的本地文件夾之后,就直接把這個文件夾打包發給同事/領導查看,結果發現,同事/領導根本不能正常查看這個報告:
出現這個問題的原因其實是,這樣生成的html報告,里面的一些圖片路徑和靜態資源路徑是 絕對路徑 。當報告被發到別的電腦上時,html再想通過絕對路徑找到這些圖片資源和靜態資源,就不可能了,所以才造成 其他人看到的報告完全沒有圖片和相應樣式 的情況。
② 導出報告
那么,為了讓別人也可以看到同學們本地生成的報告,我們在IDE中提供了導出報告的功能,右鍵點擊腳本名稱,選擇 導出報告
,之后再選擇導出報告的存放路徑即可:
導出報告之后,圖片資源和靜態資源的路徑都被改成了相對路徑,並且文件夾中還打包了對應的靜態資源文件。這樣我們再把導出好的報告發到別的電腦查看時,就不會出現上述問題了。
③ 生成報告失敗
另外,在IDE中生成/導出報告的時候,我們還有可能會遇到報告生成失敗的問題:
這時候可以復制log查看窗里面那條生成報告的命令,到本地命令行中運行,查看具體的報錯原因(不會分析報錯原因也可以發送到 官方答疑Q群1017250147 ,獲取官方解答)。
目前遇到最常見的原因就是,同學們在IDE中設置了本地python環境,並且本地python環境中同時安裝了 poco
和 pocoui
,這兩個庫沖突導致生成報告失敗。
2.用命令行生成、導出報告
也有很多同學並不滿足於在IDE中運行腳本,所以他們就會使用命令行來運行腳本、生成報告等等。需要注意的是,在命令行中運行Airtest腳本,使用的python環境就是 本地python環境 了,不是IDE集成好的帶有 airtest
和 pocoui
庫的精簡python環境(注意是 pocoui
,不是 poco
,若已經安裝了 poco
,則需要卸載,否則會跟 pocoui
有沖突)。
所以我們在命令行運行腳本、生成報告之前,要先確保我們本地的python環境已經已經裝好了 airtest
和 pocoui
,使用 pip list
指令即可查看。
安裝命令如下:
pip install airtest
pip install pocoui
① 運行腳本 airtest run ...
在生成報告之前,我們需要先運行1次airtest腳本,運行腳本的命令是 airtest run + 腳本文件路徑
,另外該命令還可以傳入以下幾個參數:
--device
,用來指定連接的被測設備--log
,用來指定log內容和截圖存放的目錄--recording
,運行腳本時進行錄屏操作
示例如下:
airtest run D:/test/report_test.air --device Android:/// --log C:/Users/xiaoming/log --recording
如果同學們對在命令行運行腳本還不是那么熟悉,可以先在IDE中運行腳本,觀察log查看窗里面那條運行腳本的命令是如何寫的,甚至我們可以直接復制該命令到命令行中執行。
② 生成報告 airtest report...
運行完腳本之后,我們就可以在命令行中用 airtest report + 腳本文件路徑
指令來生成一份HTML格式的報告。
該命令也有非常多的可傳參數,例如:
--log_root
,指定log內容和截圖文件所在的目錄--outfile
,指定生成報告的目錄--lang
,指定報告語言,可以是中文/英文--export
,導出一個包含所有資源的報告文件--static_root
,指定靜態資源文件的路徑
示例如下:
airtest report D:/test/report_test.air --log_root C:/Users/xiaoming/log --outfile E:/log_test/log.html --lang zh
另外,在上文我們有提到,點擊IDE中 查看報告
按鈕的時候,log查看窗會相應地出現1條生成報告的命令,我們也可以復制該命令到命令行中運行,也能夠幫助我們生成報告。
③ 導出報告 --export ...
未使用導出參數 --export
生成的報告,與IDE點擊查看報告按鈕生成的報告是一樣的,只能在本地查看,不能發到別的電腦上查看。
若需要導出報告,我們需要在生成報告指令時,添加上這個 --export
參數:
# 使用了export參數,outfile參數會失效,所以使用了export參數就可以不使用outfile airtest report D:/test/report_test.air --log_root C:/Users/xiaoming/log --lang zh --export E:/log_test/
這樣生成的報告,圖片和資源路徑才會是相對路徑,並且包含了靜態資源文件,能發到別的電腦上查看。
④ 靜態資源--static_root ...
但一些經常導出報告的同學會發現,每次導出1份報告,就會帶有1份相同的靜態資源文件 static
,它包含了報告中的css和js等文件,這樣的重復拷貝占用了很多的磁盤空間。並且我們知道,除非報告的樣式做了某些更新,否則這些靜態資源文件都是固定不變的。
所以我們可不可以把這個靜態資源文件統一放到1個地方,每一份HTML報告都去這個地方訪問這些靜態資源呢?這樣即使靜態文件有所改變,我們也只需要替換掉這個地方的靜態資源文件即可。
答案當然是可以的,使用 --static_root
參數即可實現!我們可以將這些資源文件部署到靜態資源文件服務器上,用例如 https://host:port/static/css/
的路徑來訪問它。然后在生成報告時,將這個部署出來的服務器地址作為 --static_root
的參數傳過去:
airtest report D:/test/report_test.air --log_root C:/Users/xiaoming/log --lang zh --static_root https://host:port --export E:/log_test/
這樣導出的HTML報告,里面的靜態資源路徑,都是部署好的服務器地址。另外需要注意的是,傳入 --static_root
的參數需要以 http
開頭才能被識別:
關於在命令行生成、導出報告的內容,我們在之前的推文 導出報告總是出錯怎么辦 有更加詳細的介紹和示例,對在命令行運行腳本、生成報告感興趣的同學可以前往查看下。
3.在腳本中生成、導出報告
如果不借助IDE和命令行,我們能不能直接在腳本中調用一些接口,讓腳本執行完畢時,自動生成或者導出1份報告給我們呢?
我們可以借助 simple_report()
接口或者 LogToHtml()
類來實現。
① simple_report
生成報告
先來講講這個 simple_report
接口,它其實是1個簡化版的生成報告的接口,可以減少同學們的理解成本和使用成本:
如果同學們不指定任何參數,該接口會使用默認的參數生成1份HTML格式的報告,output='log.html'
表示在當前腳本路徑下生成名為 log.html
的airtest報告:
from airtest.report.report import simple_report simple_report(__file__)
如果指定了 output
參數,則會按指定路徑生成報告:
from airtest.report.report import simple_report simple_report(__file__,logpath=True,output=r"D:\test\report02\log.html")
② LogToHtml
導出報告
如果同學們不需要通過腳本的形式導出報告,僅需要生成報告在本地查看的話,只要使用 simple_report
接口即可。
但如果需要通過腳本的形式來導出1份報告,則需要用到 LogToHtml
類:
這個類的參數相對於 simple_report()
就復雜的多了,包含:
script_root
,腳本路徑log_root
,log文件的路徑static_root
,部署靜態資源的服務器路徑export_dir
,導出報告的存放路徑script_name
,腳本名稱logfile
,log文件log.txt的路徑lang
,報告的語言(中文:zh;英文:en)plugins
,插件,使用了poco或者airtest-selenium會用到
示例如下,我們在指定路徑 D:\test\report02
中導出了 D:\test\report01.air
腳本的運行報告,報告語言為英文:
from airtest.report.report import 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()
③ 用 try-finally
保證最后都能生成報告
一般情況下,生成報告的語句應該是放在所有用例腳本的后面,保證用例執行完畢之后,才執行生成腳本的語句。
但這里容易出現一種情況,一旦前面有用例腳本執行失敗,終止了整個腳本的運行,即還沒有執行到生成報告的語句時,腳本運行就已經停止了,這樣也不能夠正常生成報告。
所以我們可以用 try-finally
語句,不論腳本是否運行失敗,最終都會生成1份運行報告:
try: poco("com.netease.newsreader.activity:id/bjd").wait_for_appearance() poco("com.netease.newsreader.activity:id/awo").click() ... finally: simple_report(__file__,logpath=True,output="../netease_music/登錄.html") print("-----執行完畢-----")
AirtestProject官方答疑Q群:1017250147
Airtest官網:http://airtest.netease.com/
Airtest教程官網:https://airtest.doc.io.netease.com/
搭建企業私有雲服務:https://airlab.163.com/b2b