自动化支付宝小程序UI测试,AirtestProject和pytest助你一臂之力!

news2024/11/19 0:37:34

一,前言

1,背景

因公司业务需要做支付宝小程序的UI自动化测试,于是在网上查找小程序的自动化资料,发现微信小程序是有自己的测试框架的,但几乎找不到支付宝小程序UI自动化测试相关的资料。白piao失败,那就只能自己从零开始整了。

因为之前已经用 Python + appium + unittest 搭建好了android app的UI自动化测试,于是刚开始就想直接套用这个框架,当时认为小程序页面就其实就是相当于一个特殊的web页面,觉得应该可行。但有天脑子一热想尝试使用网易的airtest与单元测试框架pytest结合。

2,Airtest Project简介

Airtest Project主要包含 Airtest 和 Poco 两个测试框架:

  • Airtest框架,是一个跨平台的、基于图像识别的UI自动化测试框架,适用于游戏和App,支持平台有Windows、Android和iOS

  • Poco框架,是一款基于UI控件识别的自动化测试框架,目前支持Unity3D/cocos2dx-*/Android原生app/iOS原生app/微信小程序,也可以在其他引擎中自行接入poco-sdk来使用,用appium做UI测试的同学应该比较容易上手。

3,环境

这里选择 poco + pytest,Windows 10,测试机操作系统为Android 10

二,安装poco

AirtestIDE后续只用于生成操作步骤代码(定位及操作),用例的运行会使用Pycharm,因此Python环境需要安装pocoui第三方库

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

三,使用AirtestIDE的Poco辅助工具录制代码

AirtestIDE连接手机,使用Poco辅助工具录制被测小程序操作步骤生成代码

1,打开AirtestIDE,按照步骤:

1.1,连接手机。打开手机开发者调试模式,连接电脑,此时AirtestIDE右侧会出现设备id,点击connect连接手机。

1.2,选择新建.py。点击上图2处,选择.py 纯Python(纯文本),然后会弹窗需要设置路径参数,这里暂时可以只设置Save Path,其他默认即可。

1.3,点击OK后,会在Save Path设置的路径里生成对应的.py文件,且生成初始化内容如下:

其中auto_setup() api的参数可以查看Airtest官方接口文档。

2,Poco辅助窗选择Android,点击2处Yes,我们会发现脚本里会新增Android相关的代码。

选中Poco辅助窗的Poco auto recording按钮,将光标放在编辑器的15行,鼠标点击操作需要测试的小程序即可录制操作步骤。Poco辅助窗的这三个按钮大家可以参考官方文档说明,或者分别选中后鼠标点击被测APP界面就很快知道区别了。

四,使用pytest框架,修改脚本,调试运行

1,在AirtestIDE中调试代码

小程序操作步骤录制如下,可以在AirtestIDE上面先调试运行,是否正确。

代码如下:

# -*- encoding=utf8 -*-
__author__ = "xiaoqq"
​
from airtest.core.api import *
​
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
from airtest.cli.parser import cli_setup
​
if not cli_setup():
 auto_setup(__file__, logdir=True, devices=[
 "Android://127.0.0.1:5037/5EN0219305002521",
 ])
​
​
# script content
print("start...")
poco(text="扫一扫").click()
poco(text="相册").click()
poco("com.alipay.mobile.beephoto:id/iv_photo").click()
poco(text="大物洗").click()
poco(text="选好了").click()
poco(text="已关门").click()
poco(text="余额").click()
poco(text="去支付").click()
poco(text="立即支付").click()
​
​
# generate html report
# from airtest.report.report import simple_report
# simple_report(__file__, logpath=True)
2,完善代码

接下来就在Pychram里打开该.py文件,开始完善脚本。增加断言,并使用pytest管理、执行用例

# -*- encoding=utf8 -*-
__author__ = "xiaoqq"
​
import pytest
from airtest.core.api import *
​
@pytest.fixture(scope='function', params=['Android://127.0.0.1:5037/64c83202'])
def base_poco(request):
    '''
    构造新的poco,完成测试用例执行前、后的步骤
    @return: 返回新的poco对象
    '''
    from poco.drivers.android.uiautomation import AndroidUiautomationPoco
    connect_device(request.param)
    base_poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
    base_poco.device.wake()
    start_app("com.eg.android.AlipayGphone")
    sleep(2)
    yield base_poco
    sleep(2)
    stop_app("com.eg.android.AlipayGphone")
    sleep(2)
​
def test_wash_order(base_poco):
    print("start...")
    base_poco(text="扫一扫").click()
    base_poco(text="相册").click()
    base_poco("com.alipay.mobile.beephoto:id/iv_photo").click()
    base_poco(text="大物洗").click()
    base_poco(text="选好了").click()
    base_poco(text="已关门").click()
    base_poco(text="余额").click()
    base_poco(text="去支付").click()
    base_poco(text="立即支付").click()
    time.sleep(1)
    result_1 = base_poco(text="支付成功").exists()
    assert result_1 == True
    print("end...")
​
if __name__ == '__main__':
    pytest.main()
3,运行代码

运行该模块,可以查看手机上的操作步骤,结果通过!

简单的demo已经跑通,后续需要优化项目的目录结构,并加入截图、日志、测试报告模块,搭建成一个完整的自动化测试项目。

五,总结

  • 相对来说appium太笨重了,而网易提供的AirtestIDE里的poco辅助工具可以将元素定位及操作可以直接生成为代码。

  • 在AirtestIDE中只能运行单个的脚本,无法批量的运行测试脚本和管理测试脚本,而利用Airtest提供的开源的API结合其他的python库使用,可以实现更复杂的代码逻辑。

  • poco框架看起来代码简洁程度比airtest更好,维护更方便,且airtest框架基于图像识别,实际运行工程中可能会受识别率的影响。但对于新手或者代码基础薄弱的测试同学而言,airtest更容易上手。

END今天的分享就到此结束了!点赞关注不迷路~

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

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

相关文章

如何通过低代码工具,提升运输行业的运营效率和服务质量

《中国数字货运发展报告》显示,2022年我国公路货运市场规模在5万亿元左右。其中,数字货运整体市场规模约为7000亿元,市场渗透率约为15%。而以小微企业为主的货运行业,却以小、散、乱的行业特征,承载着5万亿元左右的市场…

【视觉SLAM十四讲学习笔记】第三讲——四元数

专栏系列文章如下: 【视觉SLAM十四讲学习笔记】第一讲——SLAM介绍 【视觉SLAM十四讲学习笔记】第二讲——初识SLAM 【视觉SLAM十四讲学习笔记】第三讲——旋转矩阵 【视觉SLAM十四讲学习笔记】第三讲——Eigen库 【视觉SLAM十四讲学习笔记】第三讲——旋转向量和欧…

【前端首屏加载速度优化(一) :nginx 开启gzip压缩】

开启gzip压缩前后对比: nginx.conf具体配置: server {# 启动后的端口listen 8882;# 开启gzip压缩gzip on;gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 6; gzip_types text/plain application/x-javascript…

前端 | iframe框架标签应用

文章目录 📚嵌入方式📚图表加载显示📚100%嵌入及滑动条问题📚加载动画保留 前情提要: 计划用iframe把画好的home1.html(echarts各种图表组成的html数据大屏)嵌入整合到index.html(搭…

为第一个原生Spring5应用程序添加上Log4J日志框架!

😉😉 学习交流群: ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群:583783…

如何一分钟内画好可视化图形?

一、定类数据 饼图 描述:用形状类似“饼”的形态描述数据的占比,并且参与绘制的数值没有负值,比如想要直观的查看“月生活费各个板块的占比”。 操作:以SPSSAU为例,使用“频数分析”即可。 示例: 圆环图…

使用C语言库函数qsort排序注意点

目录 题目背景错误C语言代码:正确C语言代码:注意点 题目背景 高校团委组织校园歌手比赛,进入决赛的校园歌手有10位,歌手编号从1到10进行编号。组委会随机抽取方式产生了决赛次序为:3,1,9,10,2,7,5,8,4,6。比赛现场有5个评委为参赛…

js逆向-某赞滑块

声明 本文仅供学习参考,如有侵权可私信本人删除,请勿用于其他途径,违者后果自负! 如果觉得文章对你有所帮助,可以给博主点击关注和收藏哦! 前言 目标网站:aHR0cHM6Ly9hY2NvdW50LnlvdXphbi5j…

3个.NET开源免费的仓库管理系统(WMS)

前言 今天给大家推荐3个.NET开源免费的WMS仓库管理系统(注意:以下排名不分先后)。 仓储管理系统介绍 仓储管理系统(Warehouse Management System,WMS)是一种用于管理和控制仓库操作的软件系统&#xff0…

Python 装饰器与偏函数

目录 装饰器 概念 简单的装饰器 复杂点的装饰器 通用装饰器 定义通用装饰器 使用装饰器 偏函数 引入类库 应用 总结 装饰器 概念 装饰器就是个闭包;把一个函数当做参数,返回一个修改过功能的函数; 本质上是一个返回函数的函数。…

同旺科技 USB 转 RS-485 适配器 -- 隔离型(定制款)

内附链接 1、USB 转 RS-485 适配器 隔离版主要特性有: ● 支持USB 2.0/3.0接口,并兼容USB 1.1接口; ● 支持USB总线供电; ● 支持Windows系统驱动,包含WIN10 / WIN11 系统32 / 64位; ● 支持Windows …

三维gis中用纹理限定多边形地理区域

在三维 gis 中经常需要在指定的多边形地理范围内做一些操作,比如地形的多边形裁剪、压平多边形区域内的倾斜摄影模型、在指定地理范围内绘制等间距的点等。这都涉及到限定多边形区域的问题。 所谓的限定多边形地理区域,核心问题在于判断某个片元是否处于…

Python入门学习篇(四)——if详解

if详解 1 单项分支 1.1 语法结构 if 条件:逻辑代码(条件为真时执行的代码) # 注: 如果条件不满足,那么则不执行if下面的逻辑代码1.2 示例代码 username input("请输入您的用户名: ") if username "admin":print("管理员登录成功")1.3 运行…

python环境的搭建+pytharm安装教程

一、Anaconda安装 1、去官网下载anaconda >百度搜索anaconda按回车键 >找到官网地址进去(注意看网址) >下载位置 2、安装anaconda 具体就安装步骤就不演示了(写文章时已经安装好了) 二、pycharm安装 1、去官网下载py…

深信服防火墙设置应用控制策略(菜鸟必看)

PS:前几天发布了关于深信服防火墙路由部署的流程:深信服防火墙路由模式开局部署-手把手教学(小白篇)-CSDN博客 昨天晚上有csdn的朋友联系我,说有一个关于ACL访问的问题要帮忙看一下 解决了以后,写个大概的…

Python(八十九)函数的参数的内存分析

❤️ 专栏简介:本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中,我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 :本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

[学习记录]Node event loop 总结流程图

文章目录 文章来源根据内容输出的流程图待处理遗留的问题参考 文章来源 详解JavaScript中的Event Loop(事件循环)机制 根据内容输出的流程图 待处理 这里从polling阶段开始 好像有些问题 遗留的问题 为什么“在I/O事件的回调中,setImmediate…

【动态规划】求最长递增子序列问题

目录 问题描述递推关系建立递推关系的思路约束条件:以 s [ k ] s[k] s[k] 结尾约束条件:以 s [ k ] s[k] s[k] 开头约束条件:增加子问题参数(前缀)约束条件:增加子问题参数(后缀)约束条件:LIS长度为k且末尾元素最小 运行实例 问…

mysql主从复制-redis集群扩容缩容、缓存优化(缓存更新策略、穿透,击穿,雪崩)、mysql主从搭建、django实现读写分离

基于Docker实现读写分离 1 redis集群扩容缩容 1.1 集群扩容 1.2 集群缩容 2 缓存优化 2.1 缓存更新策略 2.2 穿透,击穿,雪崩 3 mysql主从搭建 4 django实现读写分离 1 redis集群扩容缩容 1.1 集群扩容 # 6台机器,3个节点集群# 8台机器&am…