中国DevOps社区峰会2024·上海 CI中移动应用兼容性大规模真机验证实践 亚马逊云科技祝小伟IndustryBuilder 祝小伟 亚马逊云科技IndustryBuilder 在移动应用开发领域已有近10年的经验,尤其对Android及跨平台应用开发有着独到的见解和研究,同时在移动应用UI自动化测试结合云计算方面,持续探索更高效、更可靠的解决方案。 目录 1 2 App自动化测试 Appium介绍 3AWSDeviceFarm云真机测试 4GitHubCI中集成 5CI中移动应用测试总结 1.App自动化测试 从点击流SDK真机兼容性测试说起 点击流解决方案 SDK自动收集 数据摄入 持久化 ETL处理 数据建模 可视化报表 新功能运行 点击流SDKCI流程 PR&代码Review 代码构建Action 新需求提出 技术设计 编码 代码检查Action DemoApp手动集成测试 更新文档 自动发布Action 单元测试Action APIIntegrationTest 下载/升级 发布到AppStore 打包新版本App FAT&UAT 测试 SDK 集成/更新 点击流SDK集成测试 手动集成测试 •兼容有限的设备 •很难每次都验证所有的业务场景 •花费大量时间 IDE 安装 DemoApp环境搭建 下载JSON配置文件 导入&初始化SDK 发送Event 打包App&安装到真机 点击App触发Event 通过IDElog或查询数据库验证Event 如何在真机上自动化完成? 点击流SDK IDE 安装 DemoApp环境搭建 下载JSON配置文件 导入&初始化SDK 发送Event 打包App 安装到真机 点击App触发Event 验证事件日志 GitHubActionAWSDevice Appium pytest Farm Appium介绍 Appium介绍 AppiumInspector使用演示 Python测试脚本编写 Appium Appium旨在支持多种不同平台(移动、网页、桌面等)的UI自动化。不仅如此,它还致力于支持使用不同编程语言(JavaScript、Java、Python等)编写的自动化代码。 AppiumCore 定义核心API Drivers 实现与特定平台的连接 Clients 实现Appium支持不同语言的API Plugins 更改或扩展Appium的核心功能 Appium平台支持 平台 Driver名称 支持方 AndroidclassicalUI Uiautomator2 Appium AndroidcomposeUI Espresso Appium iOS XCUITest Appium Flutter Flutter Community Web Chromium/Gecko Appium Windows Windows Community/Microsoft MacOS Mac2 Appium Android购物App JoomiaAndroidApp AdvancedTechStack •Kotlin •JetpackComposeUI •ViewModel •LiveData •FakeStoreAPI iOS购物App AdvancedTechStack •Swift •SwiftUI •MVVM •FakeStoreAPI ModerneShoppingiOSApp 开源示例App Appium本地演示 AWSDeviceFarm云真机测试 DeviceFarm介绍 界面手动运行 CI中自动运行 DeviceFarm介绍 通过在亚马逊云服务中托管的真实移动设备及各种桌面浏览器上进行测试从而提高您的移动应用程序质量 真机测试 •自动化测试 •模糊测试 •Appium/Espresso/Robotium/XCTest •远程真机访问 DeviceFarm可用设备 平台 Android iOS 数量 93 64 厂商 Samsung,Google,LG,Xiaomi,Sony AppleiPhone6s–iPhone15 OS版本 8–14 13.5–17.5 平板支持 SamsungGalaxyTabS4-S9TabA,A7-A8 iPad7-9thiPadmini5-6th iPadPro2020-2022iPadAir2th,4th,2022 数据截止到2024/10/19 使用DeviceFarm优势 真机测试优势 •无需预置和管理任何测试基础设施 •快速使用与您客户相同的设备进行测试 •快速复现并修复问题 •提供多种语言SDK,易于与您现有的开发流程集成 价格(us-west-2) •每个账户一次性1000分钟的免费使用时长 •$0.17/设备/分钟 •$250/插槽/月 •$200/私有设备/月 AWSDeviceFarm演示 GitHubCI中集成 流程介绍 效果展示 点击流SDKGitHubCI中大规模兼容性自动化测试流程 OIDC GitHubActionDeviceFarm BuildAndroid StartAppiumServer SDKAAR SDK ShoppingAPKfile AWSSDK Upload InstallShoppingApp BuildAppiumscript Appiumscript AppiumUIautomationtest GitHubActiontestreport Enrichtestresult Logcattestresult pytest AppiumtestArtifact Androidapplicationlog AWSSDK Download Generatetestresult integration_test.ymlintegration_test.yml CI中移动应用测试总结 AppUI自动化测试心得 CI中App自动化测试总结 AppUI自动化测试心得 1.在CI中使用固定的Appiumserver,driver,python版本。 2.测试脚本中合理的使用显示和隐式等待。 3.尽量通过ID或者android_uiautomator进行元素的查找,避免使用XPath。 4.使用PageObject模式来提高代码的可维护性和重用性。 5.可以在CI中通过自定义脚本,在打包前临时修改App的行为来测试特定场景。 6.将UI自动化测试与CI/CD集成,每次PR都触发测试,可实现大规模兼容性验证。 CI中App自动化测试总结 •稳定性是移动应用UI测试的基础。 •可以通过大规模真机验证来节省集成测试时间,并提高代码的稳定性和质量。 •稳定性,兼容性的提升可以显著改善应用程序的体验,从而赢得您用户的信任。 THANKS