Airtest 提供了多种生成测试报告的方法。
在 Airtest IDE 中,运行完脚本后,用户可以通过点击顶部菜单栏的 “查看报告” 按钮(快捷键 Ctrl+L),即可快速生成并在浏览器中打开 html 格式的报告。
若想查看生成报告的本地文件,可以右键点击脚本名称,选择 “打开报告文件目录”。
除了在 IDE 中生成报告,还可以使用命令行来生成和导出报告。在命令行中运行 Airtest 脚本,使用的是本地 python 环境,需要确保本地的 python 环境已经安装好了 airtest 和 pocoui。
生成报告的命令有很多可传参数,如 --log_root 指定 log 内容和截图文件所在的目录,--outfile 指定生成报告的目录,--lang 指定报告语言等。若需要导出报告,可以在生成报告指令时添加 --export 参数,这样生成的报告图片和资源路径才会是相对路径,并且包含了静态资源文件,能发到别的电脑上查看。
此外,在脚本中也可以生成和导出报告。主要有两种方式,一是使用 simple_report 接口,它是一个简化版的生成报告接口,可以减少理解成本和使用成本;二是使用 LogToHtml () 类,这个类的参数相对复杂,但功能更强大。同时,可以用 try-finally 保证最后都能生成报告。
一、IDE 中生成报告
一键生成报告
在 AirtestIDE 中,当我们运行完脚本后,点击顶部菜单栏的 “查看报告” 按钮(快捷键 Ctrl+L),能够快速生成一份 HTML 格式的报告,并在浏览器中打开。
在生成报告的过程中,AirtestIDE 会自动保存脚本运行过程中的 log 内容。通过 log 查看窗中的生成报告命令,可以知道报告所在的本地文件路径。具体来说,在这条命令中,通过 --outfile 参数可以确定报告的本地文件路径。
例如,在运行脚本后,log 查看窗可能会出现这样的命令:
从这个命令中,我们可以清晰地看到报告的生成路径以及相关参数设置。若想查看生成报告的本地文件,可以右键点击脚本名称,选择 “打开报告文件目录”,这样就能快速定位到报告所在的文件夹。
需要注意的是,直接将报告所在的本地文件夹打包发给同事或领导可能会导致他们无法正常查看报告,原因是生成的 html 报告中的图片路径和静态资源路径是绝对路径,当报告在其他电脑上打开时,无法通过绝对路径找到图片资源和静态资源。为了解决这个问题,可以使用 IDE 中的导出报告功能。
导出报告
在 IDE 中,导出报告功能为我们提供了将本地生成的报告分享给他人的便利。当我们右键点击脚本名称,选择 “导出报告” 后,再选择导出报告的存放路径,即可完成报告的导出。
导出后的报告,图片资源和静态资源的路径都被改成了相对路径,并且文件夹中还打包了对应的静态资源文件,这样就能在其他电脑上正常查看报告了。
这样的处理方式使得报告可以在其他电脑上正常查看,避免了因绝对路径问题导致的图片和样式无法显示的情况。例如,原本在本地生成的报告可能包含绝对路径如 “C:\Users\xxx\report\img.jpg”,在导出后,路径可能变为 “./img.jpg”,相对路径使得报告在不同电脑上的兼容性大大提高。
二、命令行生成报告
运行脚本
在命令行生成报告前,首先需要运行脚本。可以使用airtest run命令,并传入一些参数来指定连接的被测设备、log 内容和截图存放的目录以及进行录屏操作等。
例如,如果对在命令行运行脚本还不是那么熟悉,可以先在 IDE 中运行脚本,观察 log 查看窗里面那条运行脚本的命令是如何写的,甚至可以直接复制该命令到命令行中执行。
在cmd.exe中进入到测试脚本所在路径下执行命令:
命令示例如下:
python case_point_01.py --log C:\Users\gmluo\Desktop\airtest_report_\log
对应目录中log生成的文件
生成报告
运行完脚本之后,就可以使用airtest report命令来生成一份 HTML 格式的报告。该命令有很多可传参数,例如:--log_root指定 log 内容和截图文件所在的目录;--outfile指定生成报告的目录;--lang指定报告语言,可以是中文 / 英文。
在cmd.exe中进入到测试脚本所在路径下执行命令:
命令示例如下:
airtest report case_point_01.py --log_root C:\Users\gmluo\Desktop\airtest_report_\log --outfile C:\Users\gmluo\Desktop\airtest_report_\log\log.html --lang zh
对应目录中log生成的文件
导出报告
若需要导出报告,我们需要在生成报告指令时,添加上--export参数。这样生成的报告,图片和资源路径才会是相对路径,并且包含了静态资源文件,能发到别的电脑上查看。
在cmd.exe中进入到测试脚本所在路径下执行命令:
命令示例如下:
airtest report case_point_01.py --log_root C:\Users\gmluo\Desktop\airtest_report_\log --outfile C:\Users\gmluo\Desktop\airtest_report_\log\log.html --lang zh --export C:\Users\gmluo\Desktop\airtest_report_\log\exported_report
对应目录中log生成的文件
导出到exported_report中的文件内容
静态资源文件
可使用--static_root参数将静态资源文件部署到服务器上,减少磁盘空间占用。比如,可以将静态资源文件部署到静态资源文件服务器上,用例如https://host:port/static/css/的路径来访问它,然后在生成报告时,将这个部署出来的服务器地址作为--static_root的参数传过去,这样报告中会默认去访问这个 URL 读取静态资源文件,避免导出报告时重复拷贝这些资源文件造成的磁盘空间占用。
例如:
airtest report case_point_01.py --log_root C:\Users\gmluo\Desktop\airtest_report_\log --outfile C:\Users\gmluo\Desktop\airtest_report_\log\log.html --lang zh --export C:\Users\gmluo\Desktop\airtest_report_\log\exported_report static_root https://host:port/static/css/
三、脚本中生成报告
simple_report 函数
def simple_report(filepath, logpath=True, logfile=None, output=HTML_FILE):
path, name = script_dir_name(filepath)
if logpath is True:
logpath = os.path.join(path, getattr(ST, "LOG_DIR", DEFAULT_LOG_DIR))
rpt = LogToHtml(path, logpath, logfile=logfile or getattr(ST, "LOG_FILE", DEFAULT_LOG_FILE), script_name=name)
rpt.report(HTML_TPL, output_file=output)
simple_report接口是一个简化版的生成报告接口,如果仅仅需要在本地查看的话,用这个接口即可。它的参数设置如下:
-
filepath:脚本文件的路径,可以直接传入变量__file__。
-
logpath:log 内容所在路径,如为True,则默认去当前脚本所在路径找 log 内容。
-
logfile:log.txt 的文件路径。
-
output:报告的到处路径,必须以.html结尾。
例如,在实际使用中,可以像这样调用simple_report接口:
from airtest.report.report import simple_report
simple_report(__file__, logpath=True, logfile='log.txt', output='log.html')
如果不指定任何参数,该接口会使用默认的参数生成一份 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"C:\Users\gmluo\Desktop\airtest_report_\log\log.html")
logdir 与 logpath:
生成 Airtest 报告需要依赖脚本运行过程保存的 log,所以如需生成报告,就需要保存脚本运行过程的 log,auto_setup 接口的 logdir 参数可以设置 log 保存路径;使用 simple_report 生成报告时,就可以设置 logpath,到 logdir 指定的 log 保存路径下面去找脚本对应的 log 内容。
LogToHtml 类
使用脚本生成Airtest报告的另外一种方式是使用LogToHtml()
类:
class LogToHtml(object):
"""Convert log to html display """
scale = 0.5
def __init__(self, script_root, log_root="", static_root="", export_dir=None, script_name="", logfile=None, lang="en", plugins=None):
self.log = []
self.devices = {}
self.script_root = script_root
self.script_name = script_name
if not self.script_name or os.path.isfile(self.script_root):
self.script_root, self.script_name = script_dir_name(self.script_root)
self.log_root = log_root or ST.LOG_DIR or os.path.join(".", DEFAULT_LOG_DIR)
self.static_root = static_root or STATIC_DIR
self.test_result = True
self.run_start = None
self.run_end = None
self.export_dir = export_dir
self.logfile = logfile or getattr(ST, "LOG_FILE", DEFAULT_LOG_FILE)
self.lang = lang
self.init_plugin_modules(plugins)
使用LogToHtml类在脚本中导出报告的步骤如下:
1、首先实例化LogToHtml类,传入相应的参数,如脚本路径、日志路径、静态资源服务器路径、导出报告的存放路径、脚本名称、日志文件名、报告语言和插件等。
now = time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time()))
report_path_name = now + '_' + self.__class__.__name__
log_path = os.path.join(os.path.dirname(__file__), 'log')
output_path = os.path.join(config_data.ROOT_DIR, 'report', report_path_name)
tmp = LogToHtml(script_root=__file__, log_root=log_path, static_root='http://192.168.38.33:81/', export_dir=output_path, logfile=os.path.join(log_path, 'log.txt'), lang='en', plugins=None)
2、然后调用report方法生成报告。
tmp.report()
参数含义如下:
-
script_root:脚本所在文件夹。
-
log_root:log.txt 所在文件夹。
-
static_root:部署静态资源的服务器路径。
-
export_dir:导出报告文件夹。
-
script_name:脚本名称。
-
logfile:log.txt 的路径。
-
lang:报告的语言(中文:zh;英文:en)。
-
plugins:插件,使用了poco或者airtest-selenium会用到。
示例如下,我们在指定路径 D:\***\case_point_01
中导出了 D:\***\case_point_01\case_point_01.py
脚本的运行报告,报告语言为英文:
from airtest.report.report import LogToHtml
h1 = LogToHtml(script_root=r'D:\***\case_point_01\case_point_01.py',
log_root=r"D:\***\case_point_01\log",
export_dir=r"D:\***\case_point_01\report" ,
logfile=r'D:\***\case_point_01\log\log.txt',
lang='en',
plugins=None)
h1.report()
保证生成报告
可以使用 try-finally 语句确保无论脚本执行情况如何都能生成报告。例如:
try:
# 执行测试脚本的代码
except Exception as e:
# 处理异常的代码
finally:
# 生成报告的代码
now = time.strftime("%Y-%m-%d-%H_%M_%S", time.localtime(time.time()))
report_path_name = now + '_' + self.__class__.__name__
log_path = os.path.join(os.path.dirname(__file__), 'log')
output_path = os.path.join(config_data.ROOT_DIR, 'report', report_path_name)
tmp = LogToHtml(script_root=__file__, log_root=log_path, export_dir=output_path, logfile=os.path.join(log_path, 'log.txt'), lang='en', plugins=None)
tmp.report()
通过这种方式,即使在测试脚本执行过程中出现异常,也能保证在 finally 块中生成报告。
总结
Airtest 提供的多种报告生成方式为测试人员带来了极大的便利,无论是在 IDE 中通过快捷键操作,还是在命令行中使用各种参数进行报告生成,亦或是在脚本中通过simple_report函数和LogToHtml类来生成报告,都有其独特的优势和适用场景。
在 IDE 中生成报告操作简便,一键生成和导出报告的功能让用户能够快速查看和分享报告,但需要注意可能出现的生成报告失败的情况,如因库冲突导致的问题可以通过卸载特定库来解决。
命令行生成报告则更加灵活,可以根据不同的需求设置各种参数,如指定被测设备、log 内容和截图存放目录、报告语言、导出报告以及指定静态资源文件路径等,满足了不同用户在不同环境下的需求。
在脚本中生成报告,simple_report函数作为简化版的生成报告接口,使用方便,
而LogToHtml类虽然参数较多,但功能更强大。同时,使用try-finally语句可以确保无论脚本执行情况如何都能生成报告,提高了报告生成的可靠性。
总之,熟练掌握 Airtest 的多种报告生成方式,能够根据实际需求进行选择,不仅可以提升测试效率,还能提高报告的质量,为自动化测试工作提供有力的支持。
最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。