【速看】如何通过合理的封装,让你的自动化脚本更上一层楼!

这篇具有很好参考价值的文章主要介绍了【速看】如何通过合理的封装,让你的自动化脚本更上一层楼!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

此文章来源于项目官方公众号:“AirtestProject”
版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途

1. 前言

上一篇推文利用一个在图片范围内实现随机坐标点击的例子,去教会大家如何将自己想要的效果实现出来,受到大家的热情反响,在我们官方讨论群中,还有大佬对我们的示例代码进行优化改进,做了很多合理的函数封装,以及减少了示例脚本内的二次查找等问题;我们也征得大佬同意,将他的代码与大家分享一下~(大佬来自Airtest官方讨论3群-Moty)

2. 代码分享

Moty同学是通过在本地python环境安装Airtest库去进行Airtest自动化脚本编写的,同时该脚本在AirtestIDE上是可以完美适配运行的。所以大家在编写自动化脚本的时候,可以有多重选择;但是AirtestIDE在代码编写上也有很多方便大家的小设计小巧思,大家也可以多多使用我们的AirtestIDE啊~

废话不多说,我们先来看看Moty同学代码的运行情况,可以看到通过生成随机坐标的形式,点击图片上的任意点,这里用计算器去具象化,可以看到每次随机坐标可以点击不同数字或者数字的不同位置,每次运行都可以获得随机的数字序列。

【速看】如何通过合理的封装,让你的自动化脚本更上一层楼!

看起来很厉害的样子,我们应该这么去实现呢,让我们来看看Moty同学的代码吧~

# -*- encoding=utf8 -*-
__author__ = "Moty"

from airtest.core.api import *
from airtest.cli.parser import cli_setup
from airtest.core.error import *
from airtest.core.settings import Settings as ST
import random

"""
获取模板匹配的目标区域的矩形 这一部分实现参考 cv.py 中 loop_find 部分
: param : tpl 模板
: param : intervalfunc 没有合适匹配时的回调函数
: return 最佳匹配的矩形区域(x1,y1,x2,y2)
"""

def rectangle(tpl,intervalfunc=None):  
    G.LOGGING.info("Try finding: %s", tpl)
    start_time = time.time()
    while True:
        screen = G.DEVICE.snapshot(filename=None, quality=ST.SNAPSHOT_QUALITY)
        if screen is None:
            # 如果截图为空,则可能是屏幕锁定了
            G.LOGGING.warning("Screen is None, may be locked")
        else:
            match_result = tpl._cv_match(screen)
            if match_result:
                try_log_screen(screen)
                # 这里 rect 得到的是 4个坐标点 取出左上右下角 得到(x1,y1,x2,y2) 元组
                rect = match_result.get("rectangle")
                if rect is not None:
                    return (round(rect[0][0]) , round(rect[0][1]) , round(rect[2][0]) , round(rect[2][1]))

        if intervalfunc is not None:
            intervalfunc()

        # 超时则raise,未超时则进行下次循环:
        if (time.time() - start_time) > ST.FIND_TIMEOUT:
            try_log_screen(screen)
            # 如果超时,则抛出异常
            raise TargetNotFoundError('Picture %s not found in screen' % tpl)
        else:
            time.sleep(0.5)

"""
param : rect : 矩形区域 或模板
return : 区域内的随机坐标 
"""

# 获取矩形区域内的随机坐标
def random_point(rect):
    # 如果传入的是图片,则获取图片匹配的矩形区域
    if isinstance(rect, Template):
        x1, y1, x2, y2 = rectangle(rect)
    else:
        x1, y1, x2, y2 = rect
    # 在矩形区域内随机生成一个坐标点
    x = random.randint(x1, x2)
    y = random.randint(y1, y2)
    return x, y

"""
在 矩形范围内 随机点击 
param : v : 目标区域 or 模板 or 坐标点(兼容touch)
param : times : 点击次数
return :最终点击的点的坐标
"""
@logwrap
def random_touch_in_area(v, times=1, **kwargs):
    if isinstance(v, Template) or (isinstance(v, tuple) and len(v) == 4):
        pos = random_point(v)
    else:
        try_log_screen()
        pos = v
# 在目标区域内随机点击
    for _ in range(times): 
        G.DEVICE.touch(pos, **kwargs) 
        time.sleep(0.05)  
    delay_after_operation()  
    return pos


if __name__ == '__main__':

    # 如果没有通过命令行连接设备,则使用该连接命令,若使用IDE运行则可忽略这段代码,不用写上
    if not cli_setup():
        auto_setup(__file__, logdir=None, 
                devices=["android:///",])

    # 录制图片
    tpl = Template(r"tpl1697636105500.png", record_pos=(0.243, -0.165), resolution=(1080, 2280))

    # 获取模板匹配的目标区域的矩形
    result = rectangle(tpl)
    print(f"图片所在矩形区域 {result}")

    # 在目标区域内随机点击
    for i in range(10):
        p =  random_touch_in_area(tpl)
        print(f"第 {i+1:02d} 次点击坐标 {p}")
        sleep(1)

可以看出来,在编写代码的时候,Moty同学将每一个步骤进行函数封装后,可以减少二次查找的次数以及代码冗余,Moty同学的编写思路很值得我们学习~

3.小结

最后,希望同学们在学习以及使用Airtest的时候,可以先学习方法,掌握代码编写技巧后,对自己的脚本可以进行优化再优化,从而实现代码收益最大化。同时,我们也鼓励大家在学习我们的官方教程脚本的时候,进行优化再创作,也可以到我们官方Q群进行投稿噢~

官方Q群:目前1、2、3群已满,大家可以加入4群(117973773)。

这里附上我们官方教程文档的网址,欢迎同学们查阅哦:https://airtest.doc.io.netease.com/ 。


AirtestIDE下载:airtest.netease.com/
Airtest 教程官网:airtest.doc.io.netease.com/
搭建企业私有云服务:airlab.163.com/b2b

官方答疑 Q 群:117973773文章来源地址https://www.toymoban.com/news/detail-711130.html

到了这里,关于【速看】如何通过合理的封装,让你的自动化脚本更上一层楼!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 提升您的业务效率:如何通过API集成自动化工具

    在当今快节奏的商业环境中,企业正面临着提高效率和降低成本的双重压力。随着数字化转型的不断深入,越来越多的组织开始寻求技术解决方案来应对这些挑战。API(应用程序编程接口)的集成是实现业务流程自动化的关键步骤之一,它可以帮助企业更高效地管理和分析数

    2024年02月20日
    浏览(39)
  • 如何编写接口自动化框架系列通过yaml来管理测试用例(四)

    本文是接口自动化测试框架系列篇的第四篇 ,主要介绍yaml包的使用 。自动化测试的本质是将功能测试用例交给代码去 目录 1. yaml介绍? 2.python中的yaml包 3.项目中使用yaml包 4 项目总结 执行 ,测试人员往往是在自动化框架添加对应的测试用例即可(也叫测试脚本)。而维护测试

    2024年02月07日
    浏览(57)
  • 三步 让你的 vscode 自动编译ts文件

    1:环境安装 tsc  作用:负责将 ts  代码 转为 浏览器 和 nodejs 识别的  js 代码。 /全局安装 npm install -g typescript // 检查是否安装成功 tsc -v  2:自动编译 运行 tsc --init,创建 tsconfig.json 文件; 修改 tsconfig.json 文件,设置编译后的 js 文件夹。快速查找 outDir,输出路径修改为:

    2024年02月02日
    浏览(36)
  • 自动化测试中如何判断测试是否通过?详解 Pytest 测试框架的断言用法

    目录 前言: 01 — Python 原生的 assert 02 — Pytest 的 assert 优点 03 — Pytest 断言的用法 4.1 断言字符串 4.2 断言函数或者接口返回值 4.3 断言集合类型 04 — Pytest 断言 Excepiton 05 — 为断言添加自定义功能 06 — 禁止 Pytest 的 assert 特性 07 — 总结 在自动化测试中,判断测试是否通过是

    2024年02月16日
    浏览(57)
  • 点击器自动点击器,让你的屏幕操作变得更加简单

    点击器自动点击器,也被称为屏幕点击器或鼠标连点器,是一种能够模拟人类点击行为的工具。它可以在特定时间间隔内自动执行鼠标点击操作,来代替用户手动点击屏幕。这种工具通常运行在Windows、MacOS和Linux等操作系统上,并可以与其他软件集成使用。   以下是本文的主

    2024年02月09日
    浏览(52)
  • 如何通过python写接口自动化脚本对一个需要调用第三方支付的报名流程进行测试?

    对于需要调用第三方支付的报名流程进行接口自动化测试,可以通过以下步骤来编写Python代码: 1. 确认API需求 首先,需要确认报名流程的API需求和预期功能。这涉及到对业务需求的理解和API设计的分析。 2. 安装依赖库 在Python程序中,需要安装requests库(用于发送HTTP请求)和

    2024年02月10日
    浏览(68)
  • 通过ChatGPT实现的ChatPDF,简单的应用落地,让你的文档变成一个智能助手,通过对话的方式快速学习文档内容

    目录 先看效果 实现原理 环境安装 应用场景 首先,找到一篇论文先,我这里随便找了一篇pdf格式的论文 那么,我现在让他担任一个研究论文的智能助手,当然大家可以自定义自己的prompt  开始问答 可以看到效果很强 提取 pdf 文本,以便后续处理。 由于 OpenAI API 对 Token 数量

    2023年04月08日
    浏览(53)
  • 基于 python 的接口自动化测试,让你轻松掌握接口自动化

    目录 目录 一、简介                ​编辑二、引言 三、环境准备 四、测试接口准备 接口信息 五、编写接口测试 六、优化 封装接口调用   本文从一个简单的登录接口测试入手,一步步调整优化接口调用姿势; 然后简单讨论了一下接口测试框架的要点; 最后介绍了一下

    2023年04月19日
    浏览(72)
  • 自动发推技巧解析:让你的推文营销更容易上热门

    作为一家企业在推特上发帖的目的就是能让更多人看到,也就是被算法拾取,从而推荐给更多的人,那么就需要首先了解推特的算法是怎么样的,才能利用好它进行推特自动发推群发,这里推特群推王给大家剖析一二:   上热门指什么? 首先需要知道一个词语——时间线,在

    2024年02月15日
    浏览(43)
  • chatgpt赋能python:Python自动抢票:让你的购票经历更加简单便捷!

    随着互联网的发展,越来越多的人选择在网上购买火车、飞机等交通工具的票。但是,一些火爆的车次、航班往往在开售后仅仅几秒钟内就被抢完,让很多想出行的人非常苦恼。在这种情况下,Python自动抢票就成了很多人的“救星”。 Python自动抢票是指利用Python编程软件,通

    2024年02月15日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包