跨端跨框架 UI 自动化测试方案 Flybirds

背景
多端研发对于当今时代的前端开发来说是个绕不过去的话题,为了解决这些问题,行业内推出了很多开发方案,但是跨端 UI 自动化测试的解决方案并不多。
Flybirds 从 2022 年初开源至今已有 3 月有余,通过与社区内活跃用户的交流和反馈,推出了 v0.2 版本的跨端跨框架测试方案,一套脚本多端运行,插件化的架构设计,也方便社区开发者自由加入扩展,一起共建成长。
v0.2 新增特性
支持多端脚本复用
支持多浏览器渲染引擎:Chromium、WebKit 和 Firefox
支持多浏览器并发模式下的兼容性测试
我们需要一个怎么样的多端测试方案
近几年,每隔一段时间就会有很多新的开发框架出现,带来了更好的开发体验和性能的同时,也给自动化测试创造了很多难题。
我们到底需要一个怎样的多端测试方案呢?从 Flybirds 的视角来说,我们希望多端测试不会成为研发流程中的障碍,特别是多端生态整体呈现欣欣向荣之时,自动化测试方案应和开发方案共同成长。
不论是 Web 、React Native 端,还是 Native 端,理想的方案应该进行多端适配,保留良好扩展,兼顾更多框架,由社区共同建设,促进整体生态繁荣,因此就有了 Flybirds 向社区提供的跨端跨框架测试方案。
插件化架构
插件化架构帮助我们将每一个端的能力拆分开, 插件提供运行时所需的组件、API 和配置,Flybirds 将它们分别注入对应的生命周期。
文件结构
DSL step 列表
当然在这个架构中, 各端略有不同,主要是各端的平台差异性导致,以下是各端具体支持的 DSL step 列表, 大部分 step 能够适用于多端




多端应用例子
测试用例
页面对象管理
多端项目中的页面对象管理,是通过 json 文件进行统一管理,通常存在以下两种情况
各端相同时,参考以下配置
各端不同时,通过 android、ios、web 区分
数据驱动参数化
实际项目中,大部分的自动化测试都是基于数据驱动参数化,因此还需要搭配「 场景大纲+例子」一起使用,这里我们对上面的例子进行改造:
多浏览器并发
依托 PlayWright 的跨浏览器能力,Flybirds 支持所有的现代渲染引擎,包括 Chromium、WebKit 和 Firefox。

Flybirds 支持多浏览器并发模式,方便高效的进行浏览器兼容性测试
配置参数
执行命令
运行前检查
接下来,开始运行前,请先对运行环境进行检查
Android、iOS
请确保配置的测试设备能够正常连接
Android: 执行命令
adb devices
, 检查设备列表中是否包含测试设备iOS:以
tidevice
库举例,执行命令tidevice list
,检查设备列表中是否包含测试设备下载安装测试包
Android:框架会通过
config
中配置的packagePath
自动下载测试包并安装(请确保手机已经打开”允许安装未知来源“ ),也可手动下载安装。iOS:
请手动下载演示 APP 进行安装
开启 wdaproxy
运行
你可以很方便的通过 cli 切换执行环境, 筛选 case 和控制并发数量,下面列出了一些常用命令
配置
以下是各端运行前必须的配置项
Android 配置项:deviceId、packageName
IOS 配置项:platform、deviceId、packageName、webDriverAgent、
Web 配置项:platform、browserType、headless

自定义框架扩展
Flybirds 的插件式设计模式,保留了良好的扩展,未来我们会开放更多。
修改扩展
如果你希望在项目中修改当前扩展,你可以用本地文件替换 plugin 下面的(app,device,element,app,step,screen,screen_record),并在 "plugin_info.json" 中做相应配置。
比如你希望修改 web 中 screen.py 文件:
{local_path} 为本地路径,"ns"为包名,注意包名的唯一性(以上包名只是例子不做强制限制)
内部增强包
对于团队内部通用的自定义功能,可以考虑创建一个 extend package,Flybirds 支持动态加载,package 命名包含“-flybirds-plugin”即可。 携程机票内部,针对 DevOps 的各类工具,增强包中都进行了对接,安装后就可以使用。
持续集成
cli 提供的命令行执行模式,可以非常方便加入各种持续集成工具.
以 Jenkins 为例:
发版计划
我们将按照 SemVer 版本控制规范进行发版。逐步新增功能和代码优化,非常欢迎您加入到我们的共建计划中,在 GitHub 上提出您的宝贵建议,以及在使用时遇到的一切问题,我们也会对此每周进行一次小版本的迭代。您也可以在这里给我们精神支持,点上一颗 Star。
参考链接
GitHub 地址:https://github.com/ctripcorp/flybirds
PyPI 地址:https://pypi.org/project/flybirds
Pages:https://ctripcorp.github.io/flybirds/
PlayWright: https://github.com/microsoft/playwright-python
Airtest: https://github.com/AirtestProject/Airtest
Behave: https://github.com/behave/behave
欢迎在 GitHub issues 和Discussions区提问
支持邮箱:flybirds_support@trip.com
版权声明: 本文为 InfoQ 作者【liang chen】的原创文章。
原文链接:【http://xie.infoq.cn/article/4df41f5d2cb011c89ea5bbb20】。文章转载请联系作者。
评论