APP流水线测试领域探索与最佳实践
1 背景
APP端UI自动化因其特殊性(需连接测试机)一般都在本地执行,这种执行方式的局限性有以下弊端:
- 时效性低:研发每次打包后都需要通知测试,测试再去打包平台取包,存在时间差
- 研发自测或产品验收无法使用自动化脚本:研发自测及产品验收时如果想用自动化脚本需要搭建相应的运行环境并准备测试机,繁琐的步骤导致研发/产品放弃使用自动化。而手工验证的过程中经常需要测试协助下单、改数据,效率低
- 本地执行的结果没有持久化存储,不利于进行结果度量
2 方案分析
为解决以上问题需要搭建流水线,CI/CD领域常用的流水线平台非Jenkins莫属,Jenkins功能强大、可二次开发,但执行APP自动化需要windows执行机、模拟器/真机,这些要求无疑增加了测试成本。与之相比,Bamboo平台是基于Jenkins开发的流水线平台,不仅继承了Jenkins的众多功能,且支持图形化配置,并对接了赛博平台等其他平台。
从下图对比中可以看出,复用现有的Bamboo平台成本更低,同时需要做以下改变:一、自动化框架需要改为airtest框架;二、需要对测试报告进行处理以符合预期。
3 方案实施
架构图:
流程图:
执行结果:
4 执行过程中遇到的问题及解决方案
1.bamboo打debug包成,release包不成功
解决:证书管理中上传 sign.properties 文件,该文件中去掉绝对路径信息,使用相对路径
2.赛博平台无法输入汉字
解决:用poco().set_text()替代text()方法
3.跑脚本失败提示 RuntimeError: unable to launch AndroidUiautomationPoco
解决:赛博的机器有ATX,会影响poco初始化。poco初始化前加代码:
# 停止ATX
try:
shell("am force-stop com.github.uiautomator")
shell("/data/local/tmp/atx-agent server --stop")
except Exception as e:
print("兼容非赛博机器")
5 待解决问题
- 接入coding平台,只支持airtest框架
影响:需要对原框架进行改动,成本较高。与赛博平台负责产品沟通过,赛博平台后期会开发对接其他框架的功能。 - 手动配置的数据比较多:模块、用例、用例集
影响:除了测试脚本外还需单独配置模块、用例、用例集,人工成本较高。后需可考虑coding平台代码合并后触发定时任务自动生成对应的模块、用例、用例集。 - 无法指定机型
影响:无法指定机型进行兼容性测试,与赛博平台分则产品沟通过,暂未有计划修改此项。 - 京管家未接入线上打包平台
影响:测试过程中需要本地保留apk包,占本地内存且容易混淆;无法进行版本管理,需要复现问题时不能及时提供历史版本;UED走查或产品验收时只能京ME联系研发取包,时效性差;无法接入流水线。
6 预期收益
流水线不仅解决了环境配置及测试机不足的问题还有以下优势:
- 学习成本低,操作简单,预计可节省三分之二的工时
- 执行结果可以做持久化存储,后期可与自动化度量平台相结合进行数据分析
- 流水线中可加入Sunglasses原子,UI自动化测试过程中监控Flutter异常
- 线上版本可做日常化监控,及时发现问题
作者:京东物流 范文君
来源:京东云开发者社区 自猿其说Tech
APP流水线测试领域探索与最佳实践的更多相关文章
- 基于ABP落地领域驱动设计-02.聚合和聚合根的最佳实践和原则
目录 前言 聚合 聚合和聚合根原则 包含业务原则 单个单元原则 事务边界原则 可序列化原则 聚合和聚合根最佳实践 只通过ID引用其他聚合 用于 EF Core 和 关系型数据库 保持聚合根足够小 聚合 ...
- 验证Kubernetes YAML的最佳实践和策略
本文来自Rancher Labs Kubernetes工作负载最常见的定义是YAML格式的文件.使用YAML所面临的挑战之一是,它相当难以表达manifest文件之间的约束或关系. 如果你想检查所有部 ...
- Kubernetes YAML最佳实践和策略
Kubernetes工作负载最常用YAML格式的文件来定义. YAML的问题之一就是很难描述清单文件之间的约束或关系. 如果你希望检查是否已从受信任的注册表中提取部署到群集中的所有映像,该怎么办? 如 ...
- 8102 年的现代 Web 开发最佳实践(笑)
简评:8102 年了,现在 web 开发的最佳实践是什么,让本文来告诉你.原文只提到一部分,可以查看 reddit 上对此文的评论查看补充的最佳实践 https://old.reddit.com/r/ ...
- Java单例模式的最佳实践?
"读过书,--我便考你一考.茴香豆的茴字,怎样写的?"--鲁迅<孔乙己> 0x00 大纲 目录 0x00 大纲 0x01 前言 0x02 单例的正确性 new关键字 c ...
- 腾讯优测优分享 | 探索react native首屏渲染最佳实践
腾讯优测是专业的移动云测试平台,旗下的优分享不定时提供大量移动研发及测试相关的干货~ 此文主要与以下内容相关,希望对大家有帮助. react native给了我们使用javascript开发原生app ...
- 探索react native首屏渲染最佳实践
文 / 腾讯 龚麒 0.前言 react native给了我们使用javascript开发原生app的能力,在使用react native完成兴趣部落安卓端发现tab改造后,我们开始对由react n ...
- 移动App測试实战:顶级互联网企业软件測试和质量提升最佳实践
这篇是计算机类的优质预售推荐>>>><移动App測试实战:顶级互联网企业软件測试和质量提升最佳实践> 国内顶级互联网公司測试实战经验总结.阿里.腾讯.京东.携程.百 ...
- CODING DevOps 线下沙龙回顾二:SDK 测试最佳实践
讲师:潘志刚 声网质量效能部门负责人,超过 14 年服务器.移动终端.音视频编解码以及汽车电子等跨行业从业经历,负责建立测试基础架构和自动化测试方案,主持搭建持续集成测试生态体系.现任声网质量效能部门 ...
- 一触即发 App启动优化最佳实践
一触即发 App启动优化最佳实践 本文在 DiyCode 和 CSDN个人博客 同时首发,关注作者的 DiyCode帐号 或者 作者微博 可第一时间收到新文章推送. 文中的很多图都是Google性能优 ...
随机推荐
- Spring Initailizr(项目初始化向导)
本地创建 官网创建版 在Spring官网https://start.spring.io/ 中选择 此时这个项目以压缩包形式下载到本地文件中,然后解压,导入IDEA中 阿里start创建 如果国外的网址 ...
- 五月二十五日jdbc基础知识点
Jdbc连接数据库1.建立与数据库的连接1.1导入jdbc包1.2加载JDBC驱动java.lang.Class.forName(JDBCDriverClass);Class.forName(driv ...
- 补五月三号java基础知识
1.泛型技术可以通过一种类型或方法操纵各种不同类型的对象,同时又提供了编译时的类型安全保证.2.容器(即集合)是以类库形式 提供的多种数据结构,用户在编程时可直接使用3.泛型其实质就是将数据的类型参数 ...
- [Pytorch框架] PyTorch 中文手册
PyTorch 中文手册 书籍介绍 这是一本开源的书籍,目标是帮助那些希望和使用PyTorch进行深度学习开发和研究的朋友快速入门. 由于本人水平有限,在写此教程的时候参考了一些网上的资料,在这里对他 ...
- P1008 [NOIP1998 普及组] 三连击,置顶题解的问题
题目链接: https://www.luogu.com.cn/problem/P1008 置顶题解 暴力,加简化的判断,数学原理,2个集合内所有数相加相乘结果一样,2个集合的内容一样(没错我自己编得, ...
- Go坑:time.After可能导致的内存泄露问题分析
Go 中 time.After 可能导致的内存泄露 一.Time 包中定时器函数 go v1.20.4 定时函数:NewTicker,NewTimer 和 time.After 介绍 time 包中有 ...
- 【JS】Knockout动态刷新及绑定数据
<script> // Knockout ViewModel Define function RemarkTemplateModel() { var self = this; // Cur ...
- vue+vant项目中 rem适配配置
vant rem适配,需要安装两个插件 postcss-pxtorem 是一款 postcss 插件,用于将单位转化为 rem lib-flexible 用于设置 rem 基准值 postcss-px ...
- 基于DevExpress的GridControl实现的一些界面处理功能
DevExpress的GridControl控件能够提供很多强大的操作,其视图GridView能够通过各种设置,呈现出多种复杂的界面效果,本篇随笔探讨一些常见的GridControl控件及其GridV ...
- Python忽略NoData计算多张遥感影像的像元平均值:whitebox库
本文介绍基于Python中whitebox模块,对大量长时间序列栅格遥感影像的每一个像元进行忽略NoData值的多时序平均值求取. 在文章Python ArcPy批量计算多时相遥感影像的各像元 ...