Airtest进阶使用篇!提高脚本稳定性 + 批量运行脚本!

Airtest进阶使用篇-提高脚本稳定性+批量运行脚本

一、背景

今天彭于晏为大家分享Airtest进阶使用篇,主要包含两块的内容:

  • 提高脚本稳定性
  • 批量运行脚本生成测试报告

二、提高脚本稳定性

1、添加全局配置:

#全局设置
ST.FIND_TIMEOUT=10  #设置隐式等待时长,默认识别图片时间是30秒,可改为10秒找不到就不找了
ST.OPDELAY=1 #设置默认操作时间间隔为1秒
ST.THRESHOLD=0.5 # 设置图片识别精准度,默认为0.7,表示70%匹配即认为匹配成功
  • 默认图片识别隐式等待时长是30秒,比较长,可通过:ST.FIND_TIMEOUT 改为10秒
  • 脚本中,每一个步骤的操作之间都会有一小段时间间隔,默认用OPDELAY进行设定,OPDELAY默认值为0.1,即每一步操作后等待0.1秒,将它适当设置得大一些,可以在每次操作后停顿一小段时间,避免过快进行下一个操作导致不能成功的问题。可通过:ST.OPDELAY整体设置每一步操作间隔时间,少写很多sleep
  • 默认图片识别精准度是0.7,如果需要整体更高或者更低的精准度,可通过:ST.THRESHOLD整体设置精准度。threshold设置得越高,图像识别的精度越高,但成功率也会有所降低,请根据自己的实际情况酌情设置。

2、截图方式:

图像识别使用的算法,更适合用来识别按钮类(带边框)、图标类的图像 ,仅仅单独截取几个文字的识别成功率很低,请尽量截取带边框的图片来达到较好的识别效果,避免只截取按钮上的文字。

比如同样的测试场景,以下两种截图方式,使用方式2截图能达到更好的识别效果:
方式1:


方式2:

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036【暗号:csdn999】

3、图片自定义设置:

Airtest IDE中双击图片,会弹出图片自定义设置窗口。
Snapshot+Recognition: 可查看截图在当前页面的识别情况,包含识别出来的位置以及识别结果的可信度

右侧参数说明:

filename: 图片名称,系统会自带随机的名称。为了代码有更好的可读性,可以修改为自定义的名称;
threshold:图片识别精准度阈值,默认是0.70,表示70%匹配则认为识别通过;
target_pos: 图片点击的位置,默认5,表示点击图片正中心。图片具体九宫格位置可参看下图说明:

比如购物车加购了3行商品,我们要点击第2个商品的+号按钮,则可以通过截取像上面这样的图片,并设置target_pos为6来实现点击效果。

rgb: 图片识别是否开启背景色识别,默认是不带背景色,使用灰背景的模式对比图片。
这样即使页面换了不同的主题色,只要图片样式不换,均不影响脚本运行。
勾选上之后则按实际背景颜色比对图片;scale_step: 用于控制搜索比例步长,它代表匹配时搜索的精细程度。
进行图像匹配时,会在原始截图的一定缩放范围内以截图最长边 * scale_step 的步长进行搜索。
默认值0.01,取值范围 [0.001, 0.1],推荐值 0.02, 0.005, 0.001。
通常该值不需要调整,当出现跨分辨率匹配(特别是匹配较小截图)无法匹配到时可以尝试减小它。
不过减小它会大幅增加匹配时间;scale_max: 用于调节匹配的最大范围, 如果要查找的目标UI很小的话,可以适当增大这个数值。
默认值 800, 推荐值 740, 800, 1000 取值范围 [700 , 2000]。

4、当前case运行失败不影响后续case执行:

当前脚本跑失败了,不能影响下一个脚本的正常运行,可以用try except捕获异常。

try下面是正常的操作步骤代码,except下面是当try中的脚本执行失败后,需要执行的兜底步骤代码,用于回到初始页面以保障下一个脚本能正常运行:

5、当目标图片未出现时,重新执行上一步操作

有时候由于软件卡顿或者网络不稳定的原因,导致我们执行A操作后,期望的B图片并没有出现,case执行失败。

这个时候我们可以使用wait函数的intervalfunc参数,当没找到B图片时,重新执行一次A操作。示例代码如下:

# 查找目标失败时,指定回调自定义的"notfound"函数
def notfound():print("No target found")
wait(Template(r"tpl1607510661400.png"), intervalfunc=notfound)

比如:QQ音乐的分享操作

三、批量运行脚本生成测试报告

1、命令行运行airtest脚本

Airtest IDE中编写脚本完成后,我们可以通过运行按钮完成单个脚本的运行验证。但是只能1次运行1个脚本,如果你想运行一批脚本,完成自动化测试的批量执行工作怎么办呢?

这个时候就需要通过命令行模式运行airtest脚本。具体命令示例如下:

# 运行脚本生成测试日志文件
airtest run airtest1.air --device Android:/// --log log/airtest1log/
# 依赖日志文件生成HTML测试报告
airtest report airtest1.air --log_root log/airtest1log/ --outfile log/airtest1log/airtest1log.html --lang zh

也可以使用python运行, 需要依赖airtest库,先安装库:pip install airtest


然后使用命令:

# 运行脚本生成测试日志文件
python -m airtest run airtest1.air --device Android:/// --log log/airtest1log/
# 依赖日志文件生成HTML测试报告
python -m airtest report airtest1.air --log_root log/airtest1log/ --outfile log/airtest1log/airtest1log.html --lang zh

其中:

--device Android:/// 表示使用连接的第一个Android设备运行脚本
--log 表示脚本运行日志文件存放的路径
--outfile 表示生成的html测试报告文件存放的路径
--lang zh 表示生成中文版的测试报告,如果要英文版的,使用--lang en

2、解决报告无法在别人电脑上正常查看的问题

这样生成的报告有一个问题:只能在你自己本地查看,发送给别人,在别人的电脑上无法正常查看:


原因是:这样生成的html报告,里面的一些图片路径和静态资源路径是绝对路径。当报告被发到别的电脑上时,html再想经过绝对路径找到这些图片资源和静态资源,就不可能了,因此才形成其余人看到的报告彻底没有图片和相应样式的状况。

在Airtest IDE中提供了导出报告的功能,可以让别人电脑上也能够正常打开你本地生成的报告。右键点击脚本名称,选择导出报告:


导出报告以后,图片资源和静态资源的路径都被改为了相对路径 ,而且文件夹中还打包了对应的静态资源文件。这样咱们再把导出好的报告发到别的电脑查看时,就不会出现上述问题了。

而使用命令行生成报告时,同样为了让别人电脑上能够正常打开你本地生成的报告,则需要使用–export命令,示例如下:

# 使用outfile参数,指定生成报告的目录, 这样的报告只能自己电脑上查看,别人电脑上无法正常查看
airtest report D:/test/airtest1.air --log_root D:/test/log/airtest1log/ --outfile D:/test/log/airtest1log/log.html --lang zh# 使用了export参数,这样生成的报告,图片和资源路径才会是相对路径,而且包含了静态资源文件,别人电脑上也能正常查看
airtest report D:/test/airtest1.air --log_root D:/test/log/airtest1log/ --export D:/test/log/airtest1log/ --lang zh

3、批量运行多个脚本

如果需要批量运行多个脚本,则可以编写一个bat文件,来批量运行多个脚本,比如要同时运行testcase1.air和testcase2.air两个脚本,命令示例如下:

d:
cd D:\software\AirtestIDE\script
rmdir /s/q log
md log
cd D:\software\AirtestIDE\script
airtest run testcase1.air --device Android:/// --log log/testcase1og/
airtest report testcase1.air --log_root log/testcase1log/ --export log/testcase1log/ --lang zh
airtest run testcase2.air --device Android:/// --log log/testcase2log/
airtest report testcase2.air --log_root log/testcase2log/ --export log/testcase2log/ --lang zh

先新建一个txt文件,写入上面的命令,然后保存并重命名为.bat文件。然后通过双击bat文件即可批量运行脚本test.bat:


批量运行脚本后,每一个case都会生成自己详细的HTML测试报告:

当然,如果已经到了这一步,那么有编程功底的同学可以更进一步,将testcase1.html和testcase2.html中的关键信息抽取出来,进行简单的网页编程生成一份汇总的测试报告,让整个自动化测试结果有更专业的呈现,类似于下面这样:

===================================================================
以上就是本次的全部内容,如果对宝子们有帮助,麻烦点个赞+收藏+关注,一键三连啦~

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
 

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/185092.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++:C++11新特性---右值引用

文章目录 初始化方式显示查看类型initializer_listdecltype左值引用和右值引用move左右值引用的场景 万能引用和完美转发 本篇总结C11新特性 初始化方式 C11对参数列表的初始化有了更明确的定义,可以这样进行定义 // 列表初始化 void test1() {// 旧版本int x 0…

免费WordPress站群插件-批量管理站群的免费软件

WordPress站群插件:让文章管理如丝般顺滑 在众多网站建设工具中,WordPress一直以其简便易用、丰富的插件生态而备受青睐。对于站群管理者而言,如何高效地更新、发布和推送文章是一项不可忽视的任务。本文将专注分享一款WordPress站群插件&am…

Audacity降噪消除视频中杂音

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

QListWidget中自定义widget大小自适应

背景: QListWidget中的item,可以添加自定义的widget。 但是怎么去调整widget的大小呢? 参考:QT QListWidget的添加与删除,滚动条显示或隐藏,判断是否滑到顶部或底部,并使QListWidgetItem自适…

Node.js【文件系统模块、路径模块 、连接 MySQL、nodemon、操作 MySQL】(三)-全面详解(学习总结---从入门到深化)

目录 Node.js 文件系统模块(二) Node.js 文件系统模块(三) Node.js 文件系统模块(四) Node.js 路径模块 Node.js 连接 MySQL Node.js nodemon Node.js 操作 MySQL Node.js 应用 Node.js 文件系统模块…

每日汇评:在美国通胀数据前,黄金多头变得谨慎起来

黄金价格在连续五天上涨后,周四早间稍作休息; 在个人消费支出通胀数据公布前,美元和美债收益率巩固了下行空间; 超买状况可能限制金价的上行空间,因为月底的资金流动可能占主导地位; 昨日亚盘交易时段&…

子类拷贝构造函数会调用父类拷贝构造函数吗?

一. 编译器提供的默认子类拷贝构造函数会调用父类拷贝构造函数。 #include <iostream> #include <string> using namespace std;class Parent { public:Parent(string home_address "中国") : m_home_address(home_address) {cout << "调用…

学习笔记小结

redis-cluster集群 redis3.0引入的分布式存储方案 集群由多个node节点组成&#xff0c;redis数据分布在这些节点当中。 在集群之中分为主节点和从节点 集群模式当中&#xff0c;主从一一对应&#xff0c;数据的写入和读取与主从模式一样&#xff0c;主负责写&#xff0c;从…

C陷阱与缺陷——第3章 语义陷阱

1. 指针和数组 C语言中只有一维数组&#xff0c;而且数组的大小必须在编译器就作为一个常数确定下来&#xff0c;然而在C语言中数组的元素可以是任何类型的对象&#xff0c;当然也可以是另外的一个数组&#xff0c;这样&#xff0c;要仿真出一个多维数组就不是难事。 对于一个…

Mac电脑版程序创建工具 VMware InstallBuilder Enterprise mac最新

VMware InstallBuilder Enterprise 是一款功能强大、操作简单、跨平台支持的软件安装和部署工具&#xff0c;可以让开发者更加高效地创建和部署软件&#xff0c;并提供了丰富的功能和工具&#xff0c;适用于不同的用户需求和场景。 内置调试器 轻松排除应用程序安装过程中的故…

样品实验EPONEX1510氢化双酚A环氧树脂TDS说明书

样品实验EPONEX1510氢化双酚A环氧树脂TDS说明书 200克 500克 1KG/瓶

使用Docker安装Jenkins,解决插件安装失败,版本太低等问题

如果已经遇到插件安装部分失败&#xff0c;Jenkins版本太低&#xff0c;又要换什么清华镜像地址&#xff0c;不要犹豫&#xff0c;直接以下步骤卸载重装就好了 开始安装 yum 更新到最新 yum update到Jenkins官网查找最新的LST版本 最后的版本号一定要带&#xff0c;指定下载具…

深入探索Maven:优雅构建Java项目的新方式(二)

Meven高级 1&#xff0c;属性1.1 属性1.1.1 问题分析1.1.2 解决步骤步骤1:父工程中定义属性步骤2:修改依赖的version 1.2 配置文件加载属性步骤1:父工程定义属性步骤2:jdbc.properties文件中引用属性步骤3:设置maven过滤文件范围步骤4:测试是否生效 1.3 版本管理 2&#xff0c;…

Sass 安装

文章目录 前言SASS的系统要求安装Ruby例子后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;Sass和Less &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出现错误&…

Informer辅助笔记:data/dataloader.py

以WTH为例 import os import numpy as np import pandas as pdimport torch from torch.utils.data import Dataset, DataLoader # from sklearn.preprocessing import StandardScalerfrom utils.tools import StandardScaler from utils.timefeatures import time_featuresim…

什么是光模块光模块看我这张就够啦!

1、什么是光模块 信号在光网络中传输时&#xff0c;必须进行光/电转换。光模块就是专门在光网络中完成光/电转换工作的部件。光模块的外观结构如图1所示&#xff0c;简单的来说&#xff0c;双绞线最大传输距离是100米&#xff0c;用的是电信号&#xff0c;那如果说传输距离超过…

骨传导能保护听力吗?使用骨传导有没有副作用?

先说结论&#xff0c;骨传导耳机是可以保护听力的&#xff0c;如果是正常的使用骨传导耳机&#xff0c;是不会有任何副作用的。 一、为什么说骨传导耳机能保护听力 1、佩戴方式更健康 由于骨传导耳机采用耳挂式佩戴&#xff0c;在使用的时候开放双耳&#xff0c;不会堵塞耳道…

如何使用vs2022通过excel.exe生成VC、C++能够使用的头文件

我们在开发MFC、VC、C项目时&#xff0c;有时候需要操作excel文件的读写&#xff0c;我们一般常用方式是调用微软的excel驱动方式调用&#xff0c;但调用驱动前&#xff0c;我们需要生成我们C能够调用到的头文件&#xff0c;一般常用文件有&#xff1a; #include "CAppli…

GPT-4 惨遭削弱;拼多多市值一度超阿里;雷军回应个人向武汉大学捐款 13 亿元丨 RTE 开发者日报 Vol.96

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有…

卷轴模式:金融领域的新趋势

卷轴模式在金融领域逐渐崭露头角&#xff0c;成为一种新型的投资策略。这种模式基于完成任务或达成特定目标来获取积分&#xff0c;利用这些积分进行投资或获取现实物品。它不同于传统的资金盘&#xff0c;而是以一种更稳健的方式运作&#xff0c;避免了资金盘的风险。 一、卷轴…