生成Airtest報告總出錯?這份總結收好了

1. 前言

最近發現還是有很多同學在生成Airtest報告上面有一些疑惑之處,比如:

爲什麼用AirtestIDE跑腳本就可以直接生成報告,換別的編輯器就不行?

爲什麼按照官方示例寫的生成報告的腳本,到我這裏不是找不到路徑就是有別的報錯?

爲什麼我一頓操作下來,生成了空白的Airtest報告(有些英文報告被譯成中文甚至變成了空氣報告......)?

這簡直可以納入迷惑行爲大賞。所以今天,我們就一起來探討一下爲什麼1個小小的Airtest報告,會出現這麼多問題。

2. 爲什麼AirtestIDE跑腳本可以直接生成報告?

1)正式運行.air腳本後可直接生成報告

這裏需要注意的是,使用AirtestIDE跑腳本可以直接生成報告的情況是,正式運行完 .air 腳本之後,可以點擊 查看報告 按鈕,生成並查看本地Airtest報告。

還可以在生成本地的報告之後,右鍵單擊腳本名稱,選擇 導出報告 ,導出非本地也可以查看的Airtest報告:

這是因爲在AirtestIDE跑 .air 腳本時,會自動幫我們保存log內容,之後在點擊 查看報告 的按鈕時,就會根據自動保存的log內容,來生成Airtest測試報告。

這從點擊運行腳本和點擊生成報告的按鈕命令行可以看出來:

# 運行.air腳本的命令行
"D:\demo\AirtestIDE-win-1.2.13 (2)\AirtestIDE\AirtestIDE" runner "D:\demo\multi\multi-device-runner-master\test02.air"  --device android://127.0.0.1:5037/HT7C51A04625?cap_method=MINICAP&&ori_method=MINICAPORI&&touch_method=MAXTOUCH --log "D:/test/test01\dc1584de62ad6aff26d33afe5ce0bc54"
============================================================

# 生成報告的命令行
============================================================

Generating HTML log:

D:\demo\AirtestIDE-win-1.2.13 (2)\AirtestIDE\AirtestIDE reporter D:\demo\multi\multi-device-runner-master\test02.air --log_root D:/test/test01\dc1584de62ad6aff26d33afe5ce0bc54 --outfile D:\test\test01\dc1584de62ad6aff26d33afe5ce0bc54\log.html --static_root D:\demo\AirtestIDE-win-1.2.13 (2)\AirtestIDE\airtest\report --lang zh --plugin airtest_selenium.report poco.utils.airtest.report

儘管我們在 .air 腳本里面,沒有編寫任何保存log內容的語句,但是AirtestIDE會自動幫我們保存到默認Log存放路徑下:

我們可以看到,運行腳本時保存log的參數 --log "D:/test/test01\dc1584de62ad6aff26d33afe5ce0bc54 ,和生成報告時指定的log_root 參數 --log_root D:/test/test01\dc1584de62ad6aff26d33afe5ce0bc54是一致的,表明運行腳本後保存的log內容,會在生成報告的時候用到。

而AirtestIDE則是自動幫我們做好了這些事情,我們就可以非常輕鬆地在AirtestIDE運行腳本之後一鍵生成測試報告。

2)全選腳本右鍵運行後不能生成測試報告

有些同學在AirtestIDE運行腳本時,全選代碼然後右鍵選擇 只運行選中代碼 ,腳本運行之後,再點擊 查看報告 時發現,彈窗提示 There's no log.txt file in log-directory

這是因爲右鍵 只運行選中代碼 並不會自動幫我們保存log內容,而報告生成需要依賴log內容,纔會出現找不到 log.txt 文件的提示。

所以通過這種方式來 “調試” 腳本的同學,並不能一鍵生成Airtest測試報告,請點擊 運行腳本 按鈕正式運行完腳本之後,再來一鍵生成測試報告。

3)在AirtestIDE運行純.py腳本不能一鍵生成測試報告

在AirtestIDE中,運行 純py 腳本和運行 .air 腳本的區別非常大,從運行的命令行可以看出:

# 運行純py腳本的命令行
"D:\demo\AirtestIDE-win-1.2.13 (2)\AirtestIDE\AirtestIDE" pyrunner "D:\demo\test_log.py" 

可以看到,此時AirtestIDE不會幫助我們補充任何運行參數,包含設備參數、log保存路徑參數等等。

所以在AirtestIDE運行 純py 腳本,如需生成報告,則在編寫腳本時,就需要加入保存log內容之類的語句,比如:

# -*- encoding=utf8 -*-
__author__ = "AirtestProject"

from airtest.core.api import *
from airtest.cli.parser import cli_setup

if not cli_setup():
    auto_setup(__file__,devices=["android://127.0.0.1:5037/HT7C51A04625"],logdir=r"D:\demo\test_log")

這樣運行結束之後,纔會幫我們保存log內容到指定的log保存路徑下,之後點擊 查看報告 按鈕時,手動選擇設置的log保存路徑即可:

3. 脫離AirtestIDE怎麼生成測試報告?

1)使用simple_report接口

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

  • filepath:指定腳本的路徑
  • logpath:指定log內容的路徑
  • logfile:指定log.txt文件的路徑
  • output:指定HTML報告的生成路徑,必須以 .html 結尾

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

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

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

from airtest.core.api import *
from airtest.report.report import simple_report

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

logdirlogpath

生成Airtest報告需要依賴腳本運行過程保存的log,所以如需生成報告,就需要保存腳本運行過程的log,auto_setup 接口的logdir參數可以設置log保存路徑;使用simple_report生成報告時,就可以設置logpath,到logdir指定的log保存路徑下面去找腳本對應的log內容。

2)使用 LogToHtml()

使用腳本生成Airtest報告的另外一種方式是使用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()

從示例中我們可以看出,使用LogToHtml類生成報告,我們需要先實例化一個LogToHtml類,然後再調用類方法report(),即可生成Airtest報告。

logdirlog_root

上文我們已經提到,生成Airtest報告需要依賴腳本運行的log內容,所以我們在生成報告之前,需要保存腳本運行的log內容,然後生成報告時再指定參數讓它去找對應的log內容。

以上述例子爲例,我們在auto_setup中指定logdir=True,即將log內容保存在當前腳本的路徑下面;那生成報告時,我們再利用LogToHtmllog_root參數,來指定log的查找路徑。

實際上,我們將上述示例中的log_root=r"D:\test\report01.air\log"改成log_root=True也是一樣的效果,即log保存路徑logdir與log查找路徑log_root必須是相同的。

更多詳細內容可以參看我們官網文檔教程: https://airtest.doc.io.netease.com/IDEdocs/airtest_framework/6_airtest_report/#airtest

4. 脫離AirtestIDE生成報告報錯怎麼辦?

1)報錯某個路徑找不到

通常有2種路徑找不到的情況,一種是在指定參數,比如指定log內容、log文件路徑時,給了不正確的路徑。此時只要觀察報錯具體是哪個路徑給錯了,然後修改成正確的路徑即可。特別是填寫相對路徑的同學,如果實在搞不清楚相對路徑的情況,就直接填寫絕對路徑好了。

第二種是,指定報告生成路徑、或者報告導出路徑時,指定了一個新的路徑,即同學們期望能在新路徑下生成/導出報告,但實際上,這個新路徑目前是不存在的。這種情況要特別注意,不論是生成報告路徑還是導出報告路徑,都必須是已經建好真實存在的路徑,路徑不存在Airtest也不會幫我們新建該路徑。所以請同學們事先建好目標路徑,再來填參!!!

2)爲什麼生成了空的/空氣報告?

空氣報告,即Airtest空的英文報告,被瀏覽器翻譯成了空氣報告。那爲什麼我們會生成空的測試報告呢?

通常是因爲新手同學,將生成報告的代碼放置在了腳本開頭,下面跟了一系列實際操作:

# -*- encoding=utf8 -*-
__author__ = "AirtestProject"

from airtest.core.api import *
from airtest.report.report import simple_report,LogToHtml

auto_setup(__file__,logdir=True)

simple_report(__file__,log_path=True)

touch(Template(r"tpl1637219700366.png", record_pos=(-0.103, 0.27), resolution=(1920, 1080)))
sleep(1.0)
snapshot(msg="請填寫測試點.")
# 此處省略N條腳本

這樣編寫的後果是,即使我們成功運行了整個腳本,但最後打開生成的報告查看時,會發現是一個空的報告;這是因爲在腳本開頭已經生成了測試報告,此時log未記錄任何步驟的執行情況(實際運行步驟都在生成報告的腳本之後),所以將獲得一個空的測試報告。


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

官方答疑 Q 羣:117973773

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章