Airtest報告“全攻略”,看完你再也不用依賴IDE來生成報告了!


前言

最近依然收到來自答疑群小伙伴對生成報告這方面的疑問,包含生成報告和導出報告的區別、能不能不用IDE來生成報告、如何在用腳本生成/導出報告等等,今天的推文將跟大家一一詳解這些問題:

  • 在IDE中一鍵生成、導出報告
  • 用命令行生成、導出報告
  • 在腳本中生成、導出報告

1.在IDE中一鍵生成、導出報告

① 生成報告

如果同學們使用我們專用的編輯器AirtestIDE來編寫和運行腳本,那么同學們就可以非常便捷地在IDE中使用快捷鍵生成和導出報告。

運行完腳本之后,點擊頂部菜單欄的 查看報告 按鈕(快捷鍵Ctrl+L),即可快速生成並在瀏覽器中打開html格式的報告:

image

若想查看生成報告的本地文件,可以 右鍵 點擊腳本名稱,選擇 打開報告文件目錄 :

image

細心的同學還會發現,在我們點擊 查看報告 按鈕的同時,log查看窗會出現1條生成報告的命令(這條命令非常重要,下文我們也會講到):

image

其實在這條命令中,通過 --outfile 參數,我們也可以知道報告所在的本地文件路徑。

但這里有一個新手同學很容易犯的錯誤值得我們注意下,很多同學找到了報告所在的本地文件夾之后,就直接把這個文件夾打包發給同事/領導查看,結果發現,同事/領導根本不能正常查看這個報告:

image

出現這個問題的原因其實是,這樣生成的html報告,里面的一些圖片路徑和靜態資源路徑是 絕對路徑 。當報告被發到別的電腦上時,html再想通過絕對路徑找到這些圖片資源和靜態資源,就不可能了,所以才造成 其他人看到的報告完全沒有圖片和相應樣式 的情況。

image

② 導出報告

那么,為了讓別人也可以看到同學們本地生成的報告,我們在IDE中提供了導出報告的功能,右鍵點擊腳本名稱,選擇 導出報告 ,之后再選擇導出報告的存放路徑即可:

image

導出報告之后,圖片資源和靜態資源的路徑都被改成了相對路徑,並且文件夾中還打包了對應的靜態資源文件。這樣我們再把導出好的報告發到別的電腦查看時,就不會出現上述問題了。

image

③ 生成報告失敗

另外,在IDE中生成/導出報告的時候,我們還有可能會遇到報告生成失敗的問題:

image

這時候可以復制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/

這樣生成的報告,圖片和資源路徑才會是相對路徑,並且包含了靜態資源文件,能發到別的電腦上查看。

image

④ 靜態資源--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 開頭才能被識別:

image

關於在命令行生成、導出報告的內容,我們在之前的推文 導出報告總是出錯怎么辦 有更加詳細的介紹和示例,對在命令行運行腳本、生成報告感興趣的同學可以前往查看下。

3.在腳本中生成、導出報告

如果不借助IDE和命令行,我們能不能直接在腳本中調用一些接口,讓腳本執行完畢時,自動生成或者導出1份報告給我們呢?

我們可以借助 simple_report() 接口或者 LogToHtml() 類來實現。

 simple_report生成報告

先來講講這個 simple_report 接口,它其實是1個簡化版的生成報告的接口,可以減少同學們的理解成本和使用成本:

image

如果同學們不指定任何參數,該接口會使用默認的參數生成1份HTML格式的報告,output='log.html' 表示在當前腳本路徑下生成名為 log.html 的airtest報告:

from airtest.report.report import simple_report
simple_report(__file__)

image

如果指定了 output 參數,則會按指定路徑生成報告:

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

image

image

 LogToHtml導出報告

如果同學們不需要通過腳本的形式導出報告,僅需要生成報告在本地查看的話,只要使用 simple_report 接口即可。

但如果需要通過腳本的形式來導出1份報告,則需要用到 LogToHtml 類:

image

這個類的參數相對於 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()

image

image

③ 用 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


免責聲明!

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



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