生成Airtest报告总出错?这份总结收好了

简介: 生成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必须是相同的。


更多详细内容可以参看我们官网文档教程: airtest.doc.io.netease.com/IDEdocs/air…


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未记录任何步骤的执行情况(实际运行步骤都在生成报告的脚本之后),所以将获得一个空的测试报告。


相关文章
|
6月前
|
测试技术 Python
如何正确使用Airtest报告插件?报告小tips上线
如何正确使用Airtest报告插件?报告小tips上线
156 0
|
6月前
|
移动开发 JavaScript C#
分享53戏源代码总有一个是你想要的(亲测每一个均可用)
分享53戏源代码总有一个是你想要的(亲测每一个均可用)
117 0
为你的项目做一份Rmarkdown报告吧
markdown是一种轻量级标记语言,现在许多软件例如Mou、MarkdownEditor、Haroopad、Typora等,通过这些工具可以便捷的完成markdown文字录入,并且支持导出PDF、HTML等格式。对markdown语法还不太了解的人,请自行百度了解,个人认为只要花上几个小时你就能掌握,确实没什么难度,本文主要简单介绍R环境中的markdown,也就是Rmarkdown这个包怎么一步步的制作我们的项目报告。
92 0
|
Python
现场打脸:如何使用Selenium批量上传文件?
现场打脸:如何使用Selenium批量上传文件?
201 0
|
数据采集 域名解析 XML
漏洞猎人赏金笔记-如何编写Bug Bounty自动化脚本
前言 本文原文作者为@pry0cc,本文主要是对原文相关内容的提炼以及笔记,出于易读性考虑,笔者对很多地方做了一定量的注释或者删改(因为原文中的脚本存在一定问题)。 本文主要讲解的是经典的自动化信息搜集以及数据处理和漏洞扫描的流程.
557 0
漏洞猎人赏金笔记-如何编写Bug Bounty自动化脚本
|
前端开发
前端工作总结152-报错可以直接查看下面红字寻找对应的报错
前端工作总结152-报错可以直接查看下面红字寻找对应的报错
284 0
前端工作总结152-报错可以直接查看下面红字寻找对应的报错
|
前端开发
前端工作总结176-500错误
前端工作总结176-500错误
148 0
前端工作总结176-500错误
热饭的测开成果盘点第二十三期:wqrfproxy自动抓包断言库
本期介绍的是一个组件,身为python的第三方库,已经被pypi收录,且国内镜像源也早已复制。也就是说可以通过pip install 来下载。这个组件就是:wqrfproxy ,它的作用是可以在正常的unittest脚本中,对app发出的请求进行断言。
热饭的测开成果盘点第二十三期:wqrfproxy自动抓包断言库
程序人生 - 九图带你全面读懂体检报告,超实用的阅读指南,马住!
程序人生 - 九图带你全面读懂体检报告,超实用的阅读指南,马住!
122 0
程序人生 - 九图带你全面读懂体检报告,超实用的阅读指南,马住!
|
人工智能 数据可视化
老板让你复现一个图片,你会使用什么软件?
老板觉得课件的图形太过模糊和单调,于是想让我用可视化软件复现一下,做的更加高清、精美些。
150 0
老板让你复现一个图片,你会使用什么软件?