IM场景的移动端UI自动化测试平台实践

简介: 市面上的UI自动化平台基本上都是大同小异,把查找元素的方法抽象到一个下拉列表,再通过输入框输入要查找元素ID,查到到元素对应做一些动作。今天以opendx为例介绍一下UI自动化平台能力(它的页面和架构相对更人性化)。

image.png


在公司做了两三年IM平台开发,基本上把IM的所有能力都搭建齐全了:单聊、群聊、文本消息、语音消息、视频消息、卡片消息、音视频通话等,而且把整个聊天页面各个区域都开放了出去。整个IM系统的框架以及开发流程都规范了下来,但是唯独在自动化测试领域有所欠缺,在有故障发生复盘的过程中,想到通过UI自动化帮助我们解决一些痛点问题。同时呢,接入UI自动化对我们在涉及底层改动,以及涉及兼容性的功能点时,可以为我们做一层兜底。总结下来我们在整个IM系统的开发过程中面临以下几个问题:


  1. 某些改动开发人员难以对改动内容评估到位;
  2. 设计兼容性问题需求难以做出决策:比如在做基于系统TTS的Push内容语音播报过程中由于摸不清市面上哪些手机系统不支持中文TTS,无法做决策,自己找手机一个一个测试效率有太低,这个时候特别需要这么一个自动化的平台;
  3. 基础库变更影响面大:比如要替换统一的网络库,有一百个接口涉及到了改动,对应到功能上可能是几百个功能点,对于QA的测试成本太高;
  4. 封板前后case回归量大:IM系统做了几年的需求迭代,case数量已经相当庞大,每次发包前的功能回归工作量巨大;
  5. 新APP内IM质量难以保证:团队内QA只负责公司主要APP内的IM功能,新APP接入IM后,IM模块属于”三不管“区域,有些必现问题会被直接带到线上。


1. 移动端UI自动化行业现状


UI自动化测试一直是整个移动端的难题,因为它面临下面问题:


  1. UI变更频繁,Case维护成本高;
  2. Case覆盖率低,性价比差;
  3. 元素查找方式不稳定;
  4. case执行结果分析困难,元素对比方式欠缺(尤其图片元素)。


我们市面上常用的移动端UI自动化测试工具主要有:


  • Android:UIAutomator
  • iOS:UIAutomation
  • 跨平台封装:Appium


日常UI自动化测试的方式主要有:


  1. 纯代码编写Case:缺点是对Case编写人员要求较高,Case编写效率低下;
  2. 平台化工具:通过UI页面输入元素ID等变量,自动生成代码,缺点时平台开发成本以及平台学习成本;
  3. 手机操作录制方式:手动操作手机,自动记录操作过程中点击的元素等,通过回放方式执行case。缺点是稳定性太差,尤其列表内随便一个顺序的变化都可能导致Case执行不成功。


基于纯代码与录制方式的劣势,我们选择UI自动化平台方案。


2. UI自动化平台介绍


市面上的UI自动化平台基本上都是大同小异,把查找元素的方法抽象到一个下拉列表,再通过输入框输入要查找元素ID,查到到元素对应做一些动作。今天以opendx为例介绍一下UI自动化平台能力(它的页面和架构相对更人性化)。


2.1 操作界面


可以先选择一款调试设备,用于在网页内直接查找元素和调试case:


image.png


提供了一系列常用的基础Case:


image.png


选择执行动作并填入参数值:


image.png


2.2 平台系统架构


如下图所示,整个系统分了两大模块:Server与Agent。


  • Server负责与数据库交互,提供供浏览器访问的网页内容,并管理Agent;
  • Agent连接负责执行Case的手机,每个Agent都跑着一个Appium服务,浏览器通过与Agent的长连接,可以直接调试Case。


这样设计的好处了,大家可以共用一个库,一个服务,然后各自在各自的机器运行Agent,达到并行执行效果。


image.png

image.png


2.3 数据库表设计


这个系统包含下列数据库表:


image.png


有用户管理,设备管理,项目管理的概念,除了这些主要就是action以及测试任务,测试集,测试计划的概念。action可以理解成是一个具体case,一个action又可以是多个基础action组成。一系列action组成测试集,测试集可以组合成测试计划,某个测试计划生成对应的一个个测试任务。


下面是具体的action表结构:


image.png


我们可以把action看成是我们用代码执行测试case时的测试函数,有函数名,函数返回值,函数参数等。


总结成下列流程:


image.png


生成对应代码示例:


image.png


下面是系统系统了的基础的action:


  1. 执行Java代码;
  2. 休眠;
  3. 下载文件;
  4. 删除文件;
  5. 点击;
  6. 查找元素;
  7. 查找元素列表;
  8. 输入;
  9. 设置隐式等待时间;
  10. 等待元素可见;
  11. 等待元素出现;
  12. [web]访问url;
  13. [web]切换窗口;
  14. [web]点击(By JS);
  15. 元素是否显示;
  16. 等待元素可见;
  17. 获取当前时间;
  18. accept对话框;
  19. 异步accept对话框;
  20. dismiss对话框;
  21. 异步dismiss对话框;
  22. 安装app;
  23. 卸载app;
  24. 滑动屏幕;
  25. 滑动屏幕查找元素;
  26. 容器内滑动;
  27. 容器内滑动查找元素;
  28. 长按元素;
  29. 清楚apk数据;
  30. 启动/重启app;
  31. 执行adb shell命令;
  32. 窗口最大化


##3. IM UI自动化挑战


市面上的所有的UI自动化平台均面临一个问题:只能对单个手机进行测试,但是IM场景有些Case至少需要两个手机:一个用于发送消息,另一个用于接收消息,当用户A发送消息成功,并且用户B接收消息成功才能算一个完整的Case。


不过好消息是IM的页面在迭代工程中改动较少,这样大大降低了IM场景UI自动化的Case维护成本。


至于元素比较,结果校验我们可以通过接入一些基于AI的智能方案来解决。


4. IM UI自动化测试解决方案


基于opendx的能力,我们提供在Action结构中加入设备列,标识该Action是在哪个设备执行。这样就可以完美解决平台化无法支持多个设备的问题。


我们可以将设备在平台上定义为全局变量,这样每次执行case的时候可以通过修改全局变量来变更设备。


5. 总结


今天介绍了移动端UI自动化测试的一些方案和问题,以及UI自动化平台在IM场景的解决方案。现阶段还是在平台搭建阶段,首先我们要基于opendx提供提供一些符合我们业务场景的基础Action,比如:


  1. 网络请求action:我们可以在action端执行http请求,验证消息是否到达服务端或者解决常见的登录注册问题,登录需要验证码的时候我们一般无法自动获取验证码,这次我们通过服务端暴露的接口来请求获取验证码;
  2. 支持条件语句:比如判断某个执行结果,如果符合预期则指令A Action, 不符合则执行B Case。


平台搭建成功后我们优先覆盖50%的核心Case,比如:


  1. 发送/接收各种类型消息
  2. 会话列表显示点击
  3. 会话详情页吸顶条
  4. 会话详情页加号配置
  5. 各类型消息点击
  6. 各类型消息长按
  7. 消息未读已读


后续再看了边界Case,比如点击卡片跳转某个业务页面;最后再重点解决特殊Case,比如音视频通话。

目录
相关文章
|
27天前
|
前端开发 编解码 数据格式
浅谈响应式编程在企业级前端应用 UI 开发中的实践
浅谈响应式编程在企业级前端应用 UI 开发中的实践
22 0
浅谈响应式编程在企业级前端应用 UI 开发中的实践
|
29天前
|
安全 Linux 测试技术
提升龙蜥内核测试能力!探究持续性模糊测试优化实践
清华大学软件学院对Anolis OS使用靶向模糊测试方法将测试工作引向修改的代码,进而提高对业务代码的测试能力。
|
1天前
|
敏捷开发 设计模式 Devops
深入探索自动化测试框架的设计原则与实践
【4月更文挑战第29天】在追求软件开发效率和质量的当下,自动化测试成为确保软件可靠性的关键步骤。本文旨在剖析构建高效自动化测试框架的设计原则,并通过具体实例展示如何在实际项目中应用这些原则以提高测试效率和准确性。文章首先介绍了自动化测试的重要性及其对持续集成/持续部署(CI/CD)流程的贡献,随后详细探讨了模块化、可扩展性、易用性和可维护性四个核心设计原则。最后,通过一个案例研究,演示了如何将这些原则融入到自动化测试框架的构建中,以及实施后的效果评估。
10 1
|
3天前
|
jenkins 测试技术 持续交付
深入探索软件测试中的持续集成与自动化测试实践
【4月更文挑战第27天】 在当今软件开发的快速迭代过程中,持续集成(CI)和自动化测试已成为确保代码质量和加快交付速度的关键因素。本文将探讨如何通过实施持续集成流程,并结合自动化测试策略来优化软件测试工作。我们将分析持续集成的原理、自动化测试的最佳实践以及如何将这些方法应用于实际项目中,旨在为读者提供一套完整的解决方案,以提高软件项目的效率和质量。
11 3
|
3天前
|
Web App开发 IDE 测试技术
深入理解自动化测试框架Selenium的设计与实践
【4月更文挑战第27天】在软件开发周期中,确保代码质量和功能正确性至关重要。随着敏捷开发的普及和持续集成/持续部署(CI/CD)的实践,自动化测试已成为现代开发工作流程的核心部分。本文将探讨一个广泛使用的开源自动化测试工具——Selenium,并剖析其设计原理、架构以及在实际中的应用。我们将通过具体案例分析,展示如何有效利用Selenium进行跨浏览器测试,并讨论在真实环境中可能遇到的挑战及解决方案。
|
5天前
|
敏捷开发 Devops 测试技术
深入理解自动化测试框架设计原则与实践
【4月更文挑战第25天】在快速演变的软件行业中,自动化测试已成为持续集成和交付过程中不可或缺的一环。本文旨在探讨构建高效自动化测试框架的设计原则,并通过实际案例分析如何在实践中应用这些原则以提高测试效率和可靠性。通过深入剖析自动化测试框架的核心组件、架构设计和最佳实践,读者将获得构建和维护健壮自动化测试系统的深刻见解。
3 0
|
7天前
|
测试技术 持续交付 API
Python的UI自动化测试
【4月更文挑战第17天】Python UI自动化测试涉及Selenium(Web)、Appium(移动应用)和PyQt(桌面应用)等框架。基本步骤包括确定测试目标、选择合适框架、安装配置、编写测试脚本、运行调试以及集成到CI/CD流程。注意自动化测试不能完全取代人工测试,应根据需求平衡使用。
8 1
|
14天前
|
敏捷开发 监控 前端开发
深入理解自动化测试框架Selenium的架构与实践
【4月更文挑战第16天】 在现代软件开发过程中,自动化测试已成为确保产品质量和加快迭代速度的关键手段。Selenium作为一种广泛使用的自动化测试工具,其开源、跨平台的特性使得它成为业界的首选之一。本文旨在剖析Selenium的核心架构,并结合实际案例探讨其在复杂Web应用测试中的高效实践方法。通过详细解读Selenium组件间的交互机制以及如何优化测试脚本,我们希望为读者提供深入理解Selenium并有效运用于日常测试工作的参考。
|
15天前
|
自然语言处理 测试技术 API
深入理解自动化测试框架Selenium的设计理念与实践
【4月更文挑战第15天】 在现代软件开发过程中,自动化测试已成为确保产品质量和加速迭代的关键手段。Selenium作为一种广泛使用的自动化测试框架,提供了对多种浏览器和平台的支持,极大地促进了Web应用的功能测试。本文旨在剖析Selenium的核心设计理念,探讨其在实际项目中的应用,并指出常见的误区及最佳实践,以期帮助测试工程师更高效地利用Selenium进行测试工作。
|
23天前
|
安全 测试技术
深入理解白盒测试:方法、工具与实践
【4月更文挑战第7天】 在软件开发的质量控制过程中,白盒测试是确保代码逻辑正确性的关键步骤。不同于黑盒测试关注于功能和系统的外部行为,白盒测试深入到程序内部,检验程序结构和内部逻辑的正确性。本文将探讨白盒测试的核心技术,包括控制流测试、数据流测试以及静态分析等方法,同时介绍当前流行的白盒测试工具,并讨论如何在实际项目中有效实施白盒测试。文章的目标是为软件测试工程师提供一份综合性指南,帮助他们更好地理解和应用白盒测试技术。