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")
logdir
與logpath
生成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報告。
logdir
與log_root
上文我們已經提到,生成Airtest報告需要依賴腳本運行的log內容,所以我們在生成報告之前,需要保存腳本運行的log內容,然後生成報告時再指定參數讓它去找對應的log內容。
以上述例子爲例,我們在auto_setup
中指定logdir=True
,即將log內容保存在當前腳本的路徑下面;那生成報告時,我們再利用LogToHtml
的log_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
呀,這麼認真都看到這裏啦,幫忙點個推薦支持一下唄,灰常感謝~