1 背景

APP端UI自动化因其特殊性(需连接测试机)一般都在本地执行,这种执行方式的局限性有以下弊端:

  1. 时效性低:研发每次打包后都需要通知测试,测试再去打包平台取包,存在时间差
  2. 研发自测或产品验收无法使用自动化脚本:研发自测及产品验收时如果想用自动化脚本需要搭建相应的运行环境并准备测试机,繁琐的步骤导致研发/产品放弃使用自动化。而手工验证的过程中经常需要测试协助下单、改数据,效率低
  3. 本地执行的结果没有持久化存储,不利于进行结果度量

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 待解决问题

  1. 接入coding平台,只支持airtest框架

    影响:需要对原框架进行改动,成本较高。与赛博平台负责产品沟通过,赛博平台后期会开发对接其他框架的功能。
  2. 手动配置的数据比较多:模块、用例、用例集

    影响:除了测试脚本外还需单独配置模块、用例、用例集,人工成本较高。后需可考虑coding平台代码合并后触发定时任务自动生成对应的模块、用例、用例集。
  3. 无法指定机型

    影响:无法指定机型进行兼容性测试,与赛博平台分则产品沟通过,暂未有计划修改此项。
  4. 京管家未接入线上打包平台

    影响:测试过程中需要本地保留apk包,占本地内存且容易混淆;无法进行版本管理,需要复现问题时不能及时提供历史版本;UED走查或产品验收时只能京ME联系研发取包,时效性差;无法接入流水线。

6 预期收益

流水线不仅解决了环境配置及测试机不足的问题还有以下优势:

  1. 学习成本低,操作简单,预计可节省三分之二的工时
  2. 执行结果可以做持久化存储,后期可与自动化度量平台相结合进行数据分析
  3. 流水线中可加入Sunglasses原子,UI自动化测试过程中监控Flutter异常
  4. 线上版本可做日常化监控,及时发现问题

作者:京东物流 范文君

来源:京东云开发者社区 自猿其说Tech

APP流水线测试领域探索与最佳实践的更多相关文章

  1. 基于ABP落地领域驱动设计-02.聚合和聚合根的最佳实践和原则

    目录 前言 聚合 聚合和聚合根原则 包含业务原则 单个单元原则 事务边界原则 可序列化原则 聚合和聚合根最佳实践 只通过ID引用其他聚合 用于 EF Core 和 关系型数据库 保持聚合根足够小 聚合 ...

  2. 验证Kubernetes YAML的最佳实践和策略

    本文来自Rancher Labs Kubernetes工作负载最常见的定义是YAML格式的文件.使用YAML所面临的挑战之一是,它相当难以表达manifest文件之间的约束或关系. 如果你想检查所有部 ...

  3. Kubernetes YAML最佳实践和策略

    Kubernetes工作负载最常用YAML格式的文件来定义. YAML的问题之一就是很难描述清单文件之间的约束或关系. 如果你希望检查是否已从受信任的注册表中提取部署到群集中的所有映像,该怎么办? 如 ...

  4. 8102 年的现代 Web 开发最佳实践(笑)

    简评:8102 年了,现在 web 开发的最佳实践是什么,让本文来告诉你.原文只提到一部分,可以查看 reddit 上对此文的评论查看补充的最佳实践 https://old.reddit.com/r/ ...

  5. Java单例模式的最佳实践?

    "读过书,--我便考你一考.茴香豆的茴字,怎样写的?"--鲁迅<孔乙己> 0x00 大纲 目录 0x00 大纲 0x01 前言 0x02 单例的正确性 new关键字 c ...

  6. 腾讯优测优分享 | 探索react native首屏渲染最佳实践

    腾讯优测是专业的移动云测试平台,旗下的优分享不定时提供大量移动研发及测试相关的干货~ 此文主要与以下内容相关,希望对大家有帮助. react native给了我们使用javascript开发原生app ...

  7. 探索react native首屏渲染最佳实践

    文 / 腾讯 龚麒 0.前言 react native给了我们使用javascript开发原生app的能力,在使用react native完成兴趣部落安卓端发现tab改造后,我们开始对由react n ...

  8. 移动App測试实战:顶级互联网企业软件測试和质量提升最佳实践

    这篇是计算机类的优质预售推荐>>>><移动App測试实战:顶级互联网企业软件測试和质量提升最佳实践> 国内顶级互联网公司測试实战经验总结.阿里.腾讯.京东.携程.百 ...

  9. CODING DevOps 线下沙龙回顾二:SDK 测试最佳实践

    讲师:潘志刚 声网质量效能部门负责人,超过 14 年服务器.移动终端.音视频编解码以及汽车电子等跨行业从业经历,负责建立测试基础架构和自动化测试方案,主持搭建持续集成测试生态体系.现任声网质量效能部门 ...

  10. 一触即发 App启动优化最佳实践

    一触即发 App启动优化最佳实践 本文在 DiyCode 和 CSDN个人博客 同时首发,关注作者的 DiyCode帐号 或者 作者微博 可第一时间收到新文章推送. 文中的很多图都是Google性能优 ...

随机推荐

  1. c++基本数据结构

    基本数据结构: 一.线性表 1.顺序结构 线性表可以用普通的一维数组存储. 你可以让线性表可以完成以下操作(代码实现很简单,这里不再赘述): 返回元素个数. 判断线性表是否为空. 得到位置为p的元素. ...

  2. pyinstaller打包python程序

    pyinstaller打包python程序 1.pyinstaller安装 安装命令: #升级pip版本 >>> pip install -U pip #安装pyinstaller ...

  3. 【能力提升】SQL Server常见问题介绍及快速解决建议

    前言 本文旨在帮助SQL Server数据库的使用人员了解常见的问题,及快速解决这些问题.这些问题是数据库的常规管理问题,对于很多对数据库没有深入了解的朋友提供一个大概的常见问题框架. 下面一些问题是 ...

  4. awk判断整除(包含小数和负数)

    awk判断整除常用的方法是用内置的int或者求余数的算符% 被整数整除 输出0-100之间能被9整除的整数 使用 num/9==int(num/9) 的判断方法可以很好实现. awk 'BEGIN{ ...

  5. 用C#发送post请求,实现更改B站直播间标题[简单随笔]

    第一次发这样的网络数据包.记录一下. API参考 https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/live/man ...

  6. Python + 超级鹰 识别图形验证码

    前言: 一.下载 1.进入官网:http://www.chaojiying.com/,注册完成后,进行登录 2.点击开发文档,点击Python语言示例 3.进行示例下载 4.解压后的文件 注:关注公众 ...

  7. 面试精灵:Java后端靠谱、强大的面试题网站(稳拿offer)

    ​面试精灵:一个给力的Java后端面试题网站. 网址:https://offer.skyofit.com 这套题真实.高频.全面.有详细答案.保你稳过面试,让你成为offer收割机.题目包括:Java ...

  8. vue项目使用rem布局刷新页面瞬间元素尺寸由小变大,页面闪现错乱样式

    vue项目使用px2remLoader插件,在index.html自定义设置font-size的大小,尤其是在首屏加载的时候,会出现页面各个元素尺寸由小变大的一个过程,很难看 刚开始一直在想是不是因为 ...

  9. Vue 全局避免按钮重复点击

    这里用到的 Vue.directive 自定义指令 自定义指令是对普通DOM元素进行的底层操作,它是一种有效的的补充和扩展,不仅可以用于定义任何的dom操作,并且是可以复用的 在 main.js 中写 ...

  10. Abp Vnext 动态(静态)API客户端源码解析

    根据以往的经验,通过接口远程调用服务的原理大致如下: 服务端:根据接口定义方法的签名生成路由,并暴露Api. 客户端:根据接口定义方法的签名生成请求,通过HTTPClient调用. 这种经验可以用来理 ...