移动端UI自动化过程中的难点及应对策略

简介: 在之前的文章《自动化质量评估维度》中,我们探讨了衡量自动化稳定性的误报率指标,今天重点针对移动端UI自动化过程中导致误报的几个难点进行展开分析并给出相应的解决方案。

被测应用不稳定


问题1:自动化测试介入时机太早

对于移动应用来说,我们需要准确把握介入时机,不要在项目早期介入UI自动化测试,应该等版本相对比较稳定成熟后再开展UI自动化测试,不然每次业务UI变更带来的自动化用例维护成本会非常高。


问题2:自动化用例设计及选择不合理

在确定要开始做UI自动化测试后,需要先拆解手工测试用例,因为大多数的测试用例都是基于手工测试编写的,在自动化环境下,在流程编排和结果校验方式上需要做适当调整,并且在拆解过程中要优先实现核心模块较稳定的测试用例,因为不稳定的测试用例会给后期的维护和排查问题带来巨大的成本。


问题3:被测应用Debug调试信息阻断测试执行

为了提高研发调试效率,通常移动APP都会在Debug模式下提供很多方便调试用的工具集,比如leakcanary、内存信息Toast等,这些内容在UI自动化过程中反而成了影响稳定性的一个比较大的因素,比如因为leakcanary工作时dump内存导致页面卡顿从而影响执行的稳定性。


对此我们可以增加打包参数通过自定义打包服务来去除Debug相关的工具集,如果有些Debug信息无法提供开关控制,我们可以通过从master上开一个新的分支然后修改源码,每次去rebase主干的方式来关掉相应的Debug调试信息。


有人可能会问干嘛不直接用Release包,主要是因为Release包一般会存在证书信任问题导致无法使用Mock Server。


测试框架不稳定


这里我是基于Appium去做的UI自动化,所以下面有些策略仅适用于Appium。


问题1:手机连接会出现Offline的情况

针对这种情况我们可以通过在每次任务开始前Reset USB来彻底解决,参考:

https://chromium.googlesource.com/chromium/src/build/+/293b55887f2f0bcc9e2ed66b24bc6a2b62bbd556/android/devil/utils/reset_usb.py?spm=ata.13261165.0.0.366044cdRdK3m7&file=reset_usb.py

问题2:An unknown server-side error occurred while processing the command. Original error: Could not proxy command to remote server. Original error: Error: read ECONNRESET

遇到这种问题时,建议在执行测试前重置Appium的Agent,也就是删掉下面跟Appium有关的应用,让Appium重新自动安装:

adb uninstall io.appium.uiautomator2.server
adb uninstall io.appium.uiautomator2.server.test
adb uninstall io.appium.unlock
adb uninstall io.appium.settings

问题3:WIFI断开及连到其他WIFI的情况

针对这种情况,我们可以自己开发手机Agent应用来控制连接指定WIFI并且在断开连接后自动重连,具体实现我会在后续文章中讲解。


问题4:应用通知栏信息打断测试执行

在自动化测试执行过程中经常会由于其他应用或者本应用的通知弹框阻断测试的执行,对此我们需要禁用通知栏来避免此类问题的发生,具体实现我会在后续文章中讲解


问题5:Appium并行测试不稳定

在基于Appium做并行自动化测试的过程中会在一台宿主机上同时监听多个端口,这时我们可以通过官方提供的appium-docker-android来为每个设备提供相对独立的测试环境,具体实现我会在后续文章中讲解

https://github.com/appium/appium-docker-android

问题6:由于随机的页面延迟造成的控件识别失败

我们可以首先通过隐式等待增加Appium服务端的超时时间,其次通过增加重试机制来避免,重试可以是步骤级别的比如显示等待,也可以是页面级别的,甚至可以是业务流程级别的。


问题7:非预期的弹出对话框

这里包括系统弹框和应用内业务弹框,针对系统弹框,我们可以通过无障碍服务来实现智能点击处理,对于应用内业务弹框,如果是可以通过接口控制的,我们可以Mock掉这个接口,否则我们可以通过watch机制来解决,具体实现我会在后续文章中讲解。


问题8:页面控件属性的细微变化导致识别失败

对于有明确ID的控件可以用ID来直接定位,对于没有ID的控件建议可以通过XPATH模糊匹配来定位,或者可以通过封装组合属性查找来定位,这样可以进一步提高控件的识别率,具体实现我会在后续文章中讲解。


测试脚本不稳定



问题1:缺少等待时间导致断言失败

可以加入一些判断条件,确保页面加载完成再进行UI操作,另外尽量使用逻辑验证,减少数据验证,数据验证更适合接口测试。


问题2:缓存问题

有些case在修改配置后,需要应用冷启动才能生效,我们可以在执行前清除应用缓存数据。


问题3:控件查找超时

Appium默认情况下每个执行请求都有超时时间包括查找控件,有时候由于设备性能太差导致执行时间过长,从而导致Appium Server断开连接,这时需要通过修改Appium Capabilities中的newCommandTimeout字段的值来增加超时时间或者更好新一点的设备。


问题4:手机屏幕分辨率问题

由于测试设备品牌型号各异,我们写自动化脚本的过程中需要针对不同机型做适当的适配,比如曲面屏、全面屏等。


测试环境不稳定


问题1:动态类的数据导致页面总是变化

有些非工具型应用,会有很多AI推荐类的信息流,这时我们可以借助Mock来提供稳定的数据环境。


问题2:测试账号被修改

可以通过账号保护服务或者在测试执行前通过接口重置账号状态来解决自动化测试账号被滥用更改的情况,另外我们自动化测试脚本中可能会有涉及测试账号状态操作的Case,这时候最好给这个模块提供独立的自动化测试账号,做隔离避免互相干扰。


问题3:测试账号被风控

我们的测试账号在使用过程中经常会由于中了风控的策略弹出各种验证码弹框,导致测试执行失败,这时我们需要将自动化测试账号加到白名单中来避免,另外还要注意白名单的有效期,最好可以申请时间长一点或者提供到期提醒避免再次被风控拦截。


问题4:网络环境不稳定

有时候在办公网环境下做自动化会遇到AP连接数太多导致自动化设备的网络出现抖动,这时我们可以通过增加独立AP的方式来解决。


问题5:代理IP变更

如果我们使用了MockServer,经常会由于MockServer的IP地址变更导致测试执行失败,一般情况下代理都是我们手工配置在手机的WIFI设置中的,针对这种情况我们需要动态更改设备代理信息,具体实现可以参考《Android自动化中动态设置网络代理》。

相关文章
|
11天前
|
敏捷开发 人工智能 Devops
探索自动化测试的高效策略与实践###
当今软件开发生命周期中,自动化测试已成为提升效率、保障质量的关键工具。本文深入剖析了自动化测试的核心价值,探讨了一系列高效策略,包括选择合适的自动化框架、设计可维护的测试脚本、集成持续集成/持续部署(CI/CD)流程,以及有效管理和维护测试用例库。通过具体案例分析,揭示了这些策略在实际应用中的成效,为软件测试人员提供了宝贵的经验分享和实践指导。 ###
|
11天前
|
人工智能 前端开发 测试技术
探索软件测试中的自动化框架选择与优化策略####
本文深入剖析了当前主流的自动化测试框架,通过对比分析各自的优势、局限性及适用场景,为读者提供了一套系统性的选择与优化指南。文章首先概述了自动化测试的重要性及其在软件开发生命周期中的位置,接着逐一探讨了Selenium、Appium、Cypress等热门框架的特点,并通过实际案例展示了如何根据项目需求灵活选用与配置框架,以提升测试效率和质量。最后,文章还分享了若干最佳实践和未来趋势预测,旨在帮助测试工程师更好地应对复杂多变的测试环境。 ####
36 4
|
16天前
|
机器学习/深度学习 前端开发 测试技术
探索软件测试中的自动化测试框架选择与优化策略####
本文深入探讨了在当前软件开发生命周期中,自动化测试框架的选择对于提升测试效率、保障产品质量的重要性。通过分析市场上主流的自动化测试工具,如Selenium、Appium、Jest等,结合具体项目需求,提出了一套系统化的选型与优化策略。文章首先概述了自动化测试的基本原理及其在现代软件开发中的角色变迁,随后详细对比了各主流框架的功能特点、适用场景及优缺点,最后基于实际案例,阐述了如何根据项目特性量身定制自动化测试解决方案,并给出了持续集成/持续部署(CI/CD)环境下的最佳实践建议。 --- ####
|
17天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
63 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
14天前
|
测试技术 持续交付 Docker
探索软件测试中的自动化策略与挑战
在当今快节奏的软件开发周期中,自动化测试已成为提高产品质量和缩短上市时间的关键。然而,实施有效的自动化测试策略并非易事,它面临着技术选型、脚本维护、环境配置等一系列挑战。本文深入探讨了自动化测试的重要性,分析了常见的自动化测试工具和框架,并讨论了在构建和维护自动化测试体系过程中遇到的主要难题及其解决方案。通过案例分析,本文旨在为软件测试工程师提供实用的指导和建议,以优化他们的自动化测试实践。
|
18天前
|
jenkins 测试技术 持续交付
软件测试中的自动化测试策略
在当今快速发展的软件行业中,自动化测试已成为确保软件质量和效率的关键工具。本文将探讨自动化测试的重要性、实施策略以及面临的挑战,旨在为软件开发团队提供实用的指导和建议。
|
21天前
|
数据采集 Web App开发 JavaScript
爬虫策略规避:Python爬虫的浏览器自动化
爬虫策略规避:Python爬虫的浏览器自动化
|
18天前
|
测试技术 持续交付
软件测试中的自动化测试策略与最佳实践
【10月更文挑战第31天】 在当今快速迭代的软件开发环境中,自动化测试成为确保软件质量和加速产品上市的关键。本文探讨了自动化测试的重要性、实施策略以及一些最佳实践。通过分析不同类型的自动化测试工具和框架,本文旨在为软件开发团队提供一套实用的指导方案,以提高测试效率和质量。
|
1月前
|
JavaScript 前端开发 测试技术
精通Selenium:从基础到高级的网页自动化测试策略
【10月更文挑战第6天】随着Web应用变得越来越复杂,手动进行功能和兼容性测试变得既耗时又容易出错。自动化测试因此成为了现代软件开发不可或缺的一部分。Selenium是一个强大的工具集,它支持多种编程语言(包括Python),允许开发者编写脚本来模拟用户与Web页面的交互。本文将带领读者从Selenium的基础知识出发,逐步深入到高级的应用场景,通过丰富的代码示例来展示如何高效地进行网页自动化测试。
323 5
|
1月前
|
测试技术 持续交付 数据安全/隐私保护
软件测试中的自动化策略:提升效率与准确性
【10月更文挑战第2天】本文深入探讨了软件测试自动化的重要性,并提供了实用的自动化测试策略。文章首先概述了自动化测试的优势,然后详细解释了如何设计有效的测试用例和选择恰当的自动化工具。通过实例演示,我们展示了如何在软件开发周期中整合自动化测试,以提高产品质量和开发效率。最后,文章讨论了自动化测试面临的挑战及应对策略,为读者提供了一套完整的解决方案。
下一篇
无影云桌面