对Airtest报告的步骤标题做内容定制?实用速学!

简介: 对Airtest报告的步骤标题做内容定制?实用速学!

1. 前言



今天我们来聊一个非常实用的话题!有很多同学提过,我能不能修改Airtest报告显示的步骤名称,不想要 touch 全部显示成 点击 ,控件点击全部显示成 Poco Click 之类的:


网络异常,图片无法展示
|


那今天我们就利用 --plugins 参数传入插件,来实现同学们的这个需求。


2. --plugins参数简介



可能还有很多同学不那么熟悉 --plugins 这个参数,这里简单解释一下。在生成Airtest报告的命令 airtest report + 脚本路径 后面,支持添加 --plugins 参数,传入报告插件,用来对报告内容做一些简单的定制。


如果我们生成的是纯Airtest脚本的报告,其实是不用理会这个参数的(定制除外)。

但如果我们生成带有poco或者airtest-selenium脚本的报告,就需要带上这个参数,传入项目给出的对应插件,用于对poco/airtest-selenium语句的解析和处理,并修改一些显示效果。


1)生成poco脚本报告的插件示例


我们以包含Poco语句的脚本报告为例,来看下传入项目给出的插件和不传入插件的差别:


# -*- encoding=utf8 -*-
__author__ = "AirtestProject"
from airtest.core.api import *
from airtest.report.report import simple_report,LogToHtml
auto_setup(__file__)
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
poco(text="网易云音乐").click()
复制代码


  • 不添加 --plugins 参数生成的报告:


网络异常,图片无法展示
|

网络异常,图片无法展示
|


  • 添加 --plugins 参数生成的报告:


网络异常,图片无法展示
|


网络异常,图片无法展示
|


这就是命令行里 --plugins 这个参数的作用,可以传入指定的插件,用来修改报告内容。


具体它做了什么事,可以直接看源码: github.com/AirtestProj…


我们也可以在AirtestIDE的AirtestIDE\poco\utils\airtest\report.py路径下找到源码文件:


网络异常,图片无法展示
|


同理,给含有airtest-selenium语句的脚本生成报告,也可以使用下述方式传入对应的插件:


--plugins airtest_selenium.report
复制代码


我们也可以在AirtestIDE的AirtestIDE\airtest_selenium\report.py路径下面找到airtest-selenium的报告插件文件:


网络异常,图片无法展示
|


3. 对Airtest报告做步骤标题的内容定制



那我们了解了如何利用 --plugins 参数传入插件来修改Airtest报告内容之后,这里再以一个最简单的修改范例,看下 如何写出自己的插件来对Airtest报告做标题定制


1)查看插件源码找到用来显示报告左侧标题的内容


以修改Airtest的 touch 步骤标题为例。我们可以先查看一下,airtest的report.py的源码:github.com/AirtestProj…


可以看到有个叫 _translate_title 的方法,是专门用来显示报告左侧标题内容的:


def _translate_title(self, name, step):
        title = {
            "touch": u"Touch",
            "swipe": u"Swipe",
            "wait": u"Wait",
            "exists": u"Exists",
            "text": u"Text",
            "keyevent": u"Keyevent",
            "sleep": u"Sleep",
            "assert_exists": u"Assert exists",
            "assert_not_exists": u"Assert not exists",
            "snapshot": u"Snapshot",
            "assert_equal": u"Assert equal",
            "assert_not_equal": u"Assert not equal",
        }
        return title.get(name, name)
复制代码


也就是说,假如脚本里面调用了 touch 函数,报告里会对应地用函数名称找到对应的标题 Touch


2)如何自定义插件


我们可以写一个插件,来替换掉 _translate_title 的返回值,可以去模仿一下 poco.utils.airtest.report 的源码是怎么写的:


假如我们想把touch步骤对应的标题Touch,修改成Click,可以自定义1个这样的插件 new_report.py


# -*- coding: utf-8 -*-
import airtest.report.report as report
old_translate_title = report.LogToHtml._translate_title
def new_translate_title(self, name, step):
    title = old_translate_title(self, name, step)
    if title == "Touch":
        title = "Click"
    return title
report.LogToHtml._translate_title = new_translate_title
复制代码


这段代码的意思是,用一个新的函数 new_translate_title,来替换掉原本airtest模块里的LogToHtml当中的 _translate_title方法。


3)通过--plugins传入自定义插件


写好报告插件之后,为了快速演示效果,我们把插件保存到与当前 .air 脚本同层目录下,并且按住 shift+右键 在当前目录下打开cmd/PowerShell:


网络异常,图片无法展示
|


网络异常,图片无法展示
|


不传入我们自定义的插件生成的报告,touch步骤依旧是按旧插件的内容显示:


airtest report D:\test_plu\song.air -log_root D:/test/test01\ed879c1f10fa732db3e5e2c417ca7221 --outfile  D:\test_plu\song.air\old_re.html
复制代码


网络异常,图片无法展示
|


传入我们自定义的插件,步骤标题就会按照我们自定义的插件内容来显示了:


python -m airtest report song.air --log_root D:/test/test01\ed879c1f10fa732db3e5e2c417ca7221 --outfile  D:\test_plu\song.air\new_re.html --plugins new_report
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


可以看到步骤标题上,原本的 Touch 已经被替换成了 Click


4. 拓展:报告插件加载的原理



关于报告插件加载的原理,我们可以直接看源码: github.com/AirtestProj…


Airtest使用了python的 __import__ 来尝试导入插件模块,比如poco中的airtest报告插件,在 import 的时候是 import poco.utils.airtest.report ,因此在命令行中我们用了--plugins poco.utils.airtest.report 来导入。


如果想要在非当前目录下导入自定义的报告插件,直接传入路径是不行的,比如试图传入 --plugins d:\test\report\new_report.py  这样的参数,会发现无法加载成功。

我们可以开个python终端试一下:


>>> __import__("d:\\test\\report\\new_report.py")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'd:\\test\\report\\new_report'
复制代码


但是如果尝试把文件所在路径加入到系统PATH中,sys.path 添加完路径后就能够找得到了:


>>> import sys
>>> sys.path.append("d:\\test\\report")
>>> __import__("new_report")
<module 'new_report' from 'd:\\test\\report\\new_report.py'>
>>> import sys
>>> from airtest.report.report import LogToHtml
>>> sys.path.append("d:\\test\\report")
>>> rpt = LogToHtml(r"D:\test\report\yongli.air", r"D:\test\report\logs", plugins=["new_report"])
[14:32:22][DEBUG]<airtest.report.report> try loading plugin: new_report
>>> rpt.report()
复制代码


这时候再去打开生成的html文件,就发现成功生效了,可以看到刚才执行完 LogToHtml 之后airtest自动打了一条加载插件的log出来,说明成功加载到了。注意plugins的参数是一个list,因为支持多个插件传入


5. 小结



了解了如何 自定义插件 并且知道了 插件的加载原理 之后,我们就可以着手“定制”自己的Airtest报告了。


举个例子,我们在进行一些控件点击的时候,通常会使用如下的脚本:


poco(text="网易云音乐").click()
复制代码


假设我们自定义了1个poco插件,可以让这条脚本的步骤标题显示成“点击控件:网易云音乐”,会不会比统一的Poco Click看着要更清晰明了一些呢?


当然,这种定制款的Airtest报告就有待同学们去深入挖掘啦,毕竟每位同学的需求或者阅读习惯都是不一样的,希望大家早日“定制”出让自己满意的Airtest报告。

相关文章
|
数据采集 人工智能 JavaScript
【利用AI让知识体系化】深入浅出Puppeteer(二)
【利用AI让知识体系化】深入浅出Puppeteer
|
存储 编解码 小程序
抖音小程序开发中遇见的坑点
在抖音小程序开发中,需注意10大坑点:遵守小程序限制与规范;解决兼容性问题;优化数据加载速度;适应分享功能限制;处理视频播放挑战;优化图片加载显示;管理资源文件;提升用户体验;考虑安全性;及时更新维护。通过测试、优化和遵循官方文档,可克服这些问题,打造优质小程序。
|
Ubuntu 网络协议 网络安全
ubuntu防火墙的安装,开启,关闭和添加规则等操作
ubuntu防火墙的安装,开启,关闭和添加规则等操作
6455 0
ubuntu防火墙的安装,开启,关闭和添加规则等操作
|
8月前
|
设计模式 算法 开发者
「全网最细 + 实战源码案例」设计模式——策略模式
策略模式(Strategy Pattern)是一种行为型设计模式,用于定义一系列可替换的算法或行为,并将它们封装成独立的类。通过上下文持有策略对象,在运行时动态切换算法,提高代码的可维护性和扩展性。适用于需要动态切换算法、避免条件语句、经常扩展算法或保持算法独立性的场景。优点包括符合开闭原则、运行时切换算法、解耦上下文与策略实现、减少条件判断;缺点是增加类数量和策略切换成本。示例中通过定义抽象策略接口和具体策略类,结合上下文类实现动态算法选择。
240 8
「全网最细 + 实战源码案例」设计模式——策略模式
|
分布式计算 Hadoop Java
面向开发者的Hadoop编程指南
【8月更文第28天】Hadoop是一个开源软件框架,用于分布式存储和处理大规模数据集。它由Hadoop分布式文件系统(HDFS)和MapReduce编程模型组成。本指南旨在帮助初学者和中级开发者快速掌握Hadoop的基本概念和编程技巧,并通过一些简单的示例来加深理解。
479 0
|
10月前
|
数据采集 分布式计算 大数据
构建高效的数据管道:使用Python进行ETL任务
在数据驱动的世界中,高效地处理和移动数据是至关重要的。本文将引导你通过一个实际的Python ETL(提取、转换、加载)项目,从概念到实现。我们将探索如何设计一个灵活且可扩展的数据管道,确保数据的准确性和完整性。无论你是数据工程师、分析师还是任何对数据处理感兴趣的人,这篇文章都将成为你工具箱中的宝贵资源。
|
11月前
|
存储 机器学习/深度学习 人工智能
【AI系统】昇腾 AI 核心单元
本文深入解析了华为昇腾AI处理器的核心——AI Core及其达芬奇架构。AI Core采用特定域架构(DSA),专为深度学习算法优化,通过矩阵、向量和标量计算单元的高效协作,实现了对深度学习算法的加速。文章详细介绍了AI Core的计算单元、存储系统及控制单元的设计,展示了其如何通过优化数据通路和控制流程,显著提升计算性能。
520 3
|
监控 安全 架构师
JVM 17 调优指南:如何进行JVM调优,JVM调优参数
在这篇文章中,我会详细介绍JVM调优的概念、重要性和具体的JVM调优参数。此外,我将提供12个实用的代码示例,每个示例都会包含JVM调优参数和相应的Java代码。JVM调优是调整和配置Java虚拟机(JVM)的过程,以便最大限度地提高应用程序的性能和效率。这涉及到调整内存设置、选择合适的垃圾收集器,以及配置各种性能参数。
1070 0
|
编解码 测试技术 Android开发
Appium Inspector与Weditor:移动端测试的利器
本文介绍了两款移动端自动化测试的元素定位工具:Appium Inspector和weditor。Appium Inspector是官方推荐的辅助工具,而weditor是基于Python的ATX生态工具,支持Android和iOS界面分析。weditor安装需Python 3.6以上版本,可能遇到的GBK编码问题可通过更改系统区域设置解决。它提供设备界面、元素详情和代码运行三个主要部分,便于元素定位、属性查看及交互代码执行。这两款工具对于提升开发和测试效率具有积极作用。
|
存储 运维 安全
导论|数据可信流通 从运维信任到技术信任
《数据二十条》提出建立数据可信流通体系,强调全流程合规与监管,确保数据来源合法、隐私保护和交易规范。数据已成为数字经济的关键要素,但面临身份确认、利益依赖、能力预期和行为后果的信任挑战。安全事件暴露了所有权保障和越权使用风险,外循环模式下责任主体不清、利益不一致等问题突显。为解决信任问题,需从运维信任转向技术信任,利用密码学和可信计算实现身份确认、利益对齐、能力预期和行为审计。关键技术包括可信数字身份验证、使用权跨域管控、安全分级测评和全链路审计。数据密态时代借助密码学保障数据全生命周期的安全可控,降低流通风险,实现广域数据的可信流通。基础设施如密态天空计算将支持这一转型。
297 0