移动端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自动化中动态设置网络代理》。

相关文章
|
29天前
|
运维 Prometheus 监控
构建高效自动化运维系统的关键策略
【2月更文挑战第30天】随着云计算和微服务架构的兴起,现代IT运维环境变得愈加复杂多变。为保持业务连续性、提高响应速度并降低成本,企业亟需构建一个高效的自动化运维系统。本文将深入探讨自动化运维系统构建过程中的关键策略,包括工具和技术选型、流程优化、监控与告警体系搭建以及持续集成/持续部署(CI/CD)实践,旨在为读者提供一个清晰的构建蓝图和实用的实施建议。
|
3月前
|
前端开发 测试技术 API
UI自动化与API自动化已经开始互斥了吗?
UI自动化与API自动化已经开始互斥了吗?
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
提升软件测试效率与质量:AI驱动的自动化测试策略
【2月更文挑战第19天】 在快速迭代的软件发展环境中,传统的手动测试方法已无法满足高效率和高质量的要求。本文探讨了人工智能(AI)技术如何革新现有的软件测试流程,通过引入AI驱动的自动化测试策略,旨在提高测试覆盖率,减少人为错误,优化资源分配,并缩短产品上市时间。我们将分析AI在识别潜在缺陷、生成测试用例、执行测试以及结果分析中的应用,并讨论实施这些策略时可能遇到的挑战和限制。
107 3
|
1月前
|
敏捷开发 测试技术 持续交付
提升软件测试效率与质量的自动化策略
【2月更文挑战第19天】 在快速迭代的软件开发周期中,传统的手动测试方法往往难以满足高效率和高质量的双重要求。本文将探讨如何通过实施自动化测试策略来优化软件测试流程,减少重复劳动,提高测试覆盖率及发现缺陷的速度。我们将分析自动化测试的关键优势,包括时间效率、一致性、可重复性以及其在持续集成环境中的作用,并讨论实施过程中面临的挑战及解决策略。
|
30天前
|
敏捷开发 分布式计算 测试技术
深入理解软件测试中的自动化框架选择与优化策略
【2月更文挑战第29天】 在软件开发的生命周期中,测试环节扮演着至关重要的角色。随着敏捷开发和持续集成的普及,自动化测试成为确保软件质量和加快产品上市速度的关键手段。本文将探讨在构建自动化测试框架时面临的挑战,分析不同类型自动化框架的特点及其适用场景,并提出一系列优化策略,旨在帮助测试工程师提高测试效率,确保测试结果的准确性。
16 0
|
25天前
|
运维 监控 持续交付
构建高效自动化运维体系:策略与实践
在数字化时代,企业IT基础设施的管理和维护变得日益复杂。为了提高效率、降低错误率并快速响应市场变化,构建一个高效的自动化运维体系至关重要。本文将探讨自动化运维的核心策略,并通过实际案例分析展示如何将这些策略应用于日常管理中,以实现IT运维的优化。
15 0
|
6天前
|
监控 jenkins 测试技术
深入探索软件自动化测试的高效策略
【4月更文挑战第13天】 随着软件开发周期的不断缩短和发布频率的增加,传统的手动测试方法已难以满足快速迭代的需求。本文将详细探讨如何通过有效的自动化测试策略提高测试效率和质量。我们将分析自动化测试中的关键要素,包括测试用例的设计、框架选择、持续集成的应用以及性能监控,并结合实际案例来展示如何构建和维护一个健壮的自动化测试系统。文中还将讨论自动化测试过程中常见的误区和挑战,为读者提供实用的解决方案和最佳实践。
|
9天前
|
机器学习/深度学习 存储 运维
构建高效自动化运维体系的五大策略
【4月更文挑战第10天】在数字化转型的浪潮中,企业IT基础设施的复杂性与日俱增,传统的手动运维模式已难以满足快速响应和高效率的需求。本文将探讨构建一个高效自动化运维体系的五大策略,包括监控与告警的智能化、配置管理自动化、故障自愈能力的提升、日志管理的优化以及持续集成和部署(CI/CD)的实践。这些策略将帮助企业减轻运维负担,提高系统稳定性和业务敏捷性。
|
18天前
|
Java 测试技术 API
软件测试中的自动化工具与策略
软件测试是确保软件质量的重要环节,而自动化测试工具和策略的应用在提高测试效率和准确性方面发挥着重要作用。本文将介绍几种常见的自动化测试工具,并探讨在软件测试中应用自动化测试的最佳实践和策略。
|
21天前
|
存储 XML 测试技术
深入理解自动化测试中的数据驱动策略
在现代软件开发周期中,自动化测试已经成为提升效率、确保质量的关键手段。本文重点探讨了数据驱动测试(DDT)策略的核心原理及其在实际测试中的应用优势。通过将测试逻辑与测试数据分离,DDT能够增强测试案例的可重用性,简化测试维护,并提高测试覆盖率。文章详细分析了如何设计数据驱动测试框架,以及如何利用该框架进行有效的测试数据管理。同时,文中还讨论了实施DDT时可能遇到的挑战和限制,并提出了一系列解决方案。

热门文章

最新文章