当前位置: 首页 > news >正文

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中的关键信息抽取出来,进行简单的网页编程生成一份汇总的测试报告,让整个自动化测试结果有更专业的呈现,类似于下面这样:

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

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

软件测试面试文档

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

在这里插入图片描述

相关文章:

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

一、背景 今天彭于晏为大家分享Airtest进阶使用篇,主要包含两块的内容: 提高脚本稳定性批量运行脚本生成测试报告 二、提高脚本稳定性 1、添加全局配置: #全局设置 ST.FIND_TIMEOUT10 #设置隐式等待时长,默认识别图片时间是30秒,可改为…...

数据库系统概述之数据库优化

为什么需要进行优化? 数据库性能瓶颈 数据库服务器的性能受许多因素影响,包括硬件能力、系统规模、业务模型及架构、代码设计、数据库表设计、系统环境等。 因此,可以从几个方面进行数据库优化 喜欢点赞收藏,如有疑问&#xff…...

【error:Custom elements in iteration require ‘v-bind:key‘ directives】元素绑定:key

在vue3中使用v-for操作的时候&#xff0c;报error Custom elements in iteration require v-bind:key directives 当我想自定义绘制echarts图的代码&#xff1a; <el-row><div v-if"data.chartDataList.length > 0"><el-col :span"12&quo…...

TA-Lib学习研究笔记(二)——Overlap Studies下

TA-Lib学习研究笔记&#xff08;二&#xff09;——Overlap Studies下 &#xff08;11&#xff09;SAR - Parabolic SAR 抛物线指标 函数名&#xff1a;SAR 名称&#xff1a; 抛物线指标 简介&#xff1a;抛物线转向也称停损点转向&#xff0c;是利用抛物线方式&#xff0c;随…...

三.排序与分页

目录 一.排序数据二.分页 一.排序数据 1.排序规则 使用ORDER BY 子句排序 ASC&#xff08;ascend&#xff09;升序DESC&#xff08;descend&#xff09;降序 ORDER BY 子句在SELECT语句的结尾 2.单列排序 SELECT last_name, job_id, department_id, hire_date FROM e…...

第一个php扩展开发的demo

cd /root/soft/php/php-5.2.6/ext ./ext_skel --extnameheiyeluren cd /root/soft/php/php-5.2.6/ext/heiyeluren vi config.m4 打开文件后去掉 dnl &#xff0c;获得下面的信息&#xff1a; PHP_ARG_ENABLE(rot13, whether to enable heiyeluren support, [ --enable-heiyelu…...

A stop job is running for Session c1 of user root (25s 1min 30s)问题

写在前面 今天在前端点击重启按钮&#xff0c;突然发现开发板的串口打印信息卡住了&#xff0c;时间比较长的有一处&#xff0c;比较短的有两处&#xff0c;大致为A stop job is running for Session c1 of user root (25s 1min 30s)&#xff0c;此处估计是在关机重启的时候&a…...

C语言进阶之笔试题详解(2)

前言 这里的内容包括二维数组笔试题和指针笔试题&#xff0c;供给读者对这部分知识进行加深和巩固。 ✨ 猪巴戒&#xff1a;个人主页✨ 所属专栏&#xff1a;《C语言进阶》 &#x1f388;跟着猪巴戒&#xff0c;一起学习C语言&#x1f388; 目录 前言 笔试题 二维数组 题目…...

【开源】基于Vue和SpringBoot的独居老人物资配送系统

项目编号&#xff1a; S 045 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S045&#xff0c;文末获取源码。} 项目编号&#xff1a;S045&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询社区4…...

Linux常用命令----cp 命令

文章目录 1. 基本用法2. 保留文件属性3. 递归复制4. 仅复制更新的文件5. 交互式复制6. 创建符号链接而非复制7. 复制并备份目标文件8. 指定备份后缀9. 详细输出总结 Linux操作系统中&#xff0c;cp 命令是一个非常基础且强大的工具&#xff0c;用于复制文件或目录。本文将详细介…...

前端:HTML鼠标样式及其对应的CSS属性值

1、默认箭头样式&#xff1a; selector {cursor: default; } 2、手型样式 selector {cursor: pointer; } 3、文本选择样式&#xff1a; selector {cursor: text; } 4、移动手型样式&#xff1a; selector {cursor: move; } 5、缩放手型样式&#xff1a; selector {cur…...

Linux 命令chgrp chown chmod

chgrp chown chmod 介绍 chgrp : 修改文件所属用户组 chown : 修改文件拥有者 chmod : 修改文件权限1 chgrp 命令功能: chgrp命令用来改变文件或目录所属的用户组。该命令用来改变指定文件所属的用户组。其中&#xff0c;组名可以是用户组的id&#xff0c;也可以是用户组的组…...

网络篇---第七篇

系列文章目录 文章目录 系列文章目录前言一、什么是长连接和短连接?二、长连接和短连接的优缺点?三、说说长连接短连接的操作过程前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分…...

Webshell混淆免杀的一些思路

简介 为了避免被杀软检测到&#xff0c;黑客们会对Webshell进行混淆免杀。本文将介绍一些Webshell混淆免杀的思路&#xff0c;帮助安全人员更好地防范Webshell攻击。静态免杀是指通过对恶意软件进行混淆、加密或其他技术手段&#xff0c;使其在静态分析阶段难以被杀毒软件或安…...

MacBook macOs安装RabbitMQ【超详细图解】

目录 一、使用brew安装RabbitMQ 二、安装RabbitMQWeb管理界面 三、启动RabbitMQ 一、使用brew安装RabbitMQ 刚好项目要用到RabbitMQ&#xff0c;安装顺便写下安装步骤记录一下以备用 使用brew命令安装&#xff0c;一般Mac会自带这个命令&#xff0c;如没有&#xff0c;…...

基于格攻击的密钥恢复方法

本篇博文介绍针对椭圆曲线签名算法的基于格攻击的密钥恢复方法&#xff0c;本研究将这种方法应用于椭圆曲线签名算法。针对椭圆曲线算法的攻击研究一般主要集中于算法的两个运算阶段&#xff0c;即标量乘阶段和组合阶段。对于椭圆曲线签名算法&#xff0c;针对标量乘阶段的攻击…...

Redis中的缓存穿透、雪崩、击穿(详细)

目录 一、概念 1. 缓存穿透&#xff08;Cache Penetration&#xff09; 解决方案&#xff1a; 2. 缓存雪崩&#xff08;Cache Avalanche&#xff09; 解决方案&#xff1a; 3. 缓存击穿&#xff08;Cache Breakdown&#xff09; 解决方案&#xff1a; 二、三者出现的根本原…...

iframe

iframe学习 1.iframe是什么&#xff1f; a)iframe是html元素&#xff0c;用于在网页中内嵌另一个网页。 b)iframe默认有一个宽高,存在边界。 c)iframe是一个行内块级元素&#xff0c;可以通过display修改。 2.iframe元素属性有哪些&#xff1f; a)src : 指定内联网页的地…...

rust 基本数据类型

Rust 是 静态类型&#xff08;statically typed&#xff09;语言&#xff0c;也就是说在编译时就必须知道所有变量的类型&#xff0c;基本类型如下 整型 整数 是一个没有小数部分的数字长度有符号无符号8-biti8u816-biti16u1632-biti32u3264-biti64u64128-biti128u128archisi…...

centos7中通过kubeadmin安装k8s集群

k8s部署官方提供了kind、minikube、kubeadmin等多种安装方式。 其中minikube安装在之前的文章中已经介绍过&#xff0c;部署比较简单。下面介绍通过kubeadmin部署k8s集群。 生产中提供了多种高可用方案&#xff1a; k8s官方文档 本文安装的是1.28.0版本。 建议去认真阅读一下…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...