原文:
annas-archive.org/md5/be98d708e176b50f9833d9bb61c785a3译者:飞龙
前言
你好!Mobile DevOps Playbook 是一本实用指南,涵盖了构建、测试、发布、监控和管理移动应用程序的各个方面。在学习公司如何使用移动 DevOps 方法论来改善开发、测试、发布和运营团队之间的协作时,你将能够更快速、更高效地向移动应用发布新功能、修复 bug 和进行更新。
这是一本循序渐进的指南,帮助你理解从开发到发布的移动 DevOps 概念、过程和使用案例,并预测移动 DevOps 未来如何发展,包括必要的新技术和工具。
这本书是一个对开发者来说极其宝贵的资源,特别是对于那些希望在快速变化的移动应用开发领域中保持更新的开发者。它提供了关于移动开发过程的全面概述,涵盖了可供开发者选择的不同架构、平台和技术。书中还提供了如何有效管理软件开发生命周期的实用建议,并介绍了如何使用 DevOps 来确保成功和高质量的发布。移动 DevOps 是开发者希望走在技术前沿的必备资源。
通过学习移动 DevOps,开发者可以节省时间、减少错误,并确保应用程序优化以提供最佳用户体验。此外,理解移动 DevOps 的原则可以帮助开发者创建更高效、更有效的移动应用,因为他们将对开发、测试和部署应用程序的过程有更深入的了解。
这本关于移动 DevOps 的书包括了移动开发和 DevOps 原则的全面概述,深入探讨了用于管理移动应用开发的工具和技术,提供了如何成功部署和维护移动应用的实用建议,以及如何简化移动 DevOps 流程的技巧。此外,书中还包括了多种案例研究,展示最佳实践并提供真实世界的例子。
我将根据我在过去几年在移动 DevOps 领域的经验和知识,提供相关信息并指导你了解移动 DevOps 的一些要素。
阅读完这本书后,你将能够在公司实施移动 DevOps,并决定哪些工具或方法对你的团队有用。你还将学会如何在公司规模扩大和业务增长时,利用移动 DevOps 来帮助你的团队。
本书的读者对象
本书将重点介绍移动 DevOps 过程和实施的各个阶段,适用于所有参与移动开发的人员。主要目标读者是对 DevOps 感兴趣的工程师和一线工程管理人员。此外,读者群体还包括 CTO、DevOps 工程师、移动开发者、IT 企业架构师、移动发布经理、移动架构师、移动平台工程师、QA 工程师以及各级发布工程师,他们将能够实施书中规定的解决方案。为了从本书中获得最大收益,读者需要具备 DevOps 概念和实践的基础理解。
本书的读者可能已经对 DevOps 和移动应用的挑战有一定了解,并且深知在规模化应用下测试、发布和监控移动应用的痛苦。
本书内容概述
第一章,解决移动 DevOps 中的挑战,介绍了移动 DevOps。我们将深入探讨移动应用开发的世界,并研究移动优先功能如何帮助更高效、更快速地测试、构建和发布移动应用。
第二章,理解移动生态系统,探讨了移动生态系统及其在开发成功移动应用中的关键作用。内容包括硬件、软件、操作系统、网络和服务等基本组件。话题包括挑战、移动 DevOps、移动操作系统/框架/平台、应用功能和移动应用架构。
第三章,移动 DevOps 基础,探讨了移动 DevOps 的基本原理及其在实现快速高效的移动应用开发中的作用。涵盖的主题包括移动 DevOps 原则、实现移动 持续集成/持续交付(CI/CD)、移动 DevOps 的各个阶段、选择自托管与云托管 CI/CD、移动发布列车概念、应用发布清单以及移动 DevOps 工程师的需求。
第四章,通过移动 DevOps 实现持续集成和交付,探讨了如何使用移动 DevOps 实现移动应用的 CD。内容包括选择 CI/CD 提供商、建立定制的 CI/CD 流水线,并为移动应用设置有效的构建和单元测试。
第五章,实施强大的移动应用测试策略,探讨了如何实施强大的移动应用测试策略,以确保应用质量。涵盖的主题包括移动应用测试简介、测试自动化、创建测试策略、不同类型的移动测试、在移动 DevOps 中的持续测试、测试工具和框架、使用 AI 提升应用质量、实现测试覆盖率,以及提高移动测试技能。
第六章,移动应用发布管理,专注于移动应用发布管理的关键阶段,涵盖挑战、CI/CD 实施、符合应用商店指南、发布和分发、测试版测试、应用商店提交、ASO 以及监控进展。
第七章,建立移动应用程序监控、可观察性和分析,解释了监控和可观察性对移动应用程序的重要性。涵盖建立有效实践、应用程序监控的关键指标、选择合适的工具以及实施持续监控。
第八章,确保移动应用程序和 DevOps 安全,讨论了移动应用程序安全在 DevOps 背景下的重要性。涵盖主题包括安全在移动开发中的重要性、介绍移动 DevSecOps、移动应用程序安全威胁、安全应用程序架构、移动安全测试方法和工具、启动移动 DevSecOps 旅程以及移动 DevOps 安全自动化的技巧。
第九章,移动 DevOps 最佳实践,专注于利用移动 DevOps 实现更快、更高质量的应用开发。涵盖的主题包括 CI/CD 最佳实践、版本和发布管理、基础设施即代码(IaC)、配置管理、A/B 测试、缓存、并行执行、Fastlane 自动化、API 模拟和 ChatOps 协作。
第十章,通过开发者体验和平台工程提高生产力,探讨了**开发者体验(DX)和内部开发者生产力(IDP)**团队的概念,在移动开发中的重要性得到了强调。突出了移动 DevOps 与 DX 团队之间的关系,介绍了平台工程原则,并将其与 DevOps 和 SRE 工程进行了区分。
第十一章*,预测移动 DevOps 的未来,讨论了移动应用程序开发和移动 DevOps 的未来趋势。提供了即将到来的进展和总结了移动 DevOps Playbook。
要充分利用本书
了解移动应用程序开发,包括开发生命周期、编码实践和移动平台考虑因素是至关重要的。熟悉敏捷方法和CI/CD原则也至关重要。此外,对移动应用程序测试和发布管理流程的工作知识将会有所帮助。
假设读者对移动开发概念、DevOps 原理以及领域内常用的工具和技术有基本了解。
确保在阅读本书后,通过在公司或团队中实施移动 DevOps 框架来确保对流程和所需步骤的理解是最佳方法。
| 书中涵盖的软件/硬件 | 操作系统要求 |
|---|---|
| Java +8 | Windows, macOS 或 Linux(Ubuntu) |
| Node.js 和 npm | Windows, macOS 和 Linux |
| Xcode | macOS |
| Android Studio | Windows, MacOS 和 Linux |
| Git | Windows, MacOS 和 Linux |
| React Native | Windows, MacOS 和 Linux |
| Flutter | Windows, MacOS 和 Linux |
| Apple 开发者账户 | MacOS |
| Google Play Store 账户 | Windows, MacOS 和 Linux |
如果你正在使用本书的数字版本,我们建议你自己输入代码,或通过书籍 GitHub 仓库(下一节提供了链接)访问代码。这样可以帮助你避免因复制和粘贴代码而导致的潜在错误。
下载示例代码文件
你可以从 GitHub 上下载本书的示例代码文件,网址为 github.com/PacktPublishing/Mobile-DevOps-Playbook。如果代码有更新,会在 GitHub 仓库中更新。
我们还提供其他来自丰富图书和视频目录的代码包,网址为 github.com/PacktPublishing/。快来看看吧!
使用的约定
本书中使用了一些文本约定。
Code in text: 表示文本中的代码词汇、数据库表名、文件夹名称、文件名、文件扩展名、路径名、虚拟 URL、用户输入以及 Twitter 账号。例如:在测试中无需反复调用sleep()。当这个过程需要较长时间时,Maestro 会自动等待内容加载(但不会等得太久)。
当我们希望引起你对代码块中特定部分的注意时,相关行或项会以粗体显示:
[default]exten => s,1,Dial(Zap/1|30)
exten => s,2,Voicemail(u100)
exten => s,102,Voicemail(b100)
exten => i,1,Voicemail(s0)
所有命令行输入或输出将按以下方式书写:
wget --quiet https://github.com/TestArmada/flank/releases/download/ v22.05.0/flank.jar -O /usr/local/bin/flank.jar java -jar /usr/local/bin/flank.jar firebase test android run
粗体:表示新术语、重要单词或屏幕上显示的词语。例如,菜单或对话框中的词语会以粗体显示。以下是一个例子:“从管理面板中选择系统信息。”
提示或重要说明
显示如下:
联系我们
我们始终欢迎读者的反馈。
常规反馈:如果你对本书的任何方面有疑问,请发送邮件至 customercare@packtpub.com,并在邮件主题中注明书名。
勘误:尽管我们已尽一切努力确保内容的准确性,但错误仍然可能发生。如果你发现本书中的错误,请及时向我们报告。请访问 www.packtpub.com/support/errata 并填写表单。
盗版:如果你在互联网上发现我们的作品存在任何非法复制,恳请你提供其位置或网站名称。请通过 copyright@packt.com 联系我们,并附上该材料的链接。
如果你有兴趣成为一名作者:如果你在某个领域有专业知识,并且有兴趣写书或为书籍贡献内容,请访问 authors.packtpub.com。
分享你的想法
阅读完 Mobile DevOps Playbook 后,我们非常希望听到你的想法!请 点击这里直接前往亚马逊评论页面并分享你的反馈。
你的评论对我们和技术社区非常重要,它将帮助我们确保提供优质内容。
下载本书的免费 PDF 版本
感谢购买本书!
你喜欢随时随地阅读,但又无法携带印刷书籍吗?你的电子书购买是否无法与选择的设备兼容?
不用担心,现在购买每本 Packt 书籍时,你都可以免费获得该书的无 DRM PDF 版本。
随时随地在任何设备上阅读。搜索、复制并粘贴你最喜欢的技术书籍中的代码,直接应用到你的项目中。
好处不仅仅如此,你还可以独家获得折扣、新闻简报和每天发送到你邮箱的精彩免费内容
按照这些简单步骤获取福利:
- 扫描二维码或访问以下链接
packt.link/free-ebook/9781803242552
-
提交你的购买证明
-
就是这样!我们会直接将你的免费 PDF 和其他福利发送到你的邮箱
第一部分:Mobile DevOps 介绍
大规模构建移动应用需要以移动优先的特性来帮助你更快、更高效地构建、测试和部署应用。由于移动设备、原生 iOS 和 Android 开发、跨平台框架以及大团队中的架构扩展等特点带来的挑战非常多,这些问题可能会延长发布过程。在这一部分,我们将学习 Mobile DevOps 及其重要性,并了解移动生态系统以及如何搭建成功的 Mobile DevOps 环境。
本部分包括以下章节:
-
第一章*,解决 Mobile DevOps 中的挑战*
-
第二章*,理解移动生态系统*
-
第三章*,Mobile DevOps 基础*
第一章:解决移动 DevOps 中的挑战
由于其性质,移动应用的发布周期可能会延长。以移动优先为原则的功能帮助你更高效、更快速地进行测试、构建和发布。
为确保移动 DevOps 的成功,开发、运维和 QA 团队必须紧密合作。建立明确的沟通渠道,确保每个人都在同一页面上。
因此,在本章中,我们将涵盖以下主要内容:
-
移动应用的重要性
-
理解移动 DevOps
-
敏捷方法在移动 DevOps 中的作用是什么?
-
有效转型移动 DevOps
-
如何加速组织中的移动 DevOps
-
移动 DevOps 团队的角色与职责
-
大规模移动应用开发的挑战
移动应用的重要性
数字化转型日益取得进展。如今,消费者要求更好的产品和服务,而企业必须采用新技术以保持竞争力。这将帮助他们提高效率并做出更好的决策。
此外,还有满足客户需求的创新空间。所有这一切都需要集成、持续开发、创新和部署。这一切都可以通过移动 DevOps 实现。
尤其是,移动应用开发变得越来越具有挑战性和复杂性。如今,我们依赖移动应用来完成许多任务,包括在线购物、在线支付、资金转账、医疗咨询、在线学习、社交分享等等。
随着这些活动的增加,客户期望移动应用能够更高效地运行,拥有友好的用户界面,可定制的功能,支持多语言,并且具备更多高级功能,同时占用更小的存储空间。
当你的移动应用上线后出现 bug 时,维护和修复它非常困难,甚至可以说几乎不可能。找出根本原因、准备新版本、测试并发布热修复补丁的过程需要团队付出大量努力。你可能需要等待几周或几个月才能完成这些工作。因此,在这段时间内,客户肯定会在应用商店留下负面评价。
“为了最大化客户满意度和价值,必须审视你的流程和工具,找出可以改进的机会。”
但是问题是,你当前的工作流程或配置能否在长期内支持你的移动应用?未来又如何?你的团队能应对这种规模吗?如果业务和团队不断扩展,会发生什么?最后但同样重要的是,你的团队对日常执行的任务感到满意吗?
移动团队专注于处理日益具有挑战性的任务。正因为如此,往往容易忽视整个过程。移动开发人员如果定期停下来检查自己的工作(例如采用 DevOps 流程),会花更少的时间去修复 bug。
持续的挑战
智能手机的使用在全球范围内持续增长。预计到 2025 年,全球智能手机用户将达到 74.9 亿人,比 2022 年的 72.6 亿人有所增加。更多详情请见此链接:shorturl.at/vCQ13。
到 2026 年,预计全球在高级应用、应用内购买和订阅上的支出将达到 2330 亿美元,比 2021 年消费者支出的 1320 亿美元增长了 77%。
此外,预计在未来五年内,两个应用商店的总收入将继续以 12%的速度增长,年复合增长率(CAGR)为 19%,到 2026 年将达到 2330 亿美元。更多详情请见此链接:sensortower.com/blog/sensor-tower-app-market-forecast-2026。
哇,真多!毫无疑问,所有企业都需要为下一波浪潮做好准备,意识到自己的挑战,制定下一步的计划,并且不忘提及成长和改进的机会。
在移动开发中,每个企业都面临以下情况:
-
独特的流程
-
独特的投资和目标
-
独特的人员和文化
这是一个例子
金融科技应用在我们日常活动中扮演着重要角色。个人可以使用这些应用管理财务并做出金融决策,它们通常会使用人工智能和机器学习等先进技术提供个性化的推荐和洞察。
无论是在电子商务、食品/杂货配送还是数字银行,金融科技(fintech)正成为我们个人和职业生活中不可或缺的一部分。
在数字时代,金融科技已经产生了显著影响,而这些针对私人和市场金融的先进技术工具将在使用和效果上进一步发展。
这类移动应用需要不同于其他应用的流程。它们需要一个有效的自动化测试策略,包括安全性测试,因为安全性在这里非常重要,应用的性能也很关键,而且由于竞争或客户满意度,频繁和快速的发布是优先考虑的事项。
另一方面,如果我们在创建一个社交媒体应用,需求和流程将会有所不同。
因此,我认为没有万能的解决方案,每个团队或公司都应该制定自己的解决方案。
让我给你讲个故事
为了理解移动 DevOps 的重要性,让我与您分享一个实际的场景,这个场景发生在我们尚未建立任何流程、技术或技术栈的情况下。
假设我们在 XYZ 公司工作,这是一家金融科技公司,开发和发布移动应用的过程本可以更快更高效。在应用发布之前,开发团队需要花费数周甚至数个月的时间来构建和测试新功能,QA 团队会发现需要手动修复的漏洞,因为他们没有自动化测试脚本。由于这个原因,新的应用版本很少发布,而且发布时通常会有问题,需要后续修复。
当前面临的挑战可以总结如下:
-
我们的新功能每 3 个月发布一次:这是一个巨大的因素,因为我们必须跟上竞争对手的步伐,并尽可能快速地发布新功能。
-
我们的部署过程混乱且痛苦,因为我们没有清晰的部署流程或发布经理。
-
持续集成(CI)流水线或工作流不灵活且脆弱,我们的团队花费大量时间和精力处理与 CI 服务器、配置、网络问题以及设备问题相关的日常事务。
-
手动测试存在很多问题,包括它们既耗时又费力。此外,如果我们有自动化测试,UI 测试和模拟器可能无法正常工作,这使得我们面临不稳定的测试结果。
-
我们没有可用的安全测试工具,也不知道该使用哪些工具进行安全测试。
管理团队看到应用开发进度缓慢以及众多问题时感到沮丧。尽管知道需要改善开发和发布移动应用的方式,但他们不知道从哪里开始。此前,团队每3 个月发布一次,首要目标是将发布周期缩短至1 个月或 2 周(每周或每两周发布一次)。
为了改善其移动应用开发过程,公司采用了移动 DevOps实践。它开始了移动开发和 QA 团队之间基于 Mobile DevOps 原则的协作过程,涵盖了 CI、持续交付和持续部署等方面。
移动 DevOps = 更快的发布
通过移动 DevOps,公司能够显著提高移动应用开发过程的速度和可靠性。移动开发团队能够对应用进行小而频繁的更新,QA 团队也能够快速识别并修复出现的任何问题。
因此,公司能够更频繁地发布应用的新版本,且 问题更少。
管理团队对移动 DevOps 实施的结果感到满意,应用程序更加稳定且频繁更新,显著提高了用户满意度。因此,公司能够比以前更快速高效地向用户交付高质量的应用。
但是这很容易吗?不,成功的实现需要团队思维方式的转变以及所有团队成员的参与。
这需要很短的时间吗?不,这是一场永无止境的旅程,是一个始终在不断发展的过程,以应对移动应用开发中的挑战。
从我的角度来看,我相信以下几点:
“移动 DevOps 是一场旅程,而不是 一个终点。”
既然我们已经解决了移动团队每天面临的大部分主要挑战,那么让我们来看看为什么我们需要考虑像移动 DevOps 这样的流程。
为什么移动 DevOps 重要?
移动 DevOps 使团队能够以更快的速度发布新功能、更新和 bug 修复。这种灵活性有助于满足不断变化的用户需求,并在市场中获得竞争优势。它通过自动化测试和持续监控来确保更高的应用质量,减少达到最终用户的 bug 和问题,从而提高用户体验和客户满意度。
它还促进了开发人员、测试人员和运维团队之间的协作与沟通。这种协作环境促进了知识共享、反馈交流以及团队合作和集体所有感文化的形成。
在之前的简短故事中,我们遇到了一些阻碍进展的挑战,如下所示:
-
不灵活且脆弱的开发环境
-
QA 团队需要很长时间来批准新版本
-
发布新版本的应用程序需要很长时间
-
我们没有清晰的发布流程或职责
然后,团队意识到移动 DevOps 流程能够帮助解决所有这些问题,因为移动 DevOps 的好处包括以下几点:
-
更快地解决问题和交付结果
-
你的业务将因此变得更加灵活
-
建立信任与合作
-
创新源自自动化
-
成本和风险大大降低
-
专注于客户满意度
-
更快的反馈和市场响应时间
-
改善构建正确解决方案的能力
-
更好的产品质量
-
更可靠的发布
-
提高生产力
移动 DevOps 流程能够帮助企业更快地解决问题,变得更加灵活,建立信任与合作,降低成本与风险,专注于客户满意度,提高产品质量、可靠性、生产力和上市时间。
这将是对移动 DevOps 的简短介绍,因为我们将在第三章中进一步探讨,移动 DevOps 基础。
理解移动 DevOps
移动 DevOps 是一套加速移动应用开发和交付的实践方法。这一方法结合了 DevOps 的原则,强调软件开发中的协作和自动化,以及开发移动应用所面临的具体挑战和考虑因素。
移动 DevOps 涉及以下内容:
-
协作与沟通:移动 DevOps 需要开发、运维和 QA 团队之间的密切协作与沟通。建立清晰的沟通渠道和反馈与协作的途径,确保每个人都朝着相同的目标共同努力,是非常重要的。
-
持续集成、部署和交付:移动 DevOps 依赖于自动化流程进行移动应用的 CI 和交付。这意味着代码更改会自动构建、测试,并部署到预发布和生产环境中,无需人工干预。
-
测试与质量保证:测试和质量保证是移动 DevOps 的关键组成部分。应将自动化测试工具和流程集成到开发工作流中,以确保新的代码更改不会引入漏洞或回归问题。
-
监控和反馈:移动 DevOps 还包括监控移动应用在生产环境中的性能和使用情况,并利用这些数据向开发团队提供反馈。这有助于快速识别和解决问题,提升整体用户体验。
-
工具与技术:为了有效实施移动 DevOps,组织需要投资于合适的工具和技术。这可能包括用于 CI 和交付、自动化测试、监控和反馈的工具。
为了让移动 DevOps 方法尽可能有效,你还应在整个移动应用发布的生命周期中集成安全性。移动 DevOps 方法从一开始就将安全集成到流程中,安全性成为共享责任。这就是为什么它被称为“DevSecOps”,因为所有 DevOps 举措必须基于安全的基础。
DevOps 与移动 DevOps
几乎每个公司现在都使用 DevOps 来构建、测试和交付其后端服务(API)、网站或基础设施。
在移动工程的背景下,移动 DevOps 是 DevOps 的一种变体,重点是通过更快的迭代周期和提高移动开发、运维和 QA 团队之间的协作,迅速将高质量的应用交付到市场。移动 DevOps 和 DevOps 的一个关键目标是通过自动化、协作和团队间的沟通,推动快速且高质量的软件交付。
在移动 DevOps 生命周期中,采用了略有不同的方法。尽管步骤有所调整,但连续性符号保持不变,以便频繁地向客户交付有价值的应用、保持质量,并实时监控应用的健康状况。更新后的移动开发生命周期可能包括 持续集成/持续交付(CI/CD)策略、构建、测试、发布、监控和度量。
图 1.1 – 移动 DevOps 与 DevOps
移动 DevOps 将 DevOps 的原则扩展到移动应用开发中,强调在整个开发生命周期中促进协作和自动化。因为它促进了开发人员、测试人员和运维团队之间的协作,所以我使用了前面的图示。它们使用相同的实践,但对于移动应用来说,它们是独特的,并包含不同的挑战。
重点
DevOps 关注不同类型的软件或应用程序,例如网站和后端服务,但移动 DevOps 专注于移动应用程序。
复杂性
移动应用程序必须支持的设备类型、操作系统版本和网络条件范围广泛,通常使其部署环境比传统软件或应用程序更加复杂和多样化。
敏捷方法如何在移动 DevOps 中工作?
由于我们已经花费大量时间在不同的书籍、文章和视频中描述瀑布模型与敏捷方法之间的差异,因此我不想再花时间描述瀑布模型。不过,让我问你一个问题:瀑布模型可以与 DevOps 结合使用吗,还是敏捷方法 更合适?
如果你将移动 DevOps 的优势(前面列出)与移动应用开发中的挑战(前面列出)结合起来,并将它们应用于瀑布模型和敏捷方法,你可以找到答案。
如果你仍然感到困惑,请记住以下链接中的敏捷宣言:Agile Manifesto。
现在答案是什么?我可以帮助你,但首先,让我们回顾一下瀑布模型并识别问题所在。
瀑布模型
瀑布模型是一种线性的软件开发方法,涉及从一个阶段到下一个阶段的顺序和线性流程,且方向是向下的。因此,每个阶段必须完全完成,才能开始下一个阶段。
图 1.2 – 瀑布模型
瀑布模型的阶段如下:
-
需求收集与分析:这一阶段涉及确定软件将解决的问题,确定软件的需求,并创建规格说明书。
-
设计:创建软件的详细技术设计,包括各个组件之间的接口,并制定实现软件的计划。
-
实现:在这一阶段,软件的实际编码工作开始。代码是基于前一阶段的设计创建的。
-
测试:在这一阶段,进行软件测试以确保软件满足规格说明书中的要求,并按预期执行。
-
部署:在这一阶段,软件被部署到目标环境中,例如生产服务器或移动设备。
-
维护:作为维护阶段的一部分,软件中发现的任何错误或问题将被修复,新增功能或特性将被添加,并且软件的性能将得到改进。
瀑布模型有一些缺点。它假设可以在前期收集并分析软件需求,但这并非总是可能的。此外,它假设软件的设计是正确且完整的,但这也并非总是如此。最后,一旦开发过程开始,软件就不能再进行任何更改。
瀑布模型适用于移动 DevOps 吗?实际上,不适用,因为移动 DevOps 涉及持续集成(CI)、持续测试、持续部署和持续监控,变更是常态,且各个阶段不是孤立的。移动 DevOps 中,所有跨职能团队共同协作,在一个流程中共同努力,目标和宗旨是快速、频繁地交付高质量的移动应用,以满足客户需求。
敏捷
相较之下,敏捷方法论被视为瀑布模型的直接继承者。它是一套强调协作、灵活性和快速迭代的软件开发原则。这是一个建立在敏捷宣言基础上的体系,敏捷宣言概述了一套在短时间内交付高质量软件的关键价值观和原则。
通常,敏捷通过使用如Scrum等敏捷方法来实施,其中团队成员在短周期开发(称为冲刺)中进行沟通和相互反馈。
在敏捷宣言背后的敏捷原则中(agilemanifesto.org/principles.html),我们可以找到第一条原则如下:
“我们最优先的任务是通过尽早和持续交付有价值的软件来满足客户。”
你还记得移动 DevOps 的好处吗?客户分层和频繁交付移动应用。基于此,结合移动 DevOps 的敏捷原则旨在通过持续集成(CI)、持续交付和持续部署策略加速移动应用的开发和交付,使团队能够快速、可靠地发布移动应用。
在移动 DevOps 和敏捷中,都非常强调团队间的协作与沟通,同时两者都强调自动化重复任务的重要性,以便尽可能快速高效地生成高质量的软件产品。两者还强调尽快且高效地交付高质量软件产品的重要性。
敏捷强调短周期开发,而 DevOps 强调持续交付。
图 1.3 – 敏捷方法论
目标是以最小的风险实现最大的速度——你需要进行实验、测试,尽可能地探索每一个细节,以免在客户需求面前落后或在过程中崩溃。关键不是防止失败,而是迅速恢复。唯一重要的就是你恢复的速度。
移动 DevOps 阶段
和 DevOps 一样,移动 DevOps 也有多个阶段,从规划到监控,包括所有帮助移动团队顺利、快速、频繁交付高质量移动应用的实践。
图 1.4 – 移动 DevOps 阶段
-
战略与规划:这涉及到识别移动应用的目标和任务,明确目标用户以及任何特定的需求或限制。
-
开发:在这一阶段,移动应用采用敏捷方法和 CI/CD 实践进行开发。这包括编写代码、构建和测试应用程序,并集成任何所需的 API 或服务。
-
测试:移动应用测试是 DevOps 流程中的重要环节,旨在确保应用在不同设备和操作系统上稳定运行并且表现良好。这包括单元测试、集成测试和用户验收测试。
-
发布:一旦应用测试完成并准备好发布,就可以将其发布到适当的应用商店或分发平台。
-
监控:应用部署后,重要的是要监控其性能并解决任何出现的问题。这可能包括崩溃报告、错误追踪、网络请求分析、内存泄漏和应用性能。
这只是对各阶段的简要介绍,但在第三章《移动 DevOps 基础》中,我们将深入探讨这些阶段,而在接下来的章节中,我们将分别用实际案例和用例来探索每个阶段。
在了解了 DevOps 和移动 DevOps 之间的差异、敏捷与移动 DevOps 之间的紧密关系,并看到了移动 DevOps 的不同阶段后,让我们看看如何能够成功、有效地将我们的团队或组织转型为移动 DevOps。
有效地转型移动 DevOps
移动 DevOps 转型和 CI/CD 实施的成功可以通过关键绩效指标(KPI)来追踪,这些是可衡量的数值。通过设定具体、量化的 KPI,并定期监控其进展,您可以追踪移动 CI/CD 努力的有效性。
为了推动移动 CI/CD 转型,可以使用以下 KPI:
-
部署频率决定了新代码更改部署到生产环境的频率。高效和成功的 CI/CD 流程要求有高频率的部署。
-
恢复时间中位数(MTTR)衡量组织在发生故障后多快能够恢复正常运营。具有较低 MTTR 的 CI/CD 流程表明其稳健,能够快速发现并解决问题。移动应用可能面临一些挑战,因为一旦应用发布后,衡量起来会较为困难,但通常我们可以将测量应用到其他移动应用所使用的服务上。
-
缺陷密度:生产环境中发现了多少个 bug?如果 bug 数量很低,说明 CI/CD 流程非常完善,能够有效地识别和修复问题。
-
用户满意度:移动应用是否受到用户的好评?应用质量的一个重要指标是用户满意度。如果你的应用评分较低或在应用商店中有负面反馈,这可能表明你的质量和发布流程需要重新审视。
-
衡量开发者满意度,了解他们在构建和维护公司产品时所使用的工具、流程以及获得的支持。为了节省成本,公司通常会自建工具,但开发者可能对这些工具不满意,公司应该了解开发者是否满意。这是一个极其重要的问题。在 0 到 10 的评分范围内,公司询问内部开发者,他们愿意将公司开发环境推荐给同事的可能性有多大。根据这些数据,可以对开发环境进行改进,以更好地支持内部开发者的需求。
我们还可以使用各种指标来衡量 DevOps 和移动 DevOps 的性能和生产力,例如 MODAS 调查,以及来自 Google 的 DORA 指标 (shorturl.at/beAX1)。
移动 DevOps 的 ROI
投资回报率(ROI)是衡量投资效率的标准。通过确定实施移动 DevOps 方法的成本,并将其与所获得的收益进行对比,可以计算出移动 DevOps 的 ROI。
首先,你需要确定实施移动 DevOps 方法进行移动应用开发的相关成本,包括团队的培训或认证费用、将使用的工具或技术,以及其他相关成本。通过这些信息,你可以计算出实施移动 DevOps 的总成本。
下一步是确定使用移动 DevOps 的收益,例如提高效率、改善团队成员之间的协作和沟通,以及更快的部署和发布周期。为了衡量这些收益,你可以进行我们之前提到的调查(开发者满意度),分析项目绩效数据,并将结果与没有使用 DevOps 的类似项目进行对比。
为了计算移动 DevOps 的 ROI,你需要确定成本和收益:
**ROI = (收益 - 成本) / ** 成本
如何加速组织中的移动 DevOps 实施
移动 DevOps 是一项协作努力,涉及团队、心态和承诺,以及流程和工具集。
图 1.5 – 移动 DevOps 考虑事项
为了加速移动 DevOps 过程和成功,团队应考虑以下事项和最佳实践:
-
确保版本控制健壮,以减少合并冲突和丢失工作
-
构建自动化(CI/CD),让你可以专注于创造而不是管理复杂的流水线
-
经常进行测试并自动化以回应反馈(左移测试)
-
管理你的移动应用工件,确保它们发布到正确的地方
-
确保时刻关注安全
-
从小处开始,并从那里智能地成长
-
创造是关于设计和开发
-
持续进行应用监控和状态检查
移动 DevOps 团队的角色与职责
正如我们之前讨论的,移动 DevOps 涉及一个跨职能的团队,每个角色都有独特的责任,如 CI/CD 流水线、云架构、安全合规性和待命(事件管理)。它们彼此补充。如果团队采用小队与部落的方式,或许一个专门集中化的团队可以处理以下移动 DevOps 实践和流程:
-
发布经理
-
移动工程经理
-
质量保证工程师
-
DevOps 工程师
-
移动工程师
-
安全工程师
-
云/DevOps 架构
图 1.6 – 移动 DevOps 团队
这种方法或配置可以帮助企业公司有效地扩展他们的团队和业务。
在中小型团队中,移动开发人员与 DevOps 工程师可以完成相同的工作,但这可能需要他们付出时间和努力,因此始终取决于移动 DevOps 的目标。
大规模移动应用开发挑战
除了移动应用的独特性外,开发它们时还面临许多挑战。以下是最常见的一些挑战:
-
整合多个平台以创建无缝的用户体验:移动应用通常需要为多个平台(如 iOS 和 Android)开发。这在测试、部署和维护方面可能会带来额外的复杂性。
-
单体代码库与多个代码库:在处理大规模项目时,协调和版本控制会变得具有挑战性。
-
适配应用到不同的设备和操作系统:模拟器和仿真器对于测试可能有用,但它们无法复制用户在真实设备上可能遇到的所有体验和问题。这可能导致确保移动应用的质量和可靠性变得困难。
-
确保应用程序安全并符合安全性和数据隐私要求:移动应用程序通常处理敏感数据,如个人信息和金融交易。这需要对安全性和隐私风险进行细致的管理。
-
紧跟移动应用趋势和技术:为了开发移动应用,你需要一个不断发展的独特工具集。随着市场需求的不断增长,总有新的技术用于构建、部署和监控性能。
-
确保持续交付和部署:移动应用程序需要频繁更新以修复漏洞、添加新功能并提升性能。这要求有一个强大的 DevOps 流程,能够处理每天多个版本的发布。
-
与 API 集成:移动应用程序通常依赖外部 API 提供功能,如位置追踪和数据存储。这些 API 可能会发生变化或出现停机,从而影响移动应用的稳定性。
正如我们之前在《移动 DevOps 基础》一文中提到的,由于每个企业都有独特的投资、目标和流程,开发移动应用可能会面临挑战。以下是几种不同类型的移动应用,每一种都需要简要探讨,以便更好地理解它们的目的。
鉴于所有这些挑战,可以开发出不同类型的移动应用公司。
超级应用
超级应用是一种提供多种服务的移动应用。服务的例子包括打车、外卖、在线购物和金融服务。超级应用为用户提供一站式服务,使他们可以无需下载和使用多个独立的应用程序,便可访问多项服务。
亚洲是超级应用的热门地区,因为它们增加了用户参与度和收入,为提供这些应用的公司带来了好处:
-
Gojek (
www.gojek.com/en-id/) – 一款印度尼西亚超级应用,允许用户使用各种服务,如消息和支付处理 -
Grab (
www.grab.com/sg/) – 一款按需提供外卖、支付及其他服务的应用 -
Paytm (
paytm.com/) – 一款流行的印度电子钱包和支付应用,提供购物、投资等功能,并且可以预订旅行、电影和活动的门票 -
LINE (
line.me/en/) – 一款日本的消息应用,也允许进行支付和预订酒店房间
通过为用户提供便利,超级应用可以使他们无需在多个应用之间切换,就能访问各种服务。企业主可以通过超级应用生成新的收入,并吸引新客户。
白标应用
应用程序的白标版本显示的是重新销售该应用程序的公司的徽标和名称,而不是最初开发它的原始开发者的名称。通常,这些应用程序被定制以满足公司的特定需求,然后重新销售给其他企业或客户,以为公司带来收入。
因此,它们被推荐为公司提供可定制的应用解决方案,而不必投入时间和资源来从零开始开发应用,从而提高客户的满意度。
电子商务是白标应用程序的一个常见示例,企业可以购买现有软件并以其自己的品牌、产品和价格进行定制,例如 Shopify(www.shopify.com/)。这使它们能够快速轻松地推出自己的在线商店,而无需从头开始构建平台。
此外,白标应用程序在医疗保健、教育和政府领域也有所应用。例如,医疗保健提供者使用白标应用程序来安排和跟踪患者的治疗,而学校使用它们来评分和跟踪学生的进展。
使用白标应用有多个好处,包括以下几点:
-
从头开始开发应用可能昂贵且耗时。白标应用更具成本效益和效率。
-
由于其预先存在的特性,白标应用可以比定制建造的应用更快地实施和发布。
这里有一些白标移动应用程序的示例:
-
适用于本地餐厅连锁店的品牌化和定制化食品送货应用程序
-
酒店或度假村品牌的预订和预订应用程序
-
定制和品牌化的门票和活动管理软件,适用于音乐会和体育场馆
此外,开发一个目标受众会发现有价值且吸引人的应用程序,并优化应用程序的功能,可能具有挑战性。
移动团队可以通过实施 CI/CD 和自动化测试等最佳实践来应对这些挑战。此外,他们可以使用诸如移动设备云和测试自动化框架之类的工具来简化流程并改善其移动应用程序。
让我们总结一下:
由于移动应用开发具有独特性,因此 DevOps 也应该 独一无二。
总结
移动 DevOps 的概念涉及集成开发和运维(DevOps)实践,以提高移动应用程序开发的效率和速度。为了实现这一目标,我们使用移动优先功能来更快地测试、构建和发布移动应用程序,并实施移动应用程序的持续集成、测试、部署、交付和监控。
一个有效的移动 DevOps 流程还涉及开发、运维和质量保证团队之间的协作与沟通,以及使用合适的工具和技术以实现预期的结果。为了保持竞争力并满足客户对高质量移动应用的需求,企业应该采纳移动 DevOps。
确保不要盲目复制网上找到的他人流程。制定一个适合你的利益相关者和团队成员需求的策略和计划。在一开始就为你的移动 DevOps 最佳实践建立一个标准流程。
我们向移动 DevOps 迈进的旅程刚刚开始,在接下来的章节中,我们将进一步探索并学习如何有效地使用移动 DevOps。
第二章:理解移动生态系统
一个应用的移动生态系统包括它在移动设备上正常运行所需的所有元素,包括硬件、软件、操作系统、网络和使其运作的服务。为了成功实施移动 DevOps 并满足客户需求,理解移动生态系统至关重要,因为这有助于了解所面临的挑战,并找到解决方法以交付成功的移动应用。
在本章中,我们将覆盖以下主题:
-
移动应用像冰山一样
-
移动应用的伟大之处
-
市场上的不同移动操作系统、框架和平台
-
移动应用功能,如盈利化、推送通知、状态管理、深度链接等
-
移动应用架构
移动应用像冰山一样
在我看来,一个移动应用程序就像一个冰山,有明显的部分(用户界面或 UI)和不显眼的部分(UI 下方的代码和功能)。尽管最终用户是唯一能够看到成品的人,但这个比喻常常能说明构建和维护一个移动应用程序所需的努力、复杂性和工作量,如下图所示:
图 2.1 – 移动应用是一个冰山
当一个用户例如下载并首次使用一个应用时,他们看到的仅仅是它的界面、功能和特性。用户看不到后台发生的许多事情,但这些远比他们意识到的要重要。一个移动应用连接着服务器、数据库和 API,使其能够与其他应用和设备进行通信、检索数据、传输数据并执行各种任务。
一个移动应用,从最简单的意义上讲,就是一种为某个平台(如 Android 或 iOS)设计的运行软件。因此,它需要大量的编码才能开发出来。如图 2.2所示,它由多种编程语言、框架、库和工具组成,这些都用于开发应用的功能和特性:
图 2.2 – 移动应用开发
除了移动应用的技术方面,很多工作还集中在其规划、设计、测试和发布阶段。必须开发线框图、原型和用户流程,并进行用户测试,以确保应用直观、易用且性能优良。
现在我们已经探讨了移动应用开发的基础,让我们将焦点转移到大多数移动开发团队在构建优秀应用时面临的挑战。
什么使得移动应用伟大?
为了制作一个优秀的移动应用,它需要有一个简洁直观的用户界面,易于使用,但与 Web 应用不同,原因如下(如图 2.3所示):
-
这变得更加重要。
-
这个平台是高度碎片化的。
-
工具经常变化。
-
它迭代得非常迅速:
图 2.3 – 移动应用是独特的
基于移动应用的性质和复杂性,在评估移动应用的优点时,有几件事情需要考虑,如下所示:
-
移动应用帮助用户解决问题或满足他们的需求,因此它们需要经过精心设计,并且具有一系列有用的功能和特性,且要可靠。
-
它们应该快速、响应迅速,并且能够完美地处理各种平台和设备,且不会崩溃或出现卡顿。
-
对于移动应用而言,兼容多种设备和平台非常重要,这样尽可能多的用户才能使用它们。
-
它们被设计用来保护敏感数据,并防止未经授权的访问。
-
它们需要定期更新,增加新功能和改进,以保持用户兴趣,并确保未来仍然具有相关性。
既然我们已经了解了移动应用的重要性,现在让我们更详细地看看今天市场上可用的平台和框架,以及在实施移动 DevOps 流程和实践时需要考虑的事项。
当前可用的移动平台和框架
在写这本书的时候,目前市场上有很多不同的移动平台,包括原生平台和跨平台平台,下面我们快速了解一下它们之间的差异,帮助你更好地理解在思考移动 DevOps 时需要考虑的因素。
注意
我不想详细解释移动开发,因为这本书是关于移动 DevOps 的,而关于移动开发的书籍有很多。然而,正如我们之前提到的,我们应该能够解读不同平台的需求,然后根据这些需求实施 DevOps 流程。
作为起点,让我们来看一下原生应用,如 iOS 和 Android。
iOS
如我们所知,iOS是运行在 iPhone 和 iPad 上的操作系统。现在,iPad 有了专门的 iPadOS。众所周知,iOS 除了拥有用户友好的界面、与其他 Apple 产品的整合以及通过 App Store 提供的大量应用外,还与其他 Apple 产品兼容。在写这本书时,iOS 的最新版本是 16。
在开发、测试和发布 iOS 应用时,务必始终使用最新版本的 macOS,并配备最新的 SDK 和工具,以满足应用的需求。这对于移动 CI/CD 来说是一个大挑战,因为如果你想构建和发布 iOS 应用,你就必须始终保持最新。
为了避免浪费开发人员在设置和维护移动 CI/CD 平台上的时间,我们应该始终寻找一个即插即用的平台。在 第四章,通过移动 DevOps 实现持续集成与交付 中,我们将深入探讨如何为我们的团队选择合适的 CI/CD 提供商。
iOS 16 新增功能
2022 年 9 月,Apple 发布了其新操作系统 iOS 16。该版本的 iOS 操作系统在 Apple 的 WWDC22 大会上发布(developer.apple.com/videos/wwdc2022/)。iOS 包含适用于广泛设备的功能和性能改进,包括以下内容:
-
全新锁屏:现在,你可以使用 WidgetKit 为 Apple Watch 创建复杂功能,并为 iPhone 锁屏创建小部件,扩展便捷查看的体验,并拥抱 SwiftUI
-
iPhone 一触即付:通过 Apple Pay、Apple Watch 和其他数字钱包,iPhone 上的支付应用现在可以通过接触式信用卡和借记卡接受非接触式支付
-
SwiftCharts 是一个强大且简洁的 SwiftUI 框架,用于将数据转化为信息丰富的可视化效果
-
3D 地图:在全新的地图上体验高度详细的 3D 城市体验
-
App Intents 将为用户提供仅通过语音或点击应用即可执行快速任务的能力
-
改进的应用内购买体验,新增 API 和增强功能
-
在视频和应用中使用实时文本执行简单任务,如复制和粘贴
所有这些功能都伴随着安全性、可访问性和隐私方面的新特性和增强功能,帮助开发者构建安全且丰富的 iOS 应用。所有细节可以在这里找到:www.apple.com/ios/ios-16/features/。
除了在这里提到的新功能外,我还想强调,我们在 UI 测试这些功能时面临不同的挑战,例如小部件和图表的 UI 测试以及锁屏测试,因此当涉及到下一个可能的挑战时,我们必须始终考虑更大的范围。
只需准备好,在你阅读本书时,新版本的 iOS 就会发布。
除了 iOS 16 中的上述功能外,Apple 还发布了最新版本的 Xcode,即15(apps.apple.com/us/app/xcode/id497799835?mt=12/),这本书写作时,Xcode 是开发 iOS、tvOS、iPadOS、watchOS 或 macOS 应用的主要开发 IDE。Xcode 的二进制文件比以前小了 30%,因此启动速度比以往更快。Xcode 还提供可下载的 watchOS 和 tvOS 模拟器运行时,让开发者可以随时接触到最新的平台。另一个重要的功能是通过单一的应用目标来配置多平台应用。让我们深入了解一下什么是多平台应用。
配置多平台应用程序
使用多平台应用程序(developer.apple.com/documentation/xcode/configuring-a-multiplatform-app-target),你可以通过使用多平台目标共享应用程序的项目设置和代码,正如图 2.4所示,这将允许你将应用程序的体验扩展到应用程序支持的多个平台:
图 2.4 – 多平台目标
注意
尽管 iOS、iPadOS、macOS 和 tvOS 应用程序可以共享一个目标,但 watchOS 应用程序仍然保持在一个单独的目标中。更多信息请参见:developer.apple.com/documentation/Xcode/configuring-a-multiplatform-app-target。
在设计 CI/CD 管道时,我们应该考虑到这一点,因为我们需要为每个目标考虑代码签名机制、证书和配置文件,以及在归档或构建应用程序进行测试时必须采取的步骤。
Android
Android(www.android.com/)操作系统是由 Google 为智能手机和平板电脑开发的开源平台。这个操作系统基于 Linux 内核,主要用于移动设备,但也已在手表、电视、汽车和其他设备上实现。Android 之所以如此受欢迎,有很多原因,包括设备的定制能力,以及通过 Google Play 商店提供的各种应用。
作为 Android 操作系统的替代版本,Android Go(www.android.com/versions/go-edition/)旨在平稳运行于低配置的智能手机和平板电脑,这些设备具有有限的资源。通过一个更轻量版的 Google Play 商店、Google 应用以及一系列优化为低端设备的应用,它旨在平稳运行于资源有限的入门级智能手机和平板电脑。
Android Go 的主要目标是为资源有限的用户提供流畅、可靠且易于使用的用户体验。
注意
你可以在这里了解更多关于如何为 Android Go 开发应用程序的信息:
developer.android.com/guide/topics/androidgo/develop
Android 13 新功能
同样,iOS 始终拥有 Android 的最新版本,包括新的功能和现有功能的增强。让我们一起探索其中的一些:
-
作为 Android 13 的一部分,Material You (
material.io/blog/announcing-material-you) 被整合到操作系统的外观和样式中。通过自定义非 Google 应用程序,您可以通过匹配您选择的主题和颜色,使主屏幕更具连贯性和独特性。 -
当您复制敏感信息,如电子邮件地址、电话号码或用户名和密码时,Android 将在一段时间后自动清除您的剪贴板历史记录。
-
现在 Android 13 可用后,在平板上执行多任务更加容易了。
注意
还有更多内容 — 您可以在以下链接找到所有新功能的详细信息:www.android.com/android-13/#a13-highlights。您可以在以下链接查看所有发布和版本信息:developer.android.com/about/versions。
在持续集成/持续交付方面,Android 可以在 macOS、Windows 或 Linux 等各种操作系统上构建,但要构建 Android 应用程序,您需要拥有 Android 的 SDK 和工具,例如 Gradle,这是 Android 应用开发的官方和主要工具。
接下来,让我们来看看可以在多个平台或跨平台运行的应用程序。
Flutter
Flutter (flutter.dev/) 是由 Google 创立的移动应用开发框架。Flutter 平台使开发者能够从单一代码源创建适用于 Android 和 iOS 的移动应用,这些应用具有高响应性、视觉吸引力和高性能,以及适用于 macOS 和 Windows 的桌面应用、Web 应用和嵌入式应用 (flutter.dev/multi-platform/)。
因此,Flutter 是一个生态系统,在这里您可以从单一代码库构建六种应用程序。正如 图 2*.5* 所示,使用 Flutter 您可以构建 Web、移动嵌入式应用程序和桌面应用程序(Windows、macOS 和 Linux):
图 2.5 – Flutter 多平台
Flutter 使用 Dart 编程语言 (dart.dev/) 并采用响应式编程模型,允许实现流畅无缝的应用交互。它还包括各种可定制的 UI 组件和构建工具,以及访问摄像头和存储等本地设备功能。
Flutter 是一个出色的工具,可以帮助您构建诸如 渐进式 Web 应用 (PWAs) 等 Web 应用,并将现有的移动应用扩展到 Web,但 Web 本身是一个灵活的平台。
在涉及 Flutter 时,考虑 CI/CD 流水线是有挑战性的,因为每个应用都需要特定的工具和预请求才能发布。由于 Flutter 也支持 iOS 应用,因此它还需要 macOS 机器以及最新的工具和 SDK。例如,使用 Flutter SDK 时,Linux 除了需要 Flutter SDK 之外,还需要其他工具,而在 Windows 上,你肯定需要 Windows 操作系统才能构建应用。
React Native
React Native 框架 (reactnative.dev/) 是 Facebook 最受欢迎的框架之一,因为它允许开发者使用 JavaScript 和 React 库构建类似原生的应用。React Native 使用声明式编程,并包含大量组件和工具,用于创建高性能的应用。在此链接中,你可以了解哪些公司在使用 React Native,例如 Shopify、Microsoft、Facebook(Meta)等:reactnative.dev/showcase。如 图 2.6 所示,你可以通过 React Native 和 JavaScript 从一个单一代码库构建 iOS 和 Android 应用:
图 2.6 – React Native 框架
React Native 团队最近宣布了 React Native 的新版本 0.72.4 (github.com/facebook/react-native/releases)。该版本带来了若干改进,包括统一的 CodeGen 配置、新的 Android 构建支持 CMake 以及新架构的文档。
此外,他们宣布了新架构,因为旧架构存在多个挑战,具体包括以下几点:
-
数据被 异步 提交到桥接层,然后 异步 等待被另一个层处理。
-
由于 JS 是单线程的,因此所有计算都发生在这个线程中。
-
决定使用 JSON 作为最简单且易于人类阅读的格式,但它确实带来了一些开销,因为每当一个层需要使用另一个层时,都必须序列化一些数据。
尽管如此,新的架构会带来几个好处,具体包括以下几点:
-
现在可以执行 同步 函数。在过去,这些函数是异步的。
-
新架构不再需要序列化或反序列化数据,因此不需要支付序列化的成本。
-
通过使用 C++,现在可以抽象出所有的 平台无关 代码,并且可以轻松地在各个平台之间共享。
-
包含一层由一个或多个 JavaScript 规范自动生成的代码,确保 JavaScript 可以调用 C++ 方法,反之亦然。
注意
通过此链接可以了解更多关于新架构的信息:
reactnative.dev/docs/next/the-new-architecture/why
构建时间方面还有一个改进:从 React Native 0.71 开始,您将能够使用来自 Maven Central 的预构建工件,这些工件可以从 Android 消耗。因此,新架构 (github.com/reactwg/react-native-new-architecture/discussions/105) 在构建时间上有了巨大的改进。
最后但同样重要的是,Shopify (www.shopify.com/) 最近宣布其整个移动应用已迁移至 React Native。
注意
以下链接详细解释了为什么 Shopify 这么做,它是如何做到的,以及公司从中获得了什么:shopify.engineering/migrating-our-largest-Mobile-app-to-React-Native。
Ionic
Ionic 提供与主要框架的集成,包括 Angular、React 和 Vue,以便使用 Web 技术提供高质量、高性能的移动应用。Ionic 框架 (ionicframework.com/docs/) 提供了一整套 UI 工具包,用于构建高质量、高性能的移动应用,如下图所示:
图 2.7 – Ionic 框架
对于构建移动应用的开发者来说,使用 Ionic 的优势在于,它提供了各种预设计的 UI 组件和布局,使开发者能够轻松构建用户友好且具有视觉吸引力的应用。此外,Ionic 拥有一个活跃且庞大的社区,提供了多种插件和资源,可以在广泛的方式中扩展其功能。
Ionic 框架的本地应用可以通过应用商店进行分发,并能在移动设备上运行,因为 Ionic 应用通常作为本地应用进行部署。它还提供用于开发 PWA(渐进式 Web 应用)的工具和服务,PWA 是像本地应用一样能够离线工作的 Web 应用,并且可以作为本地应用安装到设备上。
Ionic 拥有 Capacitor (capacitorjs.com/),一个开源跨平台应用运行时,允许基于 Web 的应用在 iOS 和 Android 上原生运行。将这些应用称为本地 PWA(渐进式 Web 应用)是有帮助的,因为它们代表了超越传统混合应用思维的下一个进化阶段,如 图 2.8 所示:
图 2.8 – Ionic 和 Capacitor
对于 Ionic 的 CI/CD,Appflow (ionic.io/appflow) 允许团队构建具有混合移动架构的应用,包括 Cordova、Capacitor 和 React Native 应用。别担心,在 第四章,实现移动 DevOps 的持续集成与交付 中,我们将学习更多关于 Appflow 的内容以及如何与 Ionic 应用一起使用它。
Cordova
Cordova 框架 (cordova.apache.org/) 允许你使用标准的 Web 技术(如 HTML5、CSS3 和 JavaScript)开发跨平台应用程序,如 图 2.9 所示。
注意
更多信息可以在这个链接中找到:
cordova.apache.org/docs/en/11.x/guide/overview/index.html
每个平台都通过其自己的封装器进行目标定位,该封装器提供对传感器、数据、网络状态等的访问,使用符合标准的 API 绑定:
图 2.9 – Cordova 框架
如果你想做以下操作,可以使用 Apache Cordova:
-
将你的移动应用扩展到多个平台;你不必使用每个平台的语言和工具重新实现它。
-
开发一个应用程序,并通过打包它进行 web 部署,以便在应用商店中分发。
作为 Cordova 社区的一部分,已经开发了各种插件来扩展 Cordova 应用程序的功能,例如通过 Cordova 插件访问本地设备功能,如相机、GPS 和加速度计。
注意
在这个链接中,你可以找到 Cordova 和 Capacitor 之间的对比:
ionic.io/enterprise-guide/capacitor-vs-cordova
Xamarin
在 Xamarin 框架 (dotnet.microsoft.com/en-us/apps/xamarin) 中,开发者能够用 C# 编写代码,并通过使用特定平台的 API 来访问平台的本地功能和能力,正如 图 2.10 所示:
图 2.10 – Xamarin 框架
作为 Xamarin.Forms 工具包的一部分,Xamarin 为开发者提供了定义其应用程序 UI 布局的能力,这些布局可以在多个平台上重用,使用单一的 UI 工具包。
Xamarin 是死是活?
最近,我们注意到微软宣布,如果你想从单一代码库构建原生的跨平台桌面和移动应用程序,你可以使用 .NET MAUI。
所以,我们曾假设 Xamarin 可能已经结束,但实际上,它是 .NET MAUI 的开始。
如 图 2.11 所示,.NET MAUI (dotnet.microsoft.com/en-us/apps/maui) 旨在取代 Xamarin.Forms,并为构建可以在 iOS、Android 和 Windows 平台上运行的移动应用程序提供一个更现代、功能更强大且一致的 UI 工具包。
.NET MAUI 构建于 .NET 6 之上,但在写作时该框架的当前版本为 .NET 7 (dotnet.microsoft.com/en-us/download):
图 2.11 – 多平台目标
注意
要将你的应用从 Xamarin 迁移到 .NET MAUI,请访问以下链接:
learn.microsoft.com/zh-cn/dotnet/maui/get-started/migrate?view=net-maui-7.0
最后,Xamarin、React Native、Ionic、Cordova 和 Capacitor 之间的区别如以下截图所示:
图 2.12 – Xamarin、React Native、Ionic、Cordova 和 Capacitor
正如我们之前讨论的,不同的框架使用如 HTML、JavaScript 和 CSS 等 Web 技术来构建移动应用,以模拟原生应用的体验。让我们解释一下 PWA 背后的概念。
PWA
PWA(web.dev/progressive-web-apps/)是一种旨在模拟原生应用体验的网页应用。除了它们可以在任何设备上运行,无论该设备是否支持现代网页标准外,它们还被称为渐进式,因为随着运行它们的设备变得更强大,它们也变得更强大。
PWA 通过使用 HTML、CSS 和 JavaScript 等 Web 技术通过网络浏览器访问。用户还可以将它们安装到设备上,并像使用原生应用一样使用它们,享受离线支持、推送通知、访问硬件(如摄像头和麦克风)等功能,如图 2.13所示:
图 2.13 – PWA
PWA 的主要优点之一是它们易于分发和安装,因为它们不需要应用商店下载。这使得用户可以更轻松地使用应用程序,也使得更新速度更快,在设计和功能方面更具灵活性。
除了提供与原生应用相同的许多优点外,PWA(渐进式网页应用)还可以通过网络浏览器轻松访问,这使得它们在构建移动应用时越来越受欢迎。在一些情况下,当企业或组织希望为用户提供移动应用体验,但又无法为不同平台构建和维护独立的原生应用时,它们可以使用 PWA。
以下是一些流行的 PWA 示例:
-
Twitter Lite:这是 Twitter 应用的极简版本,可以直接从任何具有网络浏览器的设备访问
-
Starbucks(星巴克):用户可以通过星巴克 PWA 从移动设备上进行订购、支付和跟踪购买
-
Trivago:用户可以搜索并预订酒店,还可以访问他们的历史预订
注意
由于有很多关于跨平台框架的书籍、文章或视频,我不会浪费你的时间进行比较,但我建议根据应用的性质、业务需求、目标和目标受众,以及团队的技能水平来选择框架。
现在我们简要地探讨了不同的移动应用操作系统、框架和平台,让我们来看一看移动应用最有价值的功能。
移动应用的最有价值功能
移动应用中包含了众多有价值的功能,满足了用户多样化的需求和偏好。接下来将描述一些最有用的功能。
大屏幕和可折叠设备
为了确保你的应用在大屏幕和可折叠设备上正常工作,你需要确保它针对不同的屏幕尺寸进行了优化。这可能意味着重新设计布局,以充分利用额外的屏幕空间,或将应用设置为支持纵向和横向屏幕。
可折叠设备为用户与设备互动提供了新的方式,例如可以在折叠或展开模式下使用。如图2.14所示,当可折叠设备处于折叠状态时,它可能会影响应用的显示和使用方式。在设计应用时,确保考虑到这一点,并进行测试,确保设备在折叠和展开时都能平稳运行。
图 2.14 – 可折叠设备
为了确保你的应用在大屏幕和可折叠设备上看起来既好又能正常运行,请遵循你正在开发的平台的设计指南,例如 Android (developer.android.com/guide/topics/large-screens/get-started-with-large-screens)。提供一致的用户体验将有助于你的应用与操作系统的其他部分保持一致。你还可能需要投资一些额外的硬件以获得最佳效果。
此外,开发者还必须确保他们的应用与没有可折叠屏幕的旧设备兼容,尽管可折叠移动设备是一项相对较新的技术。为了确保应用在所有设备上正常工作,我们需要开发并测试应用的不同版本。在这种情况下,测试自动化可以帮助实现这一目标。
因此,QA 工程师需要确保应用和自动化测试能够帮助他们在测试大屏幕和可折叠设备上的应用时实现这一目标。这个挑战可以通过使用截图测试或人工智能(AI)测试工具来解决,该工具能够检测 UI 屏幕并进行对比。在第五章《实现强大的移动应用测试策略》中,我们将讨论大屏幕和可折叠设备的测试实践。
深度链接
在移动应用中,深度链接是允许用户通过点击应用内的链接直接访问应用中特定内容或功能的链接,而不需要手动导航到相关内容。
深度链接有多种方式可以用于推广应用内的内容,或者让用户快速访问应用内的特定功能或特性。它们可以被包含在电子邮件营销、社交媒体帖子或其他类型的营销材料中,鼓励用户与应用互动。
除了改善用户体验,深度链接还可以用于将用户引导到他们希望快速且轻松访问的内容或功能。例如,深度链接可以用于将用户引导到电子商务应用中的特定产品页面,或游戏中的特定界面,如图 2.15所示:
图 2.15 – 深度链接的工作原理
需要注意的是,要使用深度链接,应用必须已安装在用户的设备上。如果应用未安装,深度链接通常会将用户重定向到应用商店下载该应用。
对开发人员和 QA 工程师来说,另一个挑战是如何测试深度链接,这将在第五章《实施健壮的移动应用测试策略》中讨论。
碎片化
iOS 和 Android 应用在设备和操作系统上出现碎片化是常见现象。由于操作系统的升级和新设备的发布,更频繁地测试移动应用显得尤为重要。Android 和 iOS 设备的碎片化以及与硬件相关的错误是常见问题。
设备的制造商、屏幕尺寸、连接类型、电池寿命、分辨率和操作系统版本可能会有所不同,如图 2.16所示:
图 2.16 – 设备和操作系统碎片化
对开发人员来说,开发和维护跨所有设备和操作系统的应用可能是一项挑战,因为设备碎片化可能让他们在创建和维护应用时遇到困难。例如,一款在某设备上运行完美的应用,可能在另一款配置不同的设备上出现性能问题或显示故障。
团队需要在不同设备和操作系统版本上尽早并频繁地测试他们的移动应用,以增加测试覆盖率并确保我们的移动应用表现正确,这一点非常重要。
除了碎片化问题,企业可能由于不支持的设备和操作系统而失去潜在客户和收入。
在这种情况下,你可以使用云设备服务来设置不同的设备和操作系统版本,确保支持所需的设备。我们将在第五章《实施健壮的移动应用测试策略》中一起探讨市场上不同类型的设备实验室。
本地化
移动应用的本地化是指将其适配为特定语言或文化的过程,如图 2.17所示。相关任务包括翻译应用的文本和界面,调整图片和图形以符合不同的文化习惯,并根据当地需求调整应用的功能。
本地化移动应用非常重要,原因如下:
-
它有助于覆盖更广泛的用户群体,从而帮助你扩大用户基础,接触更多的受众。
-
它改善了不精通应用语言的用户体验,同时也改善了精通应用语言的用户体验。通过提供应用本地语言的内容,用户可以更好地与应用产生联系,因为他们可以接收与自己文化和语言相关的内容。
图 2.17 – 本地化
要本地化移动应用,需要考虑几个因素,包括你打算针对的语言和文化、可用的资源和预算,以及在本地化过程中可能遇到的技术挑战。
此外,你还需要考虑随着时间的推移,如何维护和更新本地化版本的应用程序,因为语言和文化会不断变化和演变。第五章,实施强健的移动应用测试策略,讨论了如何通过屏幕截图和其他方法测试移动应用的本地化。
可访问性
在移动应用中,可访问性是指开发和设计能让残疾人士(如视力或听力障碍者)使用的应用程序,如图 2.18所示。你必须确保你的移动应用具有可访问性,因为这将使更广泛的用户群体能够使用并从中受益,同时提升所有用户的体验。
图 2.18 – 可访问性
移动应用可以通过以下几种方式实现可访问性:
-
对于有视力障碍的用户,确保文本格式正确,且文本与背景之间有足够的对比度尤其重要。
-
为了确保有视力障碍的用户能够理解内容,请为图像、视频及其他媒体提供替代文本。
-
有听力障碍的用户可能会从音频和视频内容的字幕和文字记录中受益。
-
语言应该清晰简洁。避免使用可能令某些用户困惑的行话或技术术语。
-
遵循可访问性指南和最佳实践。
-
使用辅助技术进行测试,如屏幕阅读器或文本转语音软件。在第五章,实施强健的移动应用测试策略中,我们将更详细地讨论这一点。
通过实施这些和其他可访问性措施,您可以确保您的移动应用对更广泛的用户群体可用,并改善所有用户的体验。
推送通知
推送通知是一种从服务器发送到移动设备的消息,通知用户有关新内容、交易、事件或更新的信息。
用户可以在收到新邮件、任务完成或新功能可用时接收推送通知。推送通知也可以用于推广产品和服务,或鼓励用户使用应用,正如以下截图所示:
图 2.19 – 推送通知
只有用户选择并授权应用发送推送通知时,才能接收到推送通知。通常,用户可以在应用设置或操作系统的设置中进行授权。
即使应用没有运行,用户也会通过推送通知收到提醒,这使得推送通知成为与用户互动的有用工具。然而,不应过度使用推送通知,因为过多的通知可能会让用户感到烦扰,甚至可能导致用户禁用通知或卸载应用。推送通知的测试具有挑战性,但我们将在第五章,实施强大的移动应用测试策略中讨论这一点。
离线功能
在移动应用中,对离线功能的需求通常是最大的。除了应用必须在用户是否有网络连接的情况下都能正常工作外,一些应用(如外勤工作应用)还可以在网络连接较差或完全没有网络的地方使用,正如以下截图所示:
图 2.20 – 启用离线功能
当互联网连接不可靠或无法使用,或者用户不想产生数据费用时,此应用设计为即使没有互联网连接也能正常工作。
开发人员可以通过以下策略在移动应用中启用离线功能:
-
移动应用可以在设备上本地缓存数据,例如图片或文本,并在设备离线时访问这些缓存文件,从而使用户在没有互联网连接的情况下仍能使用应用的某些功能。
-
当互联网连接可用时,应用可以在设备与服务器之间同步数据,使用户能够随时在线访问最新信息。
-
设备可以作为本地存储使用,例如SQLite设备,当应用安装时存储数据,并在离线时访问这些数据。
-
内容可能会在服务器上渲染,并通过服务器端渲染缓存到设备上。在某些情况下,应用可能会在服务器上渲染某些内容,并将其缓存到设备上,以便在设备离线时仍然能够显示这些内容。
测试连接性也是一个挑战,因为你必须使用真实设备来测试各种连接类型和条件,这需要测试实验室和良好的测试设计。别担心——在第五章中,实施稳健的移动应用测试策略会详细讨论这一问题。
盈利
盈利的目标是为应用开发者创造收入,同时为用户提供价值。盈利策略根据应用和其受众的不同而有所不同,可能涉及多种不同方法的组合。
应用内购买是一种功能,允许用户在移动应用内购买额外的内容或功能。这些购买通常通过用户的应用商店账户直接在应用内完成,如下图所示:
图 2.21 – 盈利
使用多种支付方式(如信用卡、PayPal 或 Apple Pay 等移动支付服务)可以进行应用内购买。开发者可以设置应用内购买的价格,这些购买可以是一次性购买,也可以是订阅。
第五章,实施稳健的移动应用测试策略,将讨论如何测试 Android 和 iOS 设备的应用内购买,并介绍实现这一目标所需做的事情。
模块化
在移动应用中,模块化是指将应用划分为更小、更独立的模块或组件。代码可以更容易地在应用的其他部分或未来的项目中复用,从而节省时间和精力。
模块化过程还可以通过让你仅加载需要的模块,而不是一次性加载整个应用,从而提高应用的性能。因此,你可以在不影响其他部分的情况下修改某个模块,使得应用的维护和更新变得更加容易。
各个模块之间的交互可以通过使用如依赖注入(DI)或控制反转(IoC)等技术来管理,如下图所示:
图 2.22 – 模块化的应用架构
移动应用开发可以通过模块化架构带来多种好处:
-
跨不同部分或不同应用重用模块的能力减少了编写新代码的需求,加快了开发进度。
-
模块化架构简化了应用的维护和更新,因为可以在不影响整个应用的情况下对单个模块进行更改。
-
通过添加新模块或修改现有模块,模块化架构使应用能够在成长和发展过程中进行扩展。
-
使用模块化架构更容易测试应用程序,因为每个模块可以单独测试,从而减少错误 或 bug 的风险
注意
欲了解更多信息,您可以访问以下链接—例如,查看如何将 Android 应用进行模块化:developer.android.com/topic/modularization。
性能优化
由于用户期望移动应用响应迅速且快速,性能是一个重要的考虑因素。
在多种设备和网络上测试应用程序很重要,以确保它在真实世界条件下表现良好。各种移动性能优化工具和库(如Flipper,github.com/facebook/flipper)可以用于此目的。此外,我们可以使用不同的实践来优化移动应用性能,如下所示:
-
缓存减少了应用程序发出的网络请求次数,并提高了其整体性能
-
编写干净、高效的代码,以最小化资源使用并减少应用程序的加载时间
-
使用性能分析工具可以揭示应用程序的瓶颈或问题,并提供有关其性能的详细信息
-
使用较小的、更优化版本的图像和视频可以最小化资源的使用
-
您可以通过性能监控工具来识别和诊断应用程序中的性能问题
-
如果您减小应用程序的大小,其下载和安装时间将更快
下一章将讨论如何使用缓存来改善应用程序的构建过程,尤其是在 CI/CD 流水线中,如何使用工具来减少应用程序的大小和提高性能。
正如我们所讨论的,模块化是指将应用程序分成更小的、独立的模块或组件,了解移动应用架构及其设计良好的考虑因素是非常重要的。
移动应用架构
移动应用架构描述了应用程序的设计和结构,如下图所示。它包括所有组件及其之间的关系,以及为开发所选的设计模式和框架:
图 2.23 – 购物应用架构示例
设计移动应用架构需要考虑多个因素,包括以下几点:
-
架构将受到应用程序开发和运行平台的影响(例如,iOS;Android)
-
组件和设计模式将由应用程序的功能决定
-
一个设计良好的架构应在设计时考虑应用程序的性能
-
可扩展架构对于应用程序随着人气和使用量的增长非常重要
这里提供了一些移动应用架构的最佳实践:
-
设计你的应用,使其可以通过将其划分为更小的独立模块,轻松进行更新或替换。
-
通过使用清晰的命名约定和遵循已建立的编码标准,使你的代码库更易于阅读和维护。
-
考虑使用最小可行产品方法。从用户认为有价值的最小功能集开始,根据需要进行迭代。
-
确保你的应用可扩展,能够处理大量数据和多个用户而不导致性能下降。
-
根据新技术和新特性调整你的设计:使用一种灵活且可适应的架构。根据平台,有多种架构可供移动开发使用,例如以下几种:
-
模型-视图-控制器 (MVC) (
shorturl.at/bjuO0) -
模型-视图-呈现器 (MVP) (
shorturl.at/hkHWX) -
模型-视图-视图模型 (MVVM) (
shorturl.at/fptP2) -
视图-交互器-呈现器-实体-路由 (VIPER) (
www.objc.io/issues/13-architecture/viper/) -
视图 - 交互器 - 呈现器 (VIP) (
github.com/thetay55/VIP-Architecture/blob/master/VIP_Architecture.md) -
Redux (
www.kodeco.com/books/advanced-ios-app-architecture/v3.0/chapters/6-architecture-redux)
-
-
通过使用自动化测试和持续集成,确保你的应用程序是可靠的。
-
创建一个可维护的架构,采用设计模式和实践,使得应用的更新和维护更加便捷。
-
通过使用依赖注入(DI)使你的应用更具灵活性和可测试性。
-
确保你的后台和前端之间的网络层是稳健且高效的。
-
确保你的应用数据存储在高效且可靠的数据库中。
-
通过实现强大的错误处理机制来改善用户体验。
-
使用强大的日志机制可以使故障排除和调试变得更加容易。
为了为客户提供更好的用户体验,移动应用开发者应遵循这些实践,使其应用性能更好,提供更佳的用户体验。
总结
当我们一起踏上这段旅程,探索移动平台、框架以及移动设备独特功能的复杂世界时,我们越来越明显地发现,这些为从事移动开发的人员,包括开发者、QA 工程师、发布工程师等,带来了许多挑战。这些平台和技术复杂且不断演变,要求我们保持警觉和积极主动的态度,持续寻求创新解决方案,克服我们面前的障碍。
我们应对这些挑战的一种方法是通过利用自动化来简化和增强移动应用开发过程。无论是在构建、测试、发布还是监控方面,自动化都提供了诸多好处,可以极大地帮助我们高效地开发高质量、可靠的移动应用。
通过全面了解这些不同的移动平台、框架和功能,我们可以自信地应对前方的挑战,利用自动化作为强大的工具,在我们创造优秀移动应用的过程中不断前行。因此,让我们继续探索和发现,拥抱我们面前的障碍和机会,始终努力突破移动开发领域不断变化的可能性边界。
我们的下一章将讨论 Mobile DevOps 的基础知识,以及如何在接下来的章节中开始实施的实际步骤。
第三章:Mobile DevOps 基础
毋庸置疑,Mobile DevOps 正迅速成为移动开发过程中的一个关键部分,使团队和组织能够快速开发和发布移动应用程序。我们将讨论 Mobile DevOps 的基础,并介绍它如何通过这一过程帮助您的团队实现移动开发目标。
在本章中,我们将涵盖以下主题:
-
移动持续集成/持续交付(CI/CD)基础
-
在自托管和基于云的持续集成/持续交付(CI/CD)之间做出选择
-
我们需要一名 Mobile DevOps 工程师吗?
听起来很有趣!让我们开始向 Mobile DevOps 进军吧。
Mobile DevOps 的重要性
如今,企业越来越依赖移动应用程序。DevOps 是移动开发过程中的关键部分,因为它管理着移动应用的开发和发布。为了简化开发过程并提高移动应用的质量,采用了 CI、持续测试(CT)、CD 和持续部署等技术。
这是一种开发移动应用的方式,强调开发、质量、产品和运维团队之间的协作,以确保移动应用能够快速、频繁且可靠地交付,如下图所示:
图 3.1 – Mobile DevOps
通过 Mobile DevOps,团队可以更有效、更高效地协作,因为他们可以更快地开发和发布移动应用程序,并且错误较少(尽可能地),因为他们可以更多地合作。这有助于缩短开发移动应用的时间,同时确保应用程序符合质量、安全性和性能标准。
在第一章,解决 Mobile DevOps 中的挑战中,我们讨论了传统的移动应用开发往往是缓慢、容易出错且孤立的。开发者通常是单独工作,将工作交给质量团队进行测试,然后再交给运维团队进行部署和发布。这个过程通常很慢,导致了关键问题、延迟、糟糕的用户体验和不满情绪。
因此,Mobile DevOps 正在改变移动应用程序的开发和维护方式。它涉及运用 DevOps 原则和实践来提升移动应用开发的速度、安全性和质量。
Mobile DevOps 的许多优势可以总结如下:
-
更快的开发周期
-
不同团队之间的协作改善
-
更好的质量保证实践
-
高效的部署过程
-
快速响应客户反馈
-
通过自动化节省成本
-
部署时间减少
-
确保应用程序安全并符合规定
Mobile DevOps 过程对寻求最大化移动开发努力的组织来说,已被证明是极为宝贵的。
让我们深入探讨并了解更多关于移动 DevOps 的基础知识。
移动 CI/CD 基础
如果你熟悉 Web 应用、后台服务或其他类型应用的 DevOps 基础知识,你已经了解了CI/CD的概念。在移动端也是一样,只是需要一些特定的任务来构建、测试和发布移动应用。
在进入 CI/CD 部分之前,我想先给你介绍一下准备阶段,也就是规划阶段。
持续规划
作为一个团队,我们应该就实施移动 DevOps 和 CI/CD 的过程达成一致。持续规划阶段涉及从利益相关者收集需求、创建项目计划并确定必要的资源。这是确保应用满足用户需求并与整体业务目标一致的重要步骤。
此外,我们还需要清楚地定义你希望通过移动 CI/CD 策略实现的目标。这可能包括提高发布的速度和质量、增加团队成员之间的合作,或减少错误的风险。
可以用来改善 DevOps 实践的框架之一是CALMS(www.atlassian.com/devops/frameworks/calms-framework),如图 3.2所示。它也可以应用于移动 DevOps,优化开发、测试和发布移动应用的过程:
图 3.2 – CALMS 框架
CALMS 可以用来实现以下目标:
-
团队可以通过协作和共享知识与资源,更快地识别和解决问题,从而交付更高质量的应用。
-
合作与沟通能够提升团队士气和生产力,进而提高效率和生产力。
-
通过确保每个成员了解项目目标和进展,团队可以避免误解和错误。
-
团队成员之间的沟通与合作可以促进更快的决策,进而提高项目进展的效率。
CALMS 有五个主要组成部分,如下所示:
-
文化:本质上,这指的是团队的价值观和信念,以及团队的整体工作环境和动态。每个团队都需要积极的文化才能取得成功。
-
自动化:自动化工作流减少了手动干预的需求,并通过使用工具和流程最小化错误的机会。
-
精益:在整个开发过程中,精益方法旨在最大化价值并最小化浪费。作为这一过程的一部分,需要识别并消除不必要的步骤,简化工作流程,并持续改进过程。
-
衡量:识别改进领域需要收集和分析数据。指标可以包括交付时间和周期时间,以及缺陷率。
-
共享:当知识和资源在部门内外共享时,协作和效率会得到提升。定期的团队会议、结对编程和代码审查都可以促进这一点。
现在我们已经确定了您的移动 CI/CD 策略应该实现的目标,让我们进一步了解 CI/CD 流程。
DevOps 文化是为组织构建有能力的工程团队的关键组成部分。它在向需求旺盛且具有广泛职业选择的工程师展示公司质量方面起着重要作用。
持续集成
持续集成(CI)定期且可靠地进行增量代码更改。CI 使得自动化构建和测试过程得以实施,从而在代码更新合并到代码库或特别合并到主分支或主分支之前,使得更新可靠,我们必须始终执行此操作,以保持主分支始终无冲突或错误,因为它是我们业务的主要来源。如果需要发布新版本,这是基准,如下所示的屏幕截图所示:
图 3.3 – CI 流程
移动应用的 CI 流程主要包括以下步骤:
-
从代码库克隆源代码
-
构建应用二进制文件
-
运行不同类型的测试,如单元测试、集成测试、UI 测试等
-
根据应用类型创建并部署工件(
.aab或.ipa),这些工件稍后可用于分发。
持续测试
持续测试(CT)的实践是将测试作为开发过程的一部分,而不是等到周期结束后再进行测试。高质量的应用程序对移动应用尤为重要,因为它们通常由许多用户使用,并且消耗大量数据。
移动应用可以通过多种方式进行持续测试,例如:
-
在开始测试之前,确定一个清晰的移动测试策略。
-
在整个开发过程中,确保在初始阶段就开始应用测试,并逐步进行。
-
遵循自动化测试流程,使用不同的测试工具执行测试,如单元测试、集成测试、UI 测试等,而无需人工干预。这对于以一致且及时的方式运行大量测试尤其有用。
-
可以通过基于云的测试,在各种设备和操作系统上运行测试,无需拥有或维护设备。通过在多种设备上测试应用,您可以确保其正常工作。
-
确保在真实的移动设备上测试 UI,而不仅仅是在仿真器或模拟器上。
-
执行足够的性能、压力和安全性测试。
-
进行测试以评估应用程序的互操作性、电池消耗和容错性(FT)。
在第五章,实施强大的移动应用测试策略中,我们将深入探讨移动测试策略、工具和框架。
持续交付
一旦这个过程顺利完成且没有错误,代码就可以通过持续交付(CD)过程快速且轻松地部署;否则,如果有任何错误,过程将停止,并将错误报告给开发人员修复,如下图所示:
图 3.4 – CI/CD 过程
一旦代码提交或变更合并到中央分支(如 main、master 等),CD 会自动将通过 CI 检查的构建版本交付到生产环境(如预发布环境),在那里进行测试和审查,然后才会发布到生产环境。
目标是自动化开发和部署流程,以确保快速、可靠且符合预算的移动应用交付。
移动应用的 CI/CD 过程主要包括以下几个步骤:
-
将构建版本发布给 QA 团队进行额外的检查和测试。
-
如果公司或团队已经参与该程序,则将构建版本发布给 Beta 测试人员。
-
如果一切正常,之后,发布经理或任何负责发布过程的人可以批准该构建并将其发布到应用商店或生产环境中。
持续部署
持续部署通常是 CI/CD 管道的一部分,这意味着部署到代码库的代码将自动部署到生产环境,或者在我们的移动应用案例中,将被部署到 App Store。CI/CD 管道通常被称为这些实践的组合,如下图所示:
图 3.5 – CI/持续部署过程
持续部署过程自动化了应用构建的部署,防止人工干预。唯一会阻止新变更部署到生产环境的情况是构建或测试失败。这种方式用于加速应用生产并更快获得客户反馈。
持续监控
在我们将移动应用发布到生产环境后,这并不是 CI/CD 生命周期的结束,而是进入了另一个阶段。持续监控(CM)涉及监控应用的性能并收集用户行为数据,如图 3.6所示。
这有助于组织改善用户体验、识别潜在问题,并优化移动应用程序的性能。收集的数据可以包括设备性能、网络状况、应用崩溃、用户行为等信息。通常,使用先进的分析工具和技术来分析这些数据,从而提供有关移动应用性能和用户体验的洞察。在 第七章,《建立移动应用监控、可观察性和分析》中,我们将深入探讨移动应用的监控和分析工具,并学习如何有效地将它们与移动 CI/CD 和 DevOps 一起使用:
图 3.6 – CI/CD 的完整过程
有效且具体的移动 CI/CD 平台由一系列不同的移动 DevOps 工具组成,用于解决特定的业务挑战。通过连接移动开发人员、质量工程师和客户,它们确保了一个有利可图的循环。
正如我们发现的,建立移动 DevOps 流程并不容易。自动化流程需要持续的实验和完善。
因此,我强烈建议在你决定开始移动 DevOps 之旅后,从小做起,逐步建立移动 DevOps 工具链和 CI/CD 管道。
根据我之前的经验,我相信如果你尝试一次性实施所有流程和步骤,你会失败并感到沮丧。相反,应该慢慢来,一步步建立;成功是小小努力的总和。
在我看来,如图 3.7所示,移动 DevOps 之旅分为三个阶段:
-
起始阶段/CI 阶段:只实现最小化的 CI 管道,通过克隆源代码、运行静态分析代码或 lint,并运行单元测试。
-
履行承诺阶段——移动 CI/CD 部分管道:通过添加其他一些步骤,如在云设备上运行 UI 测试、生成 UI 测试报告,并根据需求运行安全或性能测试,持续改进第一阶段的管道。此阶段还可以包括将应用程序发布给 QA 团队或相关利益方,并向不同团队发送关于状态的通知。
-
持续阶段——完全自动化的移动 CI/CD 管道:添加更多步骤来实现完全移动 CI/CD,例如将应用程序发布给测试人员和应用商店的步骤,以及通过并行运行 UI 测试来减少构建时间,或添加其他步骤来提高 CI/CD 管道的质量:
图 3.7 – 移动 DevOps 实施阶段
使用这种方法将始终帮助团队改进移动 DevOps 过程,并增强发布过程的性能。这些职责可能由平台工程团队、内部开发者生产力团队或移动工程团队承担,具体取决于组织内部的团队拓扑结构。在 第四章,使用移动 DevOps 实现持续集成和交付,我们将开始使用不同平台实现移动 CI/CD 流水线的实施阶段。
现在我们已经讨论了移动 DevOps 的基础知识,并解释了流程的每个阶段,让我们一起探讨移动 DevOps 和移动应用开发的好处以及 CI/CD 的好处。
CI/CD 对移动应用开发的好处
拥有移动 CI/CD 比仅仅提高现有流程效率有更多正面影响,原因如下:
-
它使开发人员能够专注于编写代码并监控生产中的移动应用
-
更快的部署时间和更快的市场交付
-
所有版本的移动应用程序都可供 QA 和产品利益相关者访问
-
测试结果、代码更改日志和发布日志始终可用
-
提升沟通与生产力
-
提升员工参与度
-
客户更加满意
确定移动 CI/CD 流水线中将使用的工具和技术。版本控制系统、构建自动化工具、测试框架或部署平台可能包含在此列表中。
移动 DevOps 的工具和基础设施
正如我们之前讨论的,移动 DevOps 是一组旨在简化移动应用开发和发布的实践、工具和基础设施。它实现了持续集成、测试、交付和监控,确保开发人员能够快速迭代、部署和维护高质量的移动应用。移动 DevOps 基础设施的关键组成部分如下所述:
-
版本控制管理系统,如 GitHub,允许团队跟踪其代码库的更改并进行协作。在 第九章,移动 DevOps 最佳实践,我们将更多地了解诸如单体仓库之类的不同 Git 仓库类型,以及如何使用它们。
-
自动化构建和测试过程的工具,如 Gradle、面向 Android 的 Gradle Enterprise 或 iOS 的 Fastlane,允许开发人员专注于编写代码而不是构建和测试。在 第四章,使用移动 DevOps 实现持续集成和交付,我们将更多地了解实践中移动应用程序的不同构建工具,以及如何使用缓存来加速这些工具的构建时间。
-
用于在各种物理设备上测试应用的实验室:这些实验室通常托管在云端,允许团队在多个设备上测试应用程序。在第五章中,实现强大的移动应用测试策略一章,我们将了解使用云设备加速测试过程的最佳实践。
-
用于部署和管理移动应用后端服务的基础设施由云平台提供,如Amazon Web Services(AWS)、Google Cloud Platform(GCP)或 Azure。在第九章中,移动 DevOps 最佳实践一章,我们将了解如何将云服务与移动应用结合使用。
-
测试工具如 Appium、Espresso、XCUITest 和 Detox 可以自动化测试不同平台和设备上的移动应用。在第五章中,实现强大的移动应用测试策略一章,我们将学习各种测试工具的差异,以及哪些工具或框架适合我们的团队。
-
使用 fastlane 等工具,管理移动应用分发过程,如自动管理代码签名、证书、配置文件和密钥库,变得更加简单。在第六章中,移动应用发布管理一章,我们将学习如何使用不同的工具(如 Firebase App Distribution、fastlane、TestFlight 等)自动将应用分发给 Beta 用户或 App Store。
在我看来,移动 CI/CD 流水线就像乐高玩具——你总是在使用不同的工具、配置和依赖。你所需要做的就是决定你的流水线应该是什么样子的。
当你玩乐高积木时,你会感觉自己像个建筑师。你可以通过构建不同的形状和结构来创造不同的结果。
构建适合自己需求的移动 CI/CD 流水线的核心思想是知道如何正确使用各个组件。构建移动 CI/CD 流水线没有固定的模板,关键是始终实施适合自己需求的步骤。
通过移动 DevOps,开发人员、测试人员、产品经理和发布管理团队可以更加高效地协同工作。
DevOps 和 CI/CD 基于快速开发、测试和发布的理念,这使得技术能够快速迭代。
这是一种紧密契合公司需求的理念,从初创公司到大型企业都可以受益。企业需要能够快速将产品推向市场,并不断提高质量,以获得竞争优势。
制定移动 CI/CD 策略是确保成功交付移动应用的关键部分。它涉及创建一个自动化开发、测试和部署应用的过程,帮助确保应用具有高质量并能快速发布。
因此,团队或组织应该选择适合业务和投资回报率(ROI)的移动 DevOps 和 CI/CD 平台。让我们比较自托管和基于云的 CI/CD 选项,以了解哪种选项或选择最适合我们的组织。
选择自托管和基于云的 CI/CD 之间的区别
使用自托管 CI/CD,组织可以完全控制其环境和数据。作为额外的好处,从长远来看,这种方式可能更具成本效益,因为组织可以通过利用现有基础设施避免云服务的费用。
例如,如果团队已经为 Web 应用、API 和后端服务使用了 CI/CD 平台,它就需要将移动部分集成进去。
这需要教育 DevOps 团队了解移动应用的要求,以便能够将移动部分添加到现有的 CI/CD 平台中,例如配置所需的硬件和软件,并实现支持移动发布流程所必需的流程和前提条件,以便将应用发布到应用商店,如应用签名、上传证书、配置配置文件以及创建密钥库。
此外,设置自托管的 CI/CD 解决方案可能非常耗时,并且可能需要专业知识。此外,团队还需要承担维护和更新其环境和基础设施的责任,这可能对资源造成负担。
另一方面,基于云的 CI/CD 解决方案相较于自托管解决方案有几个优势,具体包括:
-
设置和维护它们的过程通常更容易,并且它们具有更好的可扩展性。由于基于云的服务可以远程访问,它们也更加便捷。此外,它们可以更加灵活,因为它们可以轻松地与其他工具和服务集成。基于云的 CI/CD 通过提供异地托管,消除了对现场基础设施的需求。通过允许立即使用 CI/CD,基于云的 CI/CD 可以减少成本和设置时间。
-
云中的 CI/CD 还具有可扩展性,可以轻松扩展或缩减资源。
除了其好处,基于云的 CI/CD 也有一些缺点。对数据缺乏控制可能带来安全隐患。此外,基于云的服务费用可能迅速增加,特别是当组织需要使用多个服务时,因为必须监控机器和构建的费用。
需要注意的是,这还取决于项目的具体需求和要求,以及组织的规模和资源。如以下屏幕截图所示,自托管 CI/CD 可能耗时,但它更具可定制性;另一方面,云 CI/CD 可以通过管理必要的任务(如更新基础设施或技术栈)帮助开发者节省时间:
图 3.8 – 自托管与云托管(PaaS)CI/CD
基于云的 CI/CD 解决方案可能是 小团队或初创公司 的最佳选择,而更大的组织可能更倾向于拥有 更多的环境控制,并选择自托管解决方案,但最终选择总是取决于团队的期望和需求。
基于云的 CI/CD 版本通常被称为 CI/CD 即服务。CI/CD 工具由专门的组织开发、维护并托管,客户可以通过互联网访问。
相比之下,自托管的 CI/CD 意味着你要么构建自己的 CI/CD 工具,要么使用第三方 CI/CD 工具(通常是开源的)托管在你的基础设施上。它可以是本地服务器或 IaaS 平台,如 AWS、GCP 或 Microsoft Azure。
总结来说,这个对比表概述了自托管与基于云的 CI/CD 解决方案之间的主要差异,包括控制、成本、可扩展性和安全等因素。选择哪种方案取决于项目和组织的具体需求:
| 标准 | 自托管 CI/CD | 基于云的 CI/CD |
|---|---|---|
| 控制 | 对环境和数据有完全的控制 | 对数据和环境的控制较少 |
| 成本 | 从长远来看更具成本效益;利用现有基础设施 | 成本可能迅速累积;需要监控机器和构建成本 |
| 设置与维护 | 设置耗时;需要专门的技术知识;团队维护基础设施 | 设置更简单;维护需求较少;托管在异地 |
| 可扩展性 | 受现有基础设施的限制 | 高度可扩展;可以轻松扩展或减少资源 |
| 可访问性 | 仅限于内部或本地网络访问 | 可以远程访问;更易于访问 |
| 灵活性与集成 | 可定制;可能需要与其他工具和服务进行更多的手动集成 | 更易与其他工具和服务集成;更灵活 |
| 安全性 | 对数据安全有更高的控制 | 由于对数据的控制较少,可能存在安全隐患 |
| 适用性 | 更适合有资源来管理环境和数据的大型组织 | 更适合需要立即访问和较低前期投资的小团队或初创公司 |
| 实施 | 自建 CI/CD 工具或使用托管在你基础设施上的第三方工具 | 由专门的组织提供的 CI/CD 即服务,客户可通过互联网访问 |
表 3.1 – 自托管与基于云的 CI/CD 解决方案之间的差异
移动特定的 CI/CD
移动 CI/CD PaaS 是指使用基于云的服务平台来自动化移动应用的构建、测试和部署。移动 CI/CD PaaS 提供商提供一系列工具和服务,帮助组织简化和优化其移动应用的开发和发布过程。市场上有不同的平台提供此类服务,例如 Bitrise (www.bitrise.io/)、Codemagic (codemagic.io/) 或 Apple 的 Xcode Cloud (developer.apple.com/xcode-cloud/)。市场上所有这些平台将会在第四章,《实现移动 DevOps 中的持续集成和交付》中进行讨论并展示实例。
移动 CI/CD 服务有以下几个好处:
-
这些平台通常配备了管理代码变更和协作工具,能够与版本控制系统如 GitHub、Bitbucket 和 GitLab 集成。
-
开发人员可以通过自动化构建和测试过程,专注于编写代码,利用移动 CI/CD 服务。
-
云设备的集成:这些平台提供用于跨各种设备和平台测试和部署移动应用的工具。
-
使用监控和分析工具识别并解决移动应用中的问题:移动 CI/CD 服务平台通常提供跟踪移动应用性能和使用情况的工具。
-
与建立和维护内部移动 CI/CD 基础设施相比,移动 CI/CD PaaS 需要的是每月订阅费用,而不是前期投资。
-
组织可以根据需要调整其移动 CI/CD 能力,利用移动 CI/CD 服务的可扩展性。
-
对于那些刚接触移动 CI/CD 或者在此领域缺乏内部专业知识的组织,移动 CI/CD PaaS 可以非常有价值。
-
它通常通过允许移动 CI/CD 服务提供商维护和更新基础设施,释放 IT 员工去专注于其他任务。
-
许多提供移动 CI/CD 服务的供应商提供强大的安全措施,保护移动 CI/CD 过程和敏感数据的完整性。
发布过程可能还需要加速,因为移动应用需要高性能的快速机器来构建、测试和发布应用。在第四章,《实现移动 DevOps 中的持续集成和交付》中,我们将深入探讨,了解不同的移动 CI/CD 平台及其优缺点。
在讨论了自托管和云托管 CI/CD 对我们团队的利弊之后,每个团队应该自己决定哪个是最佳选择。现在是时候讨论我们是否需要一个移动 DevOps 工程师,还是可以自己管理。
正如我们讨论了移动 DevOps 和 CI/CD 基础知识,并了解了自托管和云 CI/CD 平台,你可能在想,我们需要一位移动 SRE 或 DevOps 工程师吗?这是一个重要的问题,我们来回答一下。
我们需要一位移动 DevOps 工程师吗?
最好的答案通常是,这取决于团队的目标、规模、技能和经验。你可以让不同的团队成员负责移动 DevOps 各个阶段,但不要忘记我们之前提到过,这是一项团队合作的工作。然而,如果团队中已经有一位 DevOps 工程师负责公司的 DevOps 实施工作,那么他也可以帮助移动团队,或通过以下方式参与到移动部分工作中:
-
理解移动的 DevOps 实践,例如代码签名和发布移动应用。
-
学习移动应用开发的基础知识。学习新的编程语言,例如 Kotlin 或 Swift,并积累构建移动应用的经验。
-
在你发展云计算知识的过程中,在云端创建、部署和管理移动应用。
-
参与开源项目或从事个人项目,获取在移动 DevOps 项目中动手实践的经验。
-
跟上最新的趋势和移动 DevOps 的最佳实践。
另一方面,经验丰富的移动开发者可能能够承担实施移动 DevOps 的责任,因为他们熟悉移动开发过程、大多数挑战,并且有必要提高他们在移动应用 CI/CD 方面的知识。
有一种观点认为,这是你在工作中采用的一种做事方式和过程。通过理解这四个基本的 DevOps 实践,即使是独立开发者或独立开发团队也能提高他们的生产力。
但就我而言,我认为这可以是两种方法的结合,因为我们可以让 DevOps 工程师和经验丰富的移动工程师一起合作,帮助移动团队更快速、更可靠地实现他们的目标并交付应用。确保有人负责服务器的基础设施,有人负责工具和框架,这一点至关重要。
总结
移动 DevOps 是高质量移动应用开发的关键实践。它是一个强大的过程,能够帮助团队快速高效地开发和部署移动应用。通过利用自动化、测试和持续部署,团队可以确保其应用程序稳定、安全并保持最新。借助移动 DevOps,团队可以更快速、更高效地实现他们的移动开发目标。
移动 DevOps 还通过自动化重复性任务简化了开发过程。这使得开发人员可以专注于开发中的创新性方面,例如创建创新功能,而不必担心日常琐事。此外,它确保移动应用遵循最佳实践,并针对特定平台和设备进行了优化。这使得组织能够创建高质量的移动应用,充分满足用户需求。
通过使用自动化、版本控制、云服务、监控与分析以及安全措施,开发人员可以简化开发过程,提高应用的整体质量。在这些实践的帮助下,移动应用开发人员可以更快速、更可靠地交付更好的应用。
CI/CD 流水线的实现将在下一章讨论,首先从 CI 部分开始,探索不同的 CI 提供商和需要遵循的步骤,然后集成 CD 部分,创建我们将在移动应用开发中使用的自动化 CI/CD 流水线。
第二部分:实现移动 DevOps 环境
移动 DevOps 依赖于自动化过程来实现移动应用的持续集成和交付。这意味着代码更改会自动构建、测试,并部署到预发布和生产环境,无需人工干预。
本部分包含以下章节:
-
第四章*,通过移动 DevOps 实现持续集成与交付*
-
第五章*,实施强大的移动应用测试策略*
-
第六章*,移动应用发布管理*
第四章:通过移动 DevOps 实现持续集成与交付
在持续交付中,移动应用中的代码更改会自动进行构建、测试和发布。借助移动 DevOps,软件开发人员、测试人员、发布经理和 DevOps 工程师携手合作,以提升移动应用开发的速度和质量。当这些实践结合时,移动应用的交付可以实现持续交付。
本章将讨论以下主题:
-
选择 CI/CD 提供商时需要考虑的因素
-
选择 CI/CD 提供商
-
为移动应用实施 CI/CD 流水线
-
为移动应用设置构建和单元测试
介绍
移动应用的 CI/CD 是一个能够让组织快速高效地发布和更新其移动应用的过程。它还允许团队快速测试和发布他们的移动应用,确保代码的稳定性、安全性和最新性。此外,它还允许团队快速解决在移动应用中发现的任何漏洞或问题。
在快速发展的移动应用开发领域,持续集成(CI)和持续部署(CD)已成为优化开发流程、提高代码质量和实现快速迭代发布的关键实践。本章将探讨 CI/CD 在移动应用开发中的重要性,阐明其好处,并通过实际案例展示它对移动开发生命周期的影响。
如在第三章《移动 DevOps 基础》中提到的,我们将讨论如何在移动 DevOps 中实施 CI 和 CD 的步骤,但首先,让我们讨论如何选择适合您团队规模和业务需求的移动应用 CI/CD 提供商:
图 4.1 – 持续集成工作流程
我们将从 CI 部分开始,自动化构建和测试过程,内容包括以下内容:
-
为移动应用选择 CI/CD 提供商
-
为移动应用设置 CI 服务器
-
为移动应用设置构建和单元测试
在此之前,让我们讨论如何为移动应用选择 CI/CD,如何与市场上最受欢迎的 CI/CD 提供商一起设置 CI 服务器,以及每个提供商的优缺点。
选择适合您移动应用的 CI/CD 提供商至关重要,以确保开发、测试和发布过程的顺利进行。选择移动应用开发项目的 CI/CD 提供商时需要考虑以下因素:
-
平台支持:确保 CI/CD 提供商支持您的应用所针对的平台(例如,iOS、Android、React Native、Flutter 等)。某些提供商专注于单一平台,例如 Xcode Cloud,而其他一些提供商支持多个平台,例如 Bitrise。如果您的团队正在构建多个移动应用,请考虑这个因素。
-
性能和可靠性:提供商应能提供高性能、最小的停机时间和快速的构建时间。例如,CI/CD 平台提供了洞察和指导功能,用以跟踪我们的 CI/CD 性能和健康状态。这将确保一个顺畅且高效的开发过程。
-
构建配置和环境:选择适合你移动应用的 CI/CD 提供商时,要考虑可用的构建配置和构建环境选项。寻找具有灵活构建流水线和可定制环境的提供商,以支持你项目的需求。这些功能能够节省时间和精力,同时确保高效的构建过程和成功的项目部署。例如,大多数公司都在构建白标应用,这些应用需要使用不同的配置进行构建,以便能够在不同的值下复用相同的构建流水线。
-
可扩展性:扩展和发展你的团队需要考虑此因素,确保 CI/CD 提供商能够处理日益增长的复杂性、构建频率和应用开发人员的数量。你的提供商应提供可扩展的基础设施和资源,以满足你不断增长的需求,有时还需为你的团队提供专用机器,或者更换机器类型和技术规格。
-
集成:提供商应能与现有工具无缝集成,如版本控制系统、项目管理工具、缺陷跟踪工具、云工具、监控工具或特性标记工具,以便能够衡量整个移动 DevOps 过程的成功。
-
安全性和合规性:提供商应遵循严格的安全标准,并提供加密、访问控制和审计日志等功能。确保提供商支持你的应用符合特定的合规性要求,特别是如果它是云提供商,并且你的数据和客户的数据将存储在云中,例如在电子银行应用中。
-
易用性:选择一个具有用户友好界面、全面文档和良好支持的提供商。如果你遵循这些步骤,CI/CD 流水线就可以更容易地设置、维护和故障排除;例如,Bitrise 和 Codemagic 提供了构建流水线的 GUI。
-
社区和支持:通过一个活跃的社区和强大的客户支持,你可以轻松解决问题并得到答复。你可以通过专业论坛、支持渠道或社区论坛了解是否提供专业服务或咨询。
-
定价:在我看来,这个因素非常重要,即使 CI/CD 提供商在购买工具时有不同的功能,各种因素也会影响这个决策,因此在考虑每月构建次数、并行构建、构建分钟数和存储等因素时,你需要比较不同 CI/CD 提供商的定价计划。最好的提供商会在不妥协功能的情况下,为你的预算提供最大价值。
因此,选择 CI/CD 提供商最终是一个需要团队根据业务和团队需求做出的决定。
六个最受欢迎的移动应用 CI/CD 提供商概述
在讨论了需要考虑的因素后,我们来看看移动 CI/CD 市场上可用的 CI/CD 提供商。以下是六个最受欢迎的移动 CI/CD 提供商:
-
Bitrise
-
Codemagic
-
GitHub Actions
-
Xcode Cloud
-
Visual Studio App Center
-
Ionic AppFlow
要找到最适合你的移动应用项目的提供商,你需要根据前述因素评估每个提供商。
Bitrise
Bitrise (bitrise.io/) 是一个基于云的 CI/CD 平台,专门为移动应用开发设计。它简化了构建、测试和部署 iOS、Android 和跨平台应用的过程,帮助开发者确保他们的应用可靠且高质量:
图 4.2 – Bitrise 主页
Bitrise 的移动优先策略使其成为移动应用开发者的 CI/CD 解决方案,并提供专门针对移动开发工作流的功能和工具。
Bitrise 与流行的版本控制系统(如 GitHub、GitLab、自托管 GitLab 和 Bitbucket)以及移动应用开发工具(如 fastlane、Xcode 和 Android SDK)无缝集成,如图 4.3所示:
图 4.3 – Bitrise 的版本控制系统
Bitrise 的可视化工作流编辑器允许开发者轻松设计和配置他们的 CI/CD 管道,而无需手动编辑配置文件,如图 4.4所示:
图 4.4 – Bitrise 的工作流编辑器
Bitrise 提供了广泛的预构建和社区步骤,可以轻松添加到工作流中,简化了设置常见移动应用开发任务的过程,如图 4.5所示:
图 4.5 – Bitrise 的集成步骤
Bitrise 支持 iOS 模拟器和 Android 模拟器,简化了在各种设备和环境中测试移动应用的过程。
该平台提供免费的(爱好者)计划,包含 90 分钟的构建时长、每月 300 个积分,并支持最多 5 个同时构建,使用 macOS M1 虚拟机,使其对小型项目和个人用户具有成本效益。
升级到高级计划可以为大型项目或团队提供更频繁或更长时间的构建。然而,Bitrise 的定价可能会对需要额外构建能力或功能的大型团队或项目来说较为昂贵。
通过与知名应用商店和测试服务(如 Google Play、Apple App Store 和 TestFlight)的无缝集成,Bitrise 简化了发布流程。
开发人员可以利用 Bitrise Insights 来识别并解决瓶颈,优化构建流程,并更有效地使用积分。
数据和配置设置可以安全存储,确保未经授权的人员无法访问。通过使用 Bitrise 的团队管理功能,开发人员可以在项目中协作并控制对特定工作流和环境的访问。
示例
让我们来看一个关于为 Android 创建 Bitrise 应用并进行配置的示例。
前提条件
你需要以下内容:
-
一个 Bitrise 账户 (
app.bitrise.io/users/sign_up) -
一个 GitHub 账户 (
github.com/join) -
一个 Android 应用
-
一个 Google Play Console 账户或 Apple Developer ID,以便将来可以将你的移动应用发布到相关的应用商店
让我们开始吧!
开始使用
请按照以下步骤操作:
- 要开始使用 Bitrise for Android,你需要选择 添加新应用,如 图 4.6 所示:
图 4.6 – 添加新应用
- 然后,选择工作区类型,以指定应用是否具有私人或公共访问权限,如下图所示:
图 4.7 – 选择应用的隐私设置
- 下一步是从提供商(如 GitHub)选择仓库,如下图所示:
图 4.8 – 选择仓库
- 然后,选择添加 SSH 密钥,以便能够访问源代码,如下图所示:
图 4.9 – 添加 SSH 密钥
- 从列表中选择分支名称,并选择 是,自动检测配置 选项,让 Bitrise 自动检测应用程序类型,如下图所示:
图 4.10 – 选择分支
- Bitrise 将检测到该应用为 Android 应用,并会提供适当的机器类型和堆栈。现在,你可以添加应用模块和变体,如下图所示:
图 4.11 – 选择应用模块
这是项目配置,包括 Android 堆栈和所有其他信息:
图 4.12 – 确认配置
- 下一屏幕将是应用图标。在这里,你可以上传自定义图像或使用应用程序目录中的图标,如下图所示:
图 4.13 – 应用图标
- 接下来,你必须注册一个 webhook 并触发第一次构建,如图 4.14和图 4.15所示:
图 4.14 – 注册 webhook
图 4.15 – 运行第一次构建
- 第一次构建将开始。此时,你可以查看构建日志和构建的详细信息,如下图所示:
图 4.16 – 构建日志详情
- 一旦构建完成,你可以检查构建的状态,查看它是成功还是失败,如下图所示:
图 4.17 – Bitrise 上的成功构建
- 之后,你可以点击工作流编辑器按钮,查看或修改 CI 工作流,添加或移除步骤,如下图所示:
图 4.18 – Android 工作流
- 在工作流编辑器区域,你可以配置触发映射,或根据 Gitflow 运行工作流时的条件,例如在每次拉取请求、新标签或推送新代码时运行,具体如下图所示:
图 4.19 – 如何在 Bitrise 上触发构建
- 此外,你还可以为任何第三方工具或服务(如 Slack webhook)添加秘密环境变量,如图 4.20和图 4.21所示:
图 4.20 – 添加秘密环境变量
图 4.21 – 添加 Slack webhook
- 你还可以更改堆栈和机器类型,如下图所示:
图 4.22 – 更改堆栈和机器类型
- 如果工作流中包含任何单元测试或 UI 测试,你可以在测试报告插件中访问自动生成的测试结果,如下图所示:
图 4.23 – 测试报告插件
Bitrise 还具有一个 bitrise.yml 文件,用于保存你在 yml 文件中的所有配置;你可以将其与源代码一起保存,或者保存在 Bitrise 网站上。以下是一个 bitrise.yml 文件的示例链接:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-4/bitrise.yml。
注意
其他应用程序,如 iOS、macOS、Flutter、React Native、Ionic 和 Cordova,使用相同的流程,但步骤会根据类型有所不同。
Codemagic
Codemagic (codemagic.io/start/) 是一个完全托管在云端的 CI/CD 解决方案,专为移动应用开发设计,特别强调跨平台项目。
该平台简化了构建、检查和发布 iOS、Android 以及跨平台应用程序的过程,使开发者能够高效地生产高质量的移动应用程序。本分析将涵盖 Codemagic 的优点、缺点和功能,并比较 Codemagic 与市场上其他 CI/CD 解决方案的表现:
图 4.24 – Codemagic 首页
开发者可以通过用户界面或高度可定制的codemagic.yaml文件轻松配置 Flutter 构建,从而在 Android、iOS、Web 和桌面平台上创建应用程序。
Codemagic 无缝集成了 GitHub、GitLab 和 Bitbucket 等知名版本控制系统,并兼容各种应用商店、beta 测试服务和通知工具。
该平台简单的设置过程使开发者能够快速建立他们的 CI/CD 管道,而无需深入的技术知识。
通过 Codemagic,开发者可以使用 YAML 配置文件或基于 Web 的配置编辑器设计自定义工作流,赋予 CI/CD 过程更多灵活性和控制权。
该平台提供慷慨的免费套餐,包括每月 500 分钟的构建时间、120 分钟的构建超时限制和 macOS M1 虚拟机,适合小型项目和个人开发者,但需要启用计费才能使用完整功能。
Codemagic 提供专门支持 Flutter 项目的功能,自动检测项目设置并应用构建和测试 Flutter 应用程序的优化。
该平台支持 iOS 模拟器和 Android 模拟器,使开发者能够在各种设备和配置上评估他们的移动应用程序。
Codemagic 与 Google Play 和 Apple App Store 等流行的应用商店以及 TestFlight 等 beta 测试服务集成,简化了部署流程。
敏感数据和配置设置可以安全存储,确保不会在日志中泄露或被未经授权的用户访问。
Codemagic 还包括无限的团队席位和访问管理功能,方便项目协作,并允许开发者控制对特定工作流和环境的访问。
示例
在这个示例中,我们将使用 Codemagic 构建和测试一个 Flutter 应用程序,并根据我们的需求进行配置。
前提条件
你将需要以下内容:
-
Codemagic 账户 (
codemagic.io/signup) -
GitHub 账户 (
github.com/join) -
Flutter 应用程序
-
一个 Google Play Console 账户或 Apple Developer ID,以便之后将你的移动应用发布到相关的应用商店
让我们开始吧!
开始使用
按照以下步骤操作:
- 创建账户后,你可以开始在 Codemagic 上设置你的第一个应用程序,方法是选择仓库和项目类型,如下图所示:
图 4.25 – 选择仓库和项目类型
- 接下来,在 工作流编辑区,选择你偏好的配置,例如来自你的 Flutter 应用的 iOS、Android 或两者,以及你的机器类型,如 图 4.26 和 图 4.27 所示:
图 4.26 – Codemagic 的工作流编辑区
图 4.27 – Codemagic 上的机器类型
- 然后,你可以配置构建触发器,或者在测试失败时让构建失败,如 图 4.28 和 图 4.29 所示:
图 4.28 – 构建触发器
图 4.29 – 配置测试
- 接下来,你可以配置 Android 的 Flutter 配置,包括 Flutter 版本、项目路径 和 Android 构建格式,如下图所示:
图 4.30 – 指定 Flutter 配置
- 然后,你可以设置通知,并选择是否需要发送电子邮件或 Slack 通知,如下图所示:
图 4.31 – 配置通知
- 现在,你可以通过选择工作流名称和分支名称来触发第一次构建,如下图所示:
图 4.32 – 启动新构建
- 现在,你可以查看构建日志及其状态,如 图 4.33 和 图 4.34 所示:
图 4.33 – 构建视图
图 4.34 – 构建成功
使用 Codemagic,类似于 Bitrise,你可以通过 codemagic.yml 文件将 .yaml 文件保存在 Codemagic 网站上,如 图 4.35 和 图 4.36 所示:
图 4.35 – 从工作流编辑区将设置更改为 codemagic.yaml
图 4.36 – YAML 文件
这是一个通过 iOS 和 Android 构建 Flutter 的 YAML 文件示例:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-4/codemagic.yml。
GitHub Actions
GitHub Actions (github.com/features/actions) 是一个自动化平台,旨在通过启用 CI/CD 工作流来简化移动开发:
图 4.37 – GitHub Actions 首页
作为 GitHub 生态系统的一部分,GitHub Actions 与平台紧密集成,使得移动开发者可以轻松设置并使用他们现有的代码库。
GitHub Actions 允许开发者使用简单的 YAML 语法创建自定义工作流,从而实现高度特定和复杂的自动化任务。尽管在 CI 构建过程中提供了一个图形用户界面(GUI)来显示步骤和连接,但目前使用 Codemagic 或 Bitrise 等图形平台构建工作流并不可行:
图 4.38 – 应用程序仓库中的工作流文件夹
GitHub Actions Marketplace 提供了社区贡献的各种预构建操作,这些操作可以轻松地集成到工作流中,从而节省时间和精力。
GitHub Actions 支持多种平台,包括 Windows、macOS 和 Linux,类似于 Codemagic,使得移动开发者可以在多个环境(如 Flutter 应用)上测试和发布项目。您可以从单一代码库构建和发布移动、Web 和桌面应用程序:
图 4.39 – GitHub Actions 中的机器类型
GitHub 提供自托管的运行器,您可以自定义环境以在 GitHub Actions 工作流中运行任务。
它提供了慷慨的免费额度,对于个人和组织的私有仓库,每月提供 2,000 分钟的使用时间。然而,较大的项目和团队可能很快就会超过分配的分钟数,并需要升级到付费计划。
此外,GitHub 提供了一些功能,如 Codespace,它是一个具有灵活计算和预配置容器的云开发环境,包存储,GitHub 问题(如错误或安全问题)和项目管理,以及新的 GitHub Copilot 插件,可以在编辑器中提供整行或整个函数的建议。
对于不熟悉 YAML 或 CI/CD 概念的用户来说,设置 GitHub Actions 可能需要一定的学习曲线。由于 GitHub Actions 是 GitHub 生态系统的一部分,迁移到其他版本控制平台可能会遇到挑战。
虽然 Marketplace 提供了许多预构建的操作,GitHub Actions 可能不支持某些第三方服务,用户需要创建自定义操作或寻找替代解决方案。
GitHub Actions 支持多种触发器,包括推送、拉取请求、问题创建和计划事件。这个功能让开发人员可以同时在多个版本的编程语言、平台和配置上测试代码。
缓存是 GitHub Actions 提供的另一个功能。它允许你缓存依赖项,加速构建时间,减少资源使用。GitHub Actions 存储构建工件和日志,使得访问和与团队成员共享结果变得更容易。
除了提供安全性,GitHub 还包括代码扫描、秘密扫描、依赖项审查(带有 dependabot 警报),以及防止敏感数据或配置设置在日志中泄露或与未授权人员共享的功能。
示例
让我们看一个为 Android 应用设置 GitHub Actions 的例子,以便构建并运行单元测试和 lint 测试。
前提条件:
-
一个 GitHub 账户(
github.com/join) -
一个 Android 应用
-
你需要一个 Google Play 控制台帐户或 Apple Developer ID,才能将你的移动应用发布到相关的应用商店。
让我们开始吧!
开始使用
让我们开始吧:
- 如果你已经有一个 Android 应用,可以点击Actions按钮开始使用 GitHub Actions,如下图所示:
图 4.40 – 开始使用 GitHub Actions
- 点击
Android找到这个模板,如下图所示:
图 4.41 – 默认的 gradle.yaml 文件
- 在提交更改后触发构建。GitHub Actions 将启动新的构建。此时,你可以查看日志,如图 4.42和图 4.43所示:
图 4.42 – 构建日志视图
图 4.43 – 构建成功
这是一个 GitHub Actions Android CI YAML 文件示例:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-4/.github/workflows/android.yml。
示例
在下一个例子中,我们将为 iOS 应用设置 GitHub Actions,以便我们可以构建该应用并运行必要的单元测试:
图 4.44 – 开始使用 iOS 应用
这是一个 iOS 应用的 YAML 文件示例:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-4/.github/workflows/iOS.yml。
注意
如果你的应用不包含 podfile,可以删除安装 CocoaPods 步骤。
Xcode Cloud
Xcode Cloud (developer.apple.com/xcode-cloud/) 是苹果构建的 CI/CD 服务,直接集成到 Xcode 开发环境中。它旨在简化 iOS、macOS、watchOS 和 tvOS 应用的构建、测试和部署过程:
图 4.45 – Xcode Cloud 首页
Xcode Cloud 完全集成到 Xcode 开发环境中,为苹果开发者提供无缝的体验。
与 Xcode 的集成意味着设置 CI/CD 流程非常简单,几乎不需要配置。
使用 Xcode Cloud,您必须拥有 Apple Developer Program 会员资格。
Xcode Cloud 提供免费版,但每月仅包含 25 小时的计算时间。Xcode Cloud 为构建和测试苹果平台应用进行了优化,确保最佳性能和兼容性。它支持在多个设备和配置之间并行测试,加速测试过程,提高整体效率。
作为苹果的服务,Xcode Cloud 旨在保护源代码和构建工件,贯穿整个 CI/CD 过程。Xcode Cloud 专门为苹果平台设计,因此不适用于 Android 或其他非苹果平台的应用开发。
Xcode Cloud 与 Xcode 的紧密集成可能会限制其与更通用的 CI/CD 解决方案相比可用的自定义程度。
由于 Xcode Cloud 集成了 Xcode,开发者如果偏好其他开发环境,可能会觉得它不太吸引人。
特性
Xcode Cloud 提供自动化的代码诊断功能,帮助您识别问题并提供改进建议。
Xcode Cloud 与 App Store Connect 集成,简化了将应用分发给测试人员并提交到 App Store 的过程。它支持团队协作,允许团队成员共同参与项目,分享结果并协调工作。
示例
让我们看一个使用 Xcode Cloud 构建、测试和归档 iOS 应用的示例。
前提条件:
您需要具备以下条件:
-
一个 Apple Developer ID,用于发布您的移动应用到 App Store
-
一个 GitHub 账户 (
github.com/join) -
一个 iOS 应用
让我们开始吧!
入门
按照以下步骤操作:
- 要开始使用 Xcode Cloud,请在 Xcode 中打开 iOS 应用,点击左侧菜单中的 报告导航器,然后点击 开始使用 Xcode Cloud。之后,您必须选择一个产品,即您要构建的应用:
图 4.46 – Xcode Cloud 在 Xcode IDE 内部
- 此时,工作流编辑器区域将打开。在这里,您可以根据需要修改步骤,如 图 4.47 和 图 4.48 所示:
图 4.47 – 工作流程编辑区域
图 4.48 – 编辑工作流程
- 您可以为您的 iOS 应用添加不同的步骤,如构建、测试、分析和存档,如下图所示:
图 4.49 – 添加不同步骤,如测试和分析
- 接下来,您需要将 Xcode Cloud 连接到 GitHub 存储库,以便访问您的源代码并安装 Xcode Cloud 应用,如 图 4*.50*、图 4*.51* 和 图 4*.52* 所示:
图 4.50 – 授予访问源代码的权限
图 4.51 – 将 Xcode Cloud 与 GitHub 连接
图 4.52 – 安装 Xcode Cloud 应用
- 选择您的存储库用于 Xcode Cloud 应用,如下图所示:
图 4.53 – 选择存储库
- 接下来,您可以通过 App Store Connect 从 Xcode Cloud 创建一个应用记录,以便发布应用到 App Store(如果您没有现有的),如下图所示:
图 4.54 – 在 App Store Connect 上创建应用
- 现在,您可以通过选择分支名称并单击 开始构建 按钮来启动构建,如下图所示:
图 4.55 – 开始构建
- 您现在可以通过 Xcode IDE 查看构建日志,如下图所示:
图 4.56 – 构建视图
- 一旦构建完成,您可以检查其状态,查看是否成功完成:
图 4.57 – 成功构建
- 另外,您可以查看日志和测试工件中的测试结果,如图 4**.58 和 图 4*.59* 所示:
图 4.58 – 测试 - iOS 视图
图 4.59 – 存档 - iOS 视图
注
Xcode Cloud 的工作流程中没有 YAML 文件。但是,您可以从 Xcode IDE 或 App Store Connect 修改或访问工作流程,如下图所示:
图 4.60 – Xcode Cloud 在 App Store Connect 上
Visual Studio App Center
Visual Studio App Center(appcenter.ms/)是由微软开发的专为移动应用开发设计的基于云的 CI/CD 平台。
它支持 iOS、Android、React Native 和 Xamarin 项目,简化了构建、测试、分发和监控移动应用的过程。本节将讨论 Visual Studio App Center 的优缺点和功能,以及它与市场上其他 CI/CD 解决方案的比较:
图 4.61 – App Center 首页
该平台拥有用户友好的设置过程,使开发者能够快速建立 CI/CD 管道。你可以与广泛使用的版本控制系统(如 GitHub、Bitbucket 和 Azure Repos)集成,并连接应用商店和 Beta 测试服务。
App Center 使得在云端设备上进行自动化测试成为可能,帮助开发者验证在多个目标平台间的兼容性和性能。尽管对于需要更多构建能力或功能的大型团队或项目来说,其定价可能较高,但其简化的设置过程弥补了这一缺点。然而,它可能缺乏其他 CI/CD 平台提供的自定义选项。
由于 App Center 专注于移动应用开发,因此它可能不是非移动或 Web 开发项目的理想选择。该平台简化了构建和签名 iOS 和 Android 应用的过程,确保发布过程中的一致性。它支持在云端的各种真实设备上进行测试,保证在目标平台间的兼容性和性能。
App Center 简化了将应用分发给 Beta 测试者、应用商店或企业环境的过程,并支持 空中下载 (OTA) 更新。此外,它提供崩溃报告和分析功能,使开发者能够实时监控应用性能并检测问题。最后,该平台还管理并推送通知给用户,支持细分和定向推送。
示例
让我们学习如何为 Android 应用设置 Visual Studio App Center。
前提条件
你需要以下内容:
-
一个 App Center 账户 (
appcenter.ms/create-account) -
一个 GitHub 账户 (
github.com/join) -
一个 Android 应用
-
一个 Google Play Console 账户或 Apple Developer ID,以便稍后将你的移动应用发布到相关的应用商店
开始吧!
开始使用
按照以下步骤操作:
- 创建 App Center 账户后,下一步是通过选择应用类型并连接源代码提供商来添加新应用,如 图 4.62 和 图 4.63 所示:
图 4.62 – 添加新应用
图 4.63 – 连接源代码服务
- 接下来,选择应用模块、变体和其他配置选项,然后点击 保存并构建 按钮以启动新的构建,如 图 4.64 和 图 4.65 所示:
图 4.64 – 配置构建
图 4.65 – 运行构建
注意
使用 App Center 的工作流没有 YAML 文件;你只能从网站修改或访问工作流。
Ionic AppFlow
Ionic AppFlow (ionic.io/appflow) 是一个基于云的 CI/CD 平台,专门为使用 Ionic 框架进行移动应用开发而设计。它简化了构建、测试和部署基于 Ionic 构建的 iOS、Android 和 渐进式 Web 应用 (PWA) 的过程,帮助开发人员高效地交付高质量的应用:
图 4.66 – AppFlow 首页
Ionic AppFlow 专为 Ionic 框架项目设计,提供了专门的功能和增强功能,用于构建和部署 Ionic 应用。该平台简化了设置过程,使开发人员能够高效地配置 CI/CD 管道,而无需深入的技术专长。支持实时更新,允许将更改和 bug 修复直接部署到用户设备,而无需通过应用商店审核。
Ionic AppFlow 无缝集成了流行的版本控制系统,如 GitHub、GitLab 和 Bitbucket,以及应用商店、测试服务和通知工具。它还自动化了 iOS 和 Android 的构建过程,简化了移动应用的部署。
然而,Ionic AppFlow 对 Ionic 框架的专注可能不适合非 Ionic 或非移动应用开发项目。与其他 CI/CD 解决方案相比,它的定价对于需要额外构建能力或功能的大型团队或项目来说可能较为昂贵。虽然它简化了设置过程,但 Ionic AppFlow 可能缺少其他 CI/CD 平台的定制选项。
喜欢其他移动应用开发框架的开发人员,可能会觉得 Ionic AppFlow 对于非 Ionic 项目的专注性较低,从而不那么吸引人。尽管如此,它仍提供专门的支持,并且经过优化,适合构建和部署 Ionic 应用。
Ionic AppFlow 自动生成 iOS 和 Android 构建版本,供通过应用商店或内部测试进行分发,并直接将更新和 bug 修复部署到用户设备,而无需应用商店下载。
示例
让我们来学习如何为 Ionic 应用设置 Ionic AppFlow。
前提条件
你必须具备以下条件:
-
一个 AppFlow 账户 (
ionic.io/signup?source=appflow&product=appflow) -
一个 GitHub 账户 (
github.com/join) -
一个 Ionic 应用
-
一个 Google Play 控制台账户或 Apple 开发者 ID,以便将来能够将你的移动应用发布到相关应用商店
开始吧!
开始使用
按照以下步骤操作:
- 创建账户后,你可以开始创建一个新应用或将现有应用导入 AppFlow,如下图所示:
图 4.67 – 添加新应用或导入现有的 Ionic 应用
- 接下来,点击创建你的第一个构建,如下面的图所示:
图 4.68 – 创建你的第一个构建
- 接下来,选择应用类型,例如 Android,然后选择堆栈和构建类型。然后,点击构建按钮,如下面的图所示:
f
图 4.69 – 选择要构建的应用
- 一旦构建开始,你可以查看构建的日志视图和构建状态,如下面的图所示:
图 4.70 – 构建日志视图
现在,我们已经讨论了针对移动应用的不同 CI/CD 提供商及其工作原理,我们可以创建一个工作流来构建、测试和发布移动应用。现在你对移动 DevOps 和哪种 CI/CD 提供商适合你的应用、业务、团队以及前面提到的预算有了更好的理解。
注意
此外,市场上还有不同的 CI/CD 提供商,但它们并非专注于移动端,例如 CircleCI、GitLab、Azure Pipelines(DevOps)和 Jenkins。如果其他团队已经在后端和 Web 应用程序中使用其中的某一个,某公司可能会选择其中之一。
在前面的示例中,我们快速覆盖了集成到工作流或管道中的测试步骤,因为在第五章,实施健全的移动应用测试策略中,我们将深入探讨测试,从设计测试策略到在 CI/CD 管道中运行不同类型的测试。当我们继续学习第六章,移动应用发布管理时,我们将完成 CI/CD 周期,并进一步了解应用发布的内容。
总结
移动应用的 CI/CD 是一种可以帮助组织快速高效地发布和更新其移动应用程序的过程,确保代码稳定、安全并且是最新的。
选择合适的 CI/CD 提供商对于确保无缝的开发、测试和发布过程至关重要。我们探讨了移动 CI/CD 市场上最流行的 CI/CD 提供商,包括 Bitrise、Codemagic、GitHub Actions、Xcode Cloud、Visual Studio App Center 和 Ionic AppFlow。
每个服务提供商提供独特的功能、定价方案和支持级别,选择一个满足团队特定需求的提供商是至关重要的。
需要考虑的一个关键因素是平台支持,确保所选的提供商支持应用程序所针对的平台。例如,一些提供商专注于单一平台,如 Xcode Cloud,而其他提供商则支持多个平台,如 Bitrise。组织还应考虑性能和可靠性、构建配置与环境、可扩展性、集成、安全性、易用性、社区支持以及定价。
我们还讨论了实施 CI 并提供了详细步骤,介绍了为移动应用设置不同 CI 服务器的过程,包括设置必要的构建和单元测试。
在接下来的几章中,我们将继续迈向实现完整 CI/CD,包括测试自动化、发布管理和 DevSecOps。
第五章:实施强大的移动应用测试策略
如前几章所讨论的,移动应用已成为我们日常生活的一部分。随着智能手机和平板电脑的普及,开发和交付跨不同设备和平台提供无缝用户体验的移动应用变得至关重要。移动应用测试涉及测试应用的不同方面,包括其功能、性能、安全性、可用性和兼容性。此外,还应在各种设备、操作系统和网络配置下进行测试,以确保应用能够在所有可能的场景中无缝运行。
毫无疑问,移动应用测试在确保应用表现良好、蓬勃发展并具有积极用户体验方面起着至关重要的作用。通过投入时间和资源进行测试,开发者更有可能开发出响应迅速的应用并提供卓越的用户体验。
移动应用在移动 DevOps 中的测试自动化就像汽车的轮子——它为项目提供必要的牵引力,使项目能够高效推进并最小化风险。有了它,你将能够顺利到达目的地。
然而,由于设备、操作系统和网络配置的多样性,开发和测试移动应用可能具有挑战性。在本章中,我们将讨论如何实施一个强大的移动应用测试策略,帮助你交付高质量的移动应用,内容包括以下主题:
-
理解移动应用测试
-
移动应用测试自动化的重要性
-
移动应用测试的挑战和陷阱
-
什么是移动应用测试策略?
-
移动应用的测试工具、框架和服务
-
移动应用的 UI 和功能测试
-
在云设备上的测试
-
人工智能(AI)和机器学习(ML)如何改变移动测试
-
测试用例管理
-
实现成功的移动测试覆盖
让我们从理解移动应用测试开始。
理解移动应用测试
移动应用测试涉及测试应用的不同方面,包括功能、性能、安全性、可用性和兼容性。此外,还应在各种设备、操作系统和网络配置下进行测试,以确保应用能够在所有可能的场景中无缝运行。移动应用应在发布前后进行测试,以便识别和修复任何可能影响用户体验的漏洞和新特性。
首先,让我们讨论一下软件开发和移动开发中的不同测试层级。
测试层级
软件开发领域正在不断发展,特别是在移动开发领域。这是因为我们始终在努力引入新的改进功能和技术,以更好地帮助我们的客户完成日常任务。因此,所有移动开发者都需要将测试作为必要的实践,以确保所有功能按预期运行。
测试有多种类型,每种类型都有其独特的范围。通常,我们使用测试金字塔作为参考来对这些类型进行分类。
单元测试
这些测试专注于具有单一责任的独立组件。实际上,这是测试的最低级别。在这个测试级别中,开发者会验证一组必须为真的条件,以及一些需要为假的条件。
假设我们正在开发一个计算器应用——开发者会验证点击加号(+)按钮时会发生什么,且预期结果会被精确地定义。
作为代码单元,单元测试无法检测集成错误或系统级错误,这些会在集成测试和端到端(E2E)测试中覆盖。
在验证程序的不同方面时,单元测试可以用来查找以下内容:
-
预期情况或“理想路径”
-
边界情况
-
边界条件
-
程序逻辑
在 iOS 中,我们可以使用 XCTest 框架来为我们的 Xcode 项目编写单元测试,它与 Xcode 的测试工作流程无缝集成。
在 Android 中,单元测试会被编译以在 Java 虚拟机(JVM)上执行,从而减少执行时间。如果你的测试依赖于 Android 框架中的对象,可以使用 Robolectric (robolectric.org/) 工具。在测试依赖项时,可以利用模拟对象来模拟这些依赖项的预期行为。
在 Flutter 中,可以使用 test 包编写单元测试,使用 flutter_test 包测试组件。
在 React Native 中,开发者使用像 Jest (jestjs.io/) 这样的测试框架以及像 React Testing Library (testing-library.com/docs/react-testing-library/intro/) 这样的测试工具来便于单元测试。
在编写高效的单元测试时,有一些标准需要记住:
-
测试应当快速高效。
-
测试必须完全自动化,并且只应显示“通过”或“失败”结果。
-
测试应当是独立的,彼此隔离,意味着它们不应共享状态。
-
建议在编写生产代码之前先编写测试。这就是所谓的测试驱动 开发(TDD)。
单元测试和代码覆盖率
代码覆盖率测试的目的是确定有多少代码被测试。可以使用以下公式来计算它:
Code Coverage Percentage = (Number of lines of code executed)/(Total number of lines of code in an application) * 100
以下是单元测试中使用的不同代码覆盖技术:
-
语句覆盖率
-
决策覆盖率
-
分支覆盖率
-
条件覆盖率
还有其他不同的代码覆盖率工具,例如以下几种:
-
JaCoCo (
docs.gradle.org/current/userguide/jacoco_plugin.html) 可以为 Android 单元测试生成 HTML 报告,并与持续集成服务器集成。 -
Flutter Console Coverage Test (
pub.dev/packages/test_cov_console) 是一个 Dart 工具,用于生成 Flutter 覆盖测试报告。 -
dlcov (
pub.dev/packages/dlcov) 是一个命令行工具,用于验证代码覆盖率的阈值。 -
SonarQube (
www.sonarsource.com/products/sonarqube/) 与多种构建系统集成,并支持 Android 项目。它提供一个全面的质量分析平台,包括代码覆盖率指标。 -
Codecov (
about.codecov.io/) 是一个提供各种编程语言代码覆盖解决方案的服务,包括移动应用开发平台。它可以与 CI/CD 管道集成,收集并展示覆盖率报告。
另一种可以与单元测试一起使用的技术,以提高代码库质量的是 TDD。让我们来探索一下这个概念及其优势。
测试驱动开发
TDD 是一种与传统方法不同的测试方法。TDD 不是等到代码或功能完全开发完成再进行测试,而是根据功能需求创建测试,然后编写代码以确保测试通过,具体过程如图所示:
图 5.1 – TDD 如何工作
使用 TDD 是一种极为宝贵的技术,它可以提高代码库的内部质量。它还是训练你和你的团队以有纪律的方式设计更好软件的一个重要工具。
这是 TDD 过程的概述及其工作方式:
-
编写测试。在这个阶段,开发者为他们想要添加的每个功能编写测试。这些测试作为新代码必须满足的要求,首先编写它们可以确保开发者在编写代码之前就考虑到潜在的问题。
-
运行测试并故意使其失败。此步骤确认测试有效,并且需要新代码。
-
编写通过失败测试的代码。虽然代码可能并不完美,但它必须满足测试要求。如果失败,代码必须被修正,直到它通过测试,并确保新代码不会破坏任何现有功能。
-
重构代码,以提高可读性和可维护性。在这个阶段运行测试,确保功能得以保持。
-
对每个功能模块重复步骤 1的过程。
TDD 的好处是什么?
通过在编写代码之前编写测试,TDD 挑战我们更清晰、批判性地思考我们试图解决的问题。
将问题分解为更小的部分会导致更模块化的代码,从而最终产生更高质量的代码,并降低维护成本。
总结来说,TDD 的好处如下:
-
提高代码质量
-
给开发者信心去做出更改
TDD 的缺点是什么?
虽然 TDD 可以提高软件质量,但它也有缺点。一些开发者对这种方法表示担忧,并认为它并不总是最佳选择。
主要的批评意见是 TDD 可能会减慢开发进度,并增加额外的代码维护工作。
什么时候应该避免使用 TDD?
虽然 TDD 帮助团队在早期优先关注代码库的内部质量,但它并不是唯一的方式。是否采用 TDD 应该取决于项目的实际情况和周围环境。
下面是一些可能不适合使用 TDD 的场景或情况:
-
在进行实验或创建概念验证时
-
在处理语言/框架方法时
-
在进行 GUI 开发时
是选择 TDD 还是不选择 TDD
实施 TDD 涉及到文化和测试实践的根本转变,需要工程团队和管理层的支持。
如果你在一个使用大量遗留代码的组织中工作,你可能会好奇 TDD 如何能为你带来好处。虽然它可能不会影响现有的代码库,但你可以逐步将 TDD 整合到新的功能和 bug 修复中,随着时间的推移,代码库会得到改善。
集成测试
这些测试旨在检查各个组件的集成。这个过程确保应用程序的不同层次,如 UI、业务逻辑、数据存储和外部服务,能够无缝地协同工作。集成测试有助于发现由于这些不同部分之间的交互而可能出现的问题。
验收/E2E 测试
验收测试侧重于验证移动应用是否满足规定的需求并准备好发布。其目标是确保应用与预期功能、用户期望和业务需求保持一致。
E2E测试侧重于测试应用程序的完整流程,通常跨越多个组件和系统。在移动应用的背景下,E2E 测试确保应用的所有不同部分能够无缝地协同工作,从 UI 到后端系统。
TDD 与单元测试的区别
单元测试包括编写许多小的测试,每个测试针对一个非常简单的函数或对象的行为。TDD 是一种思维过程,它通过单元测试的方式得以实现,“以测试为思维”通常会导致更加细粒度、全面的测试,并使软件设计更易于扩展。
让我们继续了解更多关于移动应用测试的类型。
移动应用测试的类型
在移动应用测试中,有多种测试类型可以确保你的应用程序健壮、可靠并提供卓越的用户体验。以下是一些最常见的移动应用测试类型:
-
功能测试:此项测试旨在确定应用程序的功能是否符合要求并按预期工作。它涉及测试应用程序的各个方面,例如 UI、导航、数据处理和业务逻辑。
-
回归测试:此项测试确保新功能或更改不会影响应用程序的功能性。回归测试检查在引入新功能或更改后,应用程序现有的功能是否正常工作。
-
可用性测试:此项测试专注于用户体验,检查应用程序是否易于使用、导航和理解。它涉及测试应用程序的设计、布局、颜色、字体大小及其他影响用户体验的元素。这里一些流行的测试活动包括快照和视觉测试;我们将在本章讨论这两种测试。
-
兼容性测试:此项测试检查应用程序与不同设备、操作系统和屏幕尺寸的兼容性。测试应用程序与硬件、网络和软件配置的兼容性是必要的。使用云设备测试工具,如 Sauce Labs 或 Firebase Test Lab,帮助你在不同设备和配置上运行测试套件,确保应用程序按预期工作。
-
本地化测试:此项测试检查应用程序是否支持不同的语言、地区和文化,测试语言支持、日期和时间格式、货币格式及其他文化元素,尤其是当应用程序支持如阿拉伯语等语言时,因为这会将 UI 转换为从右到左(RTL)显示。
-
性能测试:此项测试检查应用程序在不同场景下的性能和响应性,例如低电量、弱网络连接或高使用量。它测试应用程序的负载、响应、内存使用和电池消耗。在第七章《建立移动应用监控、可观测性和分析》中,我们将讨论如何使用不同的工具和服务来监控移动应用的性能。
-
可访问性测试:此项测试检查应用程序的 UI 是否对残障人士友好,例如视觉障碍者。可访问性测试可以识别应用程序布局、设计和 UI 中可能会阻碍残障用户使用的潜在问题。
-
安全性测试:此项测试检查应用程序的安全功能,并识别可能会危及用户数据的漏洞。它包括测试应用程序的身份验证、授权、加密和数据存储机制。在第八章《保持移动应用和 DevOps 安全》中,我们将讨论安全性测试及如何将安全性融入到移动 DevOps 流程中。
通过执行这些类型的移动应用测试,您可以确保您的应用具有高质量,满足用户期望,并提供出色的用户体验。
测试自动化对移动应用至关重要,因为它提高了效率,降低了成本,改善了应用质量,并确保了在各种设备和操作系统上的良好用户体验。通过投资测试自动化,移动应用开发者可以创建和维护符合用户期望的高质量应用,并在竞争激烈的市场中脱颖而出。
现在,让我们讨论测试自动化对移动应用的重要性。
测试自动化对移动应用的重要性
在移动 DevOps 中,测试自动化至关重要,因为它使移动开发生命周期更快、更可靠。
移动 DevOps 无法在没有测试自动化的情况下存在,原因如下:
- 更快的发布周期:移动 DevOps 旨在快速且一致地交付移动应用。测试自动化通过允许团队快速而反复地执行测试,帮助实现这一目标,缩短了识别和修复问题的时间,从而加速了部署前的修复过程。
测试脚本可以重复使用,便于在更新 或修改后重新测试应用。
-
持续集成与部署/交付(CI/CD):移动 DevOps 依赖CI/CD来简化移动发布过程。测试自动化对这些过程至关重要。作为开发周期的一部分,自动化测试会在每次提交代码或进行更改时运行,确保移动应用保持稳定和功能正常。例如,我们在上一章中实现的 CI 工作流和管道可以使用不同的测试自动化工具,如Espresso、XCUITest和Appium来确保应用质量。
-
增加测试覆盖率:通过这种方式,可以快速运行更多的测试,从而获得更好的测试覆盖率。持续测试可以在开发过程中更早发现问题,减少最终生产缺陷的可能性。在本章后面,我们将讨论如何实现成功的移动测试覆盖率、持续测试和左移测试。
-
改善协作:自动化移动测试使开发人员和测试人员能够更高效地合作,提供有关代码更改如何影响应用程序的即时反馈。它们可以防止错误进入生产环境,并增强团队成员之间的沟通。
-
成本效益:手动测试可能导致测试自动化减少,从而节省时间和金钱。通过自动化重复性任务,团队可以专注于更复杂的任务,提高生产力并增加投资回报率(ROI)。
现在,让我们先讨论在移动开发中遇到的挑战,然后再讨论为何需要一个强有力的移动测试策略。
移动应用测试挑战与陷阱
移动技术正在迅速发展,这给移动测试团队带来了独特的挑战。让我们来看看团队在测试移动应用时最常面临的挑战,以便我们能够克服它们:
-
随着移动应用测试变得越来越重要,找到合适的自动化工具和框架变得具有挑战性。
-
随着设备和操作系统数量的增加,测试移动设备兼容性和跨平台兼容性变得具有挑战性。
-
要确定应用在不同网络(如 2G、3G、4G 和 5G)上的表现,有必要在每个网络上对应用进行测试。
-
为了确保应用与互联网协议第六版(IPv6)设置的兼容性,需要进行多项检查。这包括评估地址兼容性、网络配置、防火墙和 NAT,并确定如何解决可能出现的问题。
-
应对移动应用在各种条件下的性能进行测试,以确保最佳的用户体验。团队应确保应用在速度、响应性和稳定性方面经过测试。
-
安全性和隐私在移动测试中变得越来越重要。团队必须确保所有应用都经过漏洞测试,并且用户数据得到保护。
这些挑战要求团队拥有一个全面的测试策略,涵盖所有移动应用测试的各个方面。团队应专注于制定策略以应对复杂性,自动化测试,优化性能,提升安全性和隐私,并确保跨平台兼容性。
此外,团队应寻找可以帮助他们简化移动测试过程的工具和服务。通过战略性地规划和准备,团队可以有效应对移动测试的挑战。
为了确保测试策略保持相关性和时效性,团队应定期审查他们的流程,评估新工具,并根据需要调整他们的方法。
移动测试策略应该不断地 制定和维护。
这应该包括定义测试工作的范围、目标和优先级。确定应用所需的测试类型,并相应分配资源。审查测试流程,评估新工具和技术,并根据需要调整方法。
团队通过采取正确的方向并利用合适的工具,可以确保他们的移动应用成功。团队需要定期审查他们的测试流程,并评估新兴技术,以帮助简化移动测试过程。
需要一个强大的测试策略。
如在第一章中讨论的,解决移动 DevOps 中的挑战,金融科技公司或其他公司实施移动 DevOps 并遵循测试策略至关重要。未能做到这一点可能会导致手动测试的众多问题,例如消耗大量时间和精力,最终影响发布过程并延迟新功能的推出。为了确保移动应用的最佳功能和用户体验,移动测试策略涵盖了各种测试类型、工具和技术,所有这些都经过细致处理,以覆盖每个可能的场景。这包括单元、集成、系统、性能、兼容性和可用性测试。
在我看来,不要遵循测试金字塔。它只是一个模型。没有万能的解决方案或魔法棒;每个团队或公司应根据自身情况制定测试策略。有些企业更注重功能测试,有些注重性能测试,还有一些注重安全性测试。
注意
Mobile Native Foundation有一篇有趣的讨论(github.com/MobileNativeFoundation/discussions/discussions/6),讨论了像 Lyft、Spotify、Uber 等公司如何进行测试并实施测试策略。
什么是移动应用测试策略?
移动应用测试策略是一个全面的计划,概述了移动应用的测试过程。它包括各种测试技术和工具,帮助确保应用的质量和可靠性。
在制定移动应用测试策略时,需要考虑以下一些关键要素:
-
明确定义你的测试目标和目的,考虑你希望通过测试实现的目标,例如确保应用在所有设备和平台上正常工作、在发布前识别并修复漏洞,或提升应用的整体用户体验。
-
确定目标设备和平台,你希望在其上测试应用。为了确保兼容性,考虑在不同操作系统、屏幕大小和硬件配置的多种设备上进行测试。
-
选择最适合你应用需求和目标的测试技术。考虑使用功能测试、可用性测试、性能测试、安全性测试、兼容性测试和本地化测试等技术。
-
使用可以帮助你自动化测试的工具,并提供全面的覆盖。考虑使用像 Appium、XCUITest、Espresso 和 Detox 这样的工具。
-
定义涵盖所有应用功能、特性和用户场景的测试用例和场景。测试用例和场景应设计为涵盖正向和负向测试场景。
-
制定测试执行计划,概述测试过程、测试时间表以及执行测试所需的资源。该计划还应明确测试团队的角色和责任。
-
实施测试自动化以节省时间并确保一致的测试结果。自动化执行那些可以快速执行的重复性测试,例如回归测试。
-
让最终用户参与用户验收测试(UAT),获取关于应用程序可用性和功能的反馈(beta 测试)。这些反馈可以帮助你发现任何问题并改善整体用户体验。在第六章《移动应用发布管理》中,我们将讨论移动应用的 beta 测试概念。
然而,有时人们会将测试策略与测试计划混淆。让我们来看一下它们之间的区别:
| 测试计划 | 测试策略 |
|---|---|
| 描述计划测试活动的范围、方法、资源和时间表的文档 | 定义系统或产品整体测试方法的高层文档,包括所使用的测试方法、工具和过程 |
| 定义具体的测试目标和验收标准 | 确定整体测试目标和目的 |
| 提供关于如何进行测试的详细信息 | 提供关于测试方法的一般概述 |
| 描述测试团队的角色和责任 | 描述测试过程以及测试团队的角色和责任 |
| 提供详细的测试活动时间表 | 提供测试活动的高层计划 |
| 包含测试计划、测试用例、脚本和数据 | 包含测试方法、测试工具和测试过程 |
| 侧重于测试过程和测试用例的执行 | 侧重于整体测试方法和测试目标 |
表 5.1 – 测试计划与测试策略的区别
正如我们在本章之前提到的,测试自动化帮助我们增加测试覆盖率,更多的测试可以在开发过程中快速且持续地执行,从而获得更好的测试覆盖率。由此,我们得出了持续测试和左移测试的概念。接下来,让我们更详细地探讨这些概念。
持续测试
持续测试鼓励在整个软件开发过程中进行测试,而不仅仅是在最后阶段。通过对软件质量的早期和持续反馈,持续测试旨在帮助团队尽早发现和解决问题,以尽可能快的速度进行改进。
现代软件开发方法论,如敏捷开发和移动 DevOps,强调频繁发布和更新,这些方法严重依赖持续测试。团队可以通过将测试融入开发过程中,确保每个版本都具有高质量并满足最终用户的需求。
持续测试的做法是指在软件开发过程中进行测试,而不是等到开发周期结束或移动应用发布后才进行测试,正如我们在第三章《移动 DevOps 基础》中所讲的那样。高质量的应用程序对于移动应用至关重要,因为它们通常被许多用户使用,且消耗大量数据:
图 5.2 – 与 CI 的持续测试
由于持续测试过程的实施,左移测试变得越来越流行。
你可以通过 Katalon 的持续测试成熟度评估(katalon.com/continuous-testing-self-assessment)来衡量你团队的成熟度,并获得领域专家的建议。
传统上,测试是在开发过程的末尾进行的,即代码编写完成后。然而,通过左移测试方法,测试从一开始就融入到开发过程中。
让我们解释一下左移测试的概念和优势。
什么是左移测试?
左移测试是一种软件测试方法,侧重于软件开发生命周期的早期阶段。在传统的软件开发中,测试通常在大部分代码完成后进行,接近开发阶段的结束时。
相比之下,左移测试是指将测试任务融入到开发的早期阶段,如需求收集、设计和实现,以下图所示:
图 5.3 – 测试中的左移
持续测试和左移测试有若干优点,诸如以下几点:
-
缺陷的早期发现(及早测试,频繁测试):通过在开发过程的早期进行测试,可以在缺陷传播并变得更加昂贵和难以解决之前,及时发现并修复缺陷。
-
改进的协作和沟通:左移测试鼓励开发人员和测试人员之间的合作与沟通,有助于及早发现和解决潜在问题,从而提高软件的整体质量。
-
更快速的交付和部署:通过将测试提前,团队可以更快地交付和部署软件。他们可以更早开始测试,避免在开发过程结束时出现延迟和瓶颈。
组织需要采用持续测试方法来实施左移测试,在这种方法中,测试被集成到开发过程中并贯穿整个生命周期。这可能需要文化和思维方式的转变,并采用合适的工具和技术来支持持续测试。
现在,让我们更详细地了解一下目前市场上可用的用于移动应用的测试工具、框架和云服务,帮助您决定最适合您公司的工具。
移动应用的测试工具、框架和服务
开发人员和测试人员可以使用众多的测试工具、框架和服务来帮助他们快速测试移动应用程序。
但首先,让我们从选择适合移动应用的测试自动化框架或工具时需要考虑的因素开始讨论。
在选择移动测试自动化工具时,有几个因素需要考虑:
-
工具应与您测试自动化生态系统中的其他工具(如 CI 和测试管理工具)集成,以便您可以在 CI/CD 流水线中使用它
-
工具应与您计划测试的不同移动设备和操作系统兼容
-
工具应易于设置、配置和使用
-
工具应提供清晰、详细的测试结果报告
-
工具应拥有强大的支持系统和庞大的用户社区,能够提供帮助和指导
-
随着移动应用和用户基础的增长,工具应能够处理大规模的测试
在决定某个工具或框架是否适合您的业务、应用和团队之前,评估几种不同的工具,并进行小范围的试点测试或概念验证项目,总是一个不错的选择。
移动应用的 UI 和功能测试
优秀的用户体验需要对移动应用的 UI 进行测试。测试人员通过在测试过程中执行自动化测试,可以识别并解决应用程序功能和 UI 的问题,从而带来良好的客户体验。
以下是一些本地和跨平台的移动测试框架,供您在测试应用功能时参考:
-
iOS:
-
XCUITest
-
EarlGrey
-
-
Android:
-
Espresso
-
Jetpack Compose
-
-
跨平台:
-
Appium
-
Detox
-
Flutter Driver 和 Flutter 集成测试
-
Maestro
-
让我们从 iOS 应用的本地框架开始。
XCUITest
XCUITest(developer.apple.com/documentation/xctest)是由苹果公司专为 iOS、macOS、tvOS 和 watchOS 应用测试创建的移动测试框架。旨在帮助开发人员和质量保证团队自动化测试过程,它支持 Swift 和 Objective-C 语言,提供选择偏好语言的灵活性。
基于苹果的 XCTest 框架,XCUITest 使得单一框架内进行单元测试和 UI 测试成为可能,从而简化了 过程。
XCUITest 通过要求应用程序中使用正确的可访问性标识符来倡导可访问性,确保普遍的可用性。
此外,对于不熟悉 Swift 或 Objective-C 的测试工程师来说,可能会面临更陡峭的学习曲线。
要使用 XCUITest,开发人员必须导入 XCTest 框架并创建 XCTestCase 的子类。然后,他们可以定义测试方法,并使用 XCUITest 的 API 与应用的 UI 进行交互:
图 5.4 – iOS 应用中的 XCUITest 目录
该框架还提供了额外的功能,例如截图、执行滑动和捏合等手势,以及其他各种元素交互。更多信息可以参考苹果官方文档和 API 参考。
示例
这是一些简单的 XCUITest 代码,用于测试登录功能:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/iOS/XCUITest/simpleTest.swift。
你也可以在 XCUITest 中使用 Page Object 模式,该模式涉及为应用中的每个屏幕创建单独的类。这些类将包含特定屏幕的 UI 元素和操作。这样可以促进更好的代码组织和可维护性。
对于给定的 SwiftUI 应用,我们可以创建两个页面对象:LoginPage 和 WelcomePage。以下是如何在 XCUITest 中使用 Page Object 模式的一些示例:
-
创建
LoginPage.swift文件 (github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/iOS/XCUITest/PageObjects/LoginPage.swift) -
创建
WelcomePage.swift文件 (github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/iOS/XCUITest/PageObjects/WelcomePage.swift) -
更新你的测试类以使用这些页面对象 (
github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/iOS/XCUITest/TestClassWithPO.swift)
XCUITest 可以轻松集成到大多数 CI 提供商中,如 Xcode Cloud、Bitrise、GitHub Actions 和 Codemagic,但要能够运行 UI 测试,必须拥有带目标 iOS SDK 和 iOS 模拟器的 macOS 机器。该方案还应该是共享的:
图 5.5 – iOS 应用中的共享方案
然后,如果你具备前提条件,可以在你喜欢的 CI 提供商上运行这些测试。
例如,在 Codemagic 上,你可以在 codemagic.yml 文件中使用以下链接的代码:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/iOS/XCUITest/codemagic.yml。
在 Bitrise 上,您可以为 iOS 集成步骤添加 Xcode 测试,以构建应用进行测试并运行 UI 测试:
图 5.6 – Bitrise iOS 工作流
EarlGrey
EarlGrey (github.com/google/EarlGrey),由谷歌开发,是一个专门的 iOS 测试框架,旨在支持原生 iOS 应用测试。它允许开发人员和 QA 团队根据需要使用 Objective-C 或 Swift 自动化他们的 iOS 应用 UI 测试。
EarlGrey 通过自动与应用程序的 UI 同步,确保平稳且可靠的测试执行。它还提供了广泛的断言和匹配器,使开发人员能够创建彻底且富有表现力的测试。
要使用 EarlGrey 为给定的 SwiftUI 应用创建 UI 测试,您需要在项目中设置 EarlGrey。之后,您可以编写测试用例。以下是使用 EarlGrey 为给定的 SwiftUI 应用编写的 UI 测试:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/iOS/EarlGrey/EarlGreyTest.swift。
相同的页面对象概念也适用于 EarlGrey,就像在 CI/CD 工作流中运行必要的测试时一样。
现在,让我们讨论一下适用于 Android 应用的原生测试框架。
Espresso
Espresso (developer.android.com/training/testing/espresso),由谷歌创建,是一个专门的 Android 测试框架,旨在支持原生 Android 应用测试。它允许开发人员和 QA 团队根据需要使用 Java 或 Kotlin 自动化他们的 Android 应用 UI 测试。
它通过自动与应用程序的 UI 同步,确保平稳且可靠的测试执行,从而实现更快和更准确的测试。Espresso 还提供了各种断言和匹配器,允许开发人员创建全面且富有表现力的测试。
Espresso 轻松集成 AndroidJUnit4,允许开发人员在单一框架内执行单元测试和 UI 测试。作为谷歌官方支持的产品,开发人员可以依赖最新的文档、资源以及与新 Android 版本的兼容性。此外,对于不熟悉 Java 和 Kotlin 的开发者来说,入门时可能会面临较陡的学习曲线。
示例
这里有一些简单的 Espresso 代码,用于测试登录功能:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Android/LoginTest.kt。
您可以使用页面对象模式使您的 Espresso 测试更易于维护和阅读(github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Android/PageObjects/LoginPage.kt)。
下面是一个示例,展示了如何在 Kotlin 中为登录屏幕的 Espresso 测试中实现页面对象模式:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Android/LoginScreenTest.kt。
此外,您可以与 Espresso 一起使用UI Automator(developer.android.com/training/testing/other-components/ui-automator),进行跨系统和已安装应用的功能 UI 测试。
Espresso 与大多数 CI 提供商(如 Bitrise、GitHub Actions 和 Codemagic)轻松集成,但要能够运行 UI 测试,您必须拥有安装有 Gradle 和目标 Android SDK 的 Ubuntu 或 Windows 机器,并具有 Android 模拟器。然后,您需要运行 Gradle 命令./gradlew connectedDebugAndroidTest。此命令使用 connectedDebugAndroidTest Gradle 任务在单个步骤中构建和安装主应用和测试应用。此任务构建主应用及其相关的 Android 测试应用,将它们安装在连接的设备上,然后运行测试应用中定义的测试。
一旦完成这些步骤,如果您符合先决条件,可以在首选的 CI 提供商上运行测试。
例如,在 Codemagic 上,您可以在codemagic.yml文件中使用以下链接中的代码:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Android/codemagic.yml。
在 Bitrise 上,您可以添加Android Build for UI Testing和Virtual Device Testing for Android集成步骤,以构建应用程序进行测试,并在 Firebase Test Lab 上运行 UI 测试,该步骤已与 Bitrise 集成:
图 5.7 - Bitrise Android 工作流程
最后,使用 GitHub Actions,您可以使用以下 YAML 文件:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/.github/android.yml。
基于 Espresso 的开源项目
有许多开源 UI 测试库是基于 Espresso 为 Android 应用程序构建的,它们简化并优化了编写 UI 测试的过程,使开发者能够轻松创建强大且易于维护的测试。包括 Kaspresso(github.com/KasperskyLab/Kaspresso)、Barista(github.com/AdevintaSpain/Barista)和 Kakao(github.com/KakaoCup/Kakao)。它们流畅的接口、高级测试拦截器、自动截图和增强的日志功能,使它们成为 Android 开发者提升 UI 测试体验的强大选择。
Jetpack Compose
Jetpack Compose(developer.android.com/jetpack/compose)是 Google 为 Android 应用程序提供的现代 UI 工具包。Jetpack Compose 测试库(developer.android.com/jetpack/compose/testing)旨在简化为使用 Jetpack Compose 构建的应用程序编写和维护 UI 测试的过程。
Jetpack Compose 测试提供了 Compose 测试规则,它设置了测试 Compose UI 所需的环境,并使在测试中创建和操作可组合的 UI 变得容易。
Jetpack Compose 测试支持截图测试,允许开发者在测试执行期间将 UI 元素的视觉外观与参考图像进行比较。
由于 Jetpack Compose 是一个工具化测试,因此可以使用 Espresso 作为测试框架,但 Compose 已经包含了测试 API,用于查找、验证和对元素执行用户操作。时间操作和其他高级功能也包含其中。
一般来说,如果你有特定类型的 UI 元素或组件,你应该有特定的 API 或方法来测试它们在不同场景中的表现。
要了解更多 Compose 测试的信息,可以查看备忘单(developer.android.com/jetpack/compose/testing-cheatsheet),该备忘单作为一些最常用 Compose 测试 API 的快速参考。
相同的页面对象概念可以应用于 Jetpack Compose,并在必要的 CI/CD 工作流中运行测试(github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Android/JetpackCompose/CounterTest.kt)。
这是来自 Reddit 的一个示例,展示了他们的 Android 应用程序端到端 UI 自动化框架,以及他们如何使用页面对象和 Fluent 设计模式:shorturl.at/ajH78。
Appium
Appium (appium.io) 是一个开源的跨平台移动测试框架,使开发人员和 QA 团队能够在 Android、iOS 和 Windows 平台上自动化测试他们的移动应用。
Appium 支持多种编程语言,包括 Java、Ruby、Python、C# 和 JavaScript,允许开发人员选择他们喜欢的语言。
Appium 与流行的测试框架如 JUnit 和 TestNG 集成,允许开发人员使用他们喜欢的测试工具。
Appium 可轻松集成于 Bitrise、GitHub Actions 和 CircleCI 等 CI 工具中,简化开发工作流中的测试过程。
Appium 的大型活跃社区提供广泛的文档、资源和定期更新。但通常,Appium 的初始设置和配置可能会耗费大量时间,并需要大量努力来确保其正常运行 (github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Appium/AppiumDemo.java)。
您还可以使用页面对象模式使您的 Appium 测试更易于维护和阅读。
要在 CI 工作流中运行 Appium 测试,您需要安装并运行 Appium 服务器,以及 Android 模拟器或 iOS 模拟器。您可以使用以下 Shell 脚本来完成这些操作:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Appium/emulator.sh。
然后,您可以使用 Gradle 或 Maven 的命令行来运行测试。
Detox
Detox (github.com/wix/Detox) 是专为 React Native 应用设计的端到端移动测试框架。它使开发人员和 QA 团队能够在 Android 和 iOS 平台上自动化测试他们的 React Native 应用。
Detox 作为灰盒测试框架运作,平衡了白盒测试的速度和可靠性以及黑盒测试的真实性。Detox 与 Jest 完美集成,这是一个流行的 JavaScript 测试框架,允许开发人员使用他们喜欢的测试工具和方法。
Detox 自动将测试执行与应用程序的 UI 同步,确保测试顺利可靠运行。
Detox 可轻松集成于 Jenkins、Travis CI 和 CircleCI 等 CI 工具中,简化开发工作流中的测试过程。
Detox 拥有一个活跃的开发者和用户社区,提供资源、支持和定期更新。
示例
这是一个简单的 React Native 登录应用的 Detox 测试示例:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Detox/LoginTest.js。
Detox 还要求你拥有一个配置 JSON 文件,类似于以下内容:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Detox/config.json。
要在 CI/CD 工作流或像 GitHub Actions 这样的管道中运行 Detox 测试,你需要 Android 模拟器或 iOS 模拟器。此外,还需要安装 Node.js 和 NPM,并使用上述配置文件构建应用。你可以使用以下 YAML 文件:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Detox/.github/detox.yml。
类似于我们提到的 Bitrise、Codemagic 和其他 CI 提供商的方式,你需要使用脚本步骤来安装必要的依赖项,然后运行 Detox 测试。
Flutter Driver
Flutter Driver (api.flutter.dev/flutter/flutter_driver_extension/flutter_driver_extension-library.html) 是一个用于 Flutter 应用程序的测试框架,使开发者和 QA 团队能够自动化 Flutter 应用的集成测试和 UI 测试。
它支持在 Android 和 iOS 平台上进行测试,允许开发者在各种设备和操作系统上测试他们的 Flutter 应用。
Flutter Driver 设计用于集成测试,使开发者能够测试他们应用的不同组件如何协同工作。
它使用 Dart 语言,这是开发 Flutter 应用程序所使用的编程语言,使开发者更容易用熟悉的语言编写测试。
Flutter Driver 会自动同步测试执行和应用的 UI,确保测试顺利且可靠地运行——Flutter Driver 与应用 UI 的自动同步确保了稳定和可靠的测试执行。
此外,对于不熟悉 Dart 或 Flutter 框架的测试人员,在开始使用 Flutter Driver 时可能会面临较陡的学习曲线。
示例
这是一个 Flutter Driver 测试的示例,用于一个简单的 Flutter 登录应用: https://github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Flutter/Flutter%20Driver/LoginTest.dart。
也有一个集成测试(https://docs.flutter.dev/testing#integration-tests),可以用来测试 Flutter 应用。以下是一个简单的 Flutter 登录应用示例:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Flutter/Integration%20Test/LoginTest.dart。
要在 CI/CD 工作流或管道(如 GitHub Actions)中运行 Flutter 测试,你需要 Android 仿真器或 iOS 模拟器以及 Dart SDK。你可以使用以下 YAML 文件来帮助实现这一点:github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Flutter/.github/FlutterIntegration.yml。
这是一个 YAML 文件示例,它通过 GitHub Actions 在 Android 仿真器和 iOS 模拟器上运行 Flutter Driver 测试:github.com/PacwktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Flutter/.github/FlutterDriver.yml。
在 Bitrise 上,有用于构建和测试 Flutter 应用的集成步骤:
图 5.8 – Bitrise Flutter 工作流
同样,在 Codemagic 上,也有支持 Flutter Driver 和 Flutter 测试的步骤:
图 5.9 – Codemagic Flutter 工作流
Maestro
Maestro (maestro.mobile.dev/) 是最简单且最有效的开源移动 UI 测试框架,由 mobile.dev 开发。它允许你轻松定义和测试你的流程(即应用中的用户旅程——换句话说,就是 E2E 场景)。
Maestro 基于 YAML,这意味着你需要在 flow.yml 文件中定义测试流程(github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Maestro/flow.yml),然后在设备上运行它们。
Maestro 具有多种功能,例如:
-
使用 Maestro,可以容忍不稳定性。应用和设备设计时考虑到不稳定性,UI 元素也专门设计来应对这一点。
-
在测试中无需反复调用
sleep()。当某个过程(例如通过网络)需要较长时间时,Maestro 会自动等待内容加载(但不会等待太久)。 -
当测试文件发生变化时,Maestro 会自动重新运行测试,因此无需重新编译任何内容。
-
Maestro 支持所有主要的移动开发平台,包括 Android、iOS、Flutter、React Native 和 Web Views。
-
此外,还有 Maestro Studio,Maestro 的个人助手,它将帮助你编写 Maestro 流程。
你可以轻松在 Maestro Cloud 上测试你的流程,因为它们在云端运行,这样你就不需要配置任何模拟器或仿真器。
流程也可以通过 Maestro CLI 在支持 ADB 连接的 Android 设备/仿真器和支持 Facebook 的 IDB 的 iOS 设备/模拟器上运行。你可以手动协调你的流程执行,针对任何支持这些协议的提供者进行操作。你可以像在本地一样使用 Maestro CLI 运行你的流程。
Bitrise 提供了一个集成步骤,帮助你在云端运行 Maestro 测试。如果你使用其他 CI 提供商,可以使用 Maestro CLI:
图 5.10 – Bitrise 和 Maestro 工作流
通过探索当前市场上可用的测试框架以及如何在 CI 工作流中运行它们,我们发现了一个新的挑战:在不同的设备和操作系统版本上同时运行测试。让我们来谈谈如何使用不同的服务在云设备上运行测试,以最大化覆盖面。
在云设备上测试
开发者和 QA 团队可以通过云设备测试在广泛的设备和平台上测试他们的应用,而无需使用物理设备,这是一种现代的移动应用测试方法。
一个基于云的基础设施远程托管多个模拟器或真实设备。以下是目前最受欢迎的移动应用云设备测试服务:
-
Sauce Labs
-
BrowserStack
-
AWS Device Farm
-
Firebase Test Lab
-
LambdaTest
让我们更详细地了解一下这些内容。
Sauce Labs
Sauce Labs (saucelabs.com/products/mobile-testing) 通过消除购买和管理大量设备库存的需求,简化了测试过程,使用户能够在云端的真实设备上测试应用。得益于该平台的全面设备覆盖,用户可以通过在最新设备上测试应用,提前发现问题。
Sauce Labs 支持 Android 和 iOS 平台,使开发者能够在多个设备和操作系统上测试他们的应用。它提供访问大量真实设备的权限,确保测试结果准确,并减少在真实设备上遇到问题的可能性。除了真实设备,Sauce Labs 还提供模拟器和仿真器,用于更快速、更具成本效益的测试。
该功能允许同时执行多个测试,显著减少整体测试时间。
Sauce Labs 与流行的 CI 工具(如 Bitrise、GitHub Actions 和 Codemagic)无缝集成,允许在开发工作流中进行自动化测试。它支持流行的测试自动化框架,如 Appium、Espresso 和 XCUITest,为项目选择合适的框架提供灵活性。
此外,Sauce Labs 提供了详细的测试报告、日志和测试会话的视频记录,便于高效的调试和问题解决。
你可以使用 saucectl CLI 配合任何 CI 提供商来配置你的账户,并从相关的 config.yml 文件运行测试 (github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/SauceLabs/config.yml)。
你可以更改配置,以增加并发性,从而在不同设备上并行运行测试。
BrowserStack
BrowserStack (www.browserstack.com/app-automate) 是一个基于云的测试平台,允许开发者在各种设备和操作系统上测试他们的移动应用。通过广泛的功能和用户友好的界面,BrowserStack 旨在为开发者和 QA 团队提供全面的测试解决方案。
BrowserStack 提供访问大量真实设备的权限,用于准确测试移动应用,确保它们在消费者使用的真实设备上表现良好。除了真实设备外,BrowserStack 还提供模拟器和仿真器,便于快速且具有成本效益的测试。
此功能支持同时执行多个测试,减少整体测试时间,提高工作效率。
BrowserStack 与广泛的 CI 工具集成,如 Jenkins、TeamCity、Bamboo、CircleCI、Travis CI、Azure、Bitrise 和 GitLab CI/CD,简化了开发工作流程中的测试过程。
例如,Bitrise 有与 BrowserStack 集成的步骤,可以上传并运行 Espresso 和 XCUITest 测试:
图 5.11 – Bitrise 和 BrowserStack 集成步骤
图 5.12 – Bitrise 和 BrowserStack 工作流程
如果你有其他 CI 提供商或服务器,可以使用 curl 命令从命令行将测试上传到 BrowserStack:
curl -u "YOUR_USERNAME:YOUR_ACCESS_KEY" -X GET "https://api-cloud.browserstack.com/app-automate/recent_apps"
BrowserStack 支持多种测试自动化框架,包括 Appium、Espresso 和 XCUITest,为项目选择最合适的框架提供了灵活性。
你可以使用 BrowserStack App Automate 和 Appium 自动化框架,在各种真实的 Android 和 iOS 设备上测试本地和混合型移动应用。
LambdaTest
LambdaTest (www.lambdatest.com/mobile-app-testing) 是一个基于云的测试平台,提供给开发者和 QA 团队访问多种设备和操作系统,用于 Web 和移动应用测试。
LambdaTest 支持 Android 和 iOS 移动应用测试,允许开发者在各种设备和操作系统上测试他们的应用。
LambdaTest 还提供真实的移动设备测试,确保测试结果的准确性,并提供更真实的测试环境。
LambdaTest 与许多流行的测试框架集成,如 Appium、XCUITest 和 Espresso,使其可以轻松地集成到现有的测试套件中。它还支持并行测试,可以同时运行多个测试,加速整体测试过程。
LambdaTest 的云基础设施提供可扩展性和协作功能,适用于小型和大型团队。
最后,LambdaTest 与广泛使用的 CI 工具集成,如 AWS CodePipeline、Jenkins、CircleCI、Travis CI、GitLab CI、Azure Pipelines 和 Bitrise。
使用命令行中的 curl 命令,您可以像在 Sauce Labs 和 BrowserStack 上一样,在 LambdaTest Cloud 上上传并运行测试。
这是一个上传 iOS 应用并运行 XCUITest 测试的示例:
curl -u "YOUR_LAMBDATEST_USERNAME:YOUR_LAMBDATEST_ACCESS_KEY" \--location --request POST 'https://manual-api.lambdatest.com/app/uploadFramework' \
--form 'appFile=@"/Users/macuser/Downloads/proverbial.ipa"' \
--form 'type="xcuit-ios"'
curl -u "YOUR_LAMBDATEST_USERNAME:YOUR_LAMBDATEST_ACCESS_KEY" \
--location --request POST 'https://manual-api.lambdatest.com/app/uploadFramework' --form 'appFile=@"/Users/macuser/Downloads/proverbial_ios_xcuitest.ipa"' --form 'type="xcuit-ios"'
这是一个上传 Android 和测试应用的示例:
curl -u "YOUR_LAMBDATEST_USERNAME:YOUR_LAMBDATEST_ACCESS_KEY" \--location --request POST 'https://manual-api.lambdatest.com/app/uploadFramework' --form 'appFile=@"/Users/macuser/Downloads/proverbial_android.apk"' --form 'type="espresso-android"'
curl -u "YOUR_LAMBDATEST_USERNAME:YOUR_LAMBDATEST_ACCESS_KEY" \
--location --request POST 'https://manual-api.lambdatest.com/app/uploadFramework' --form 'appFile=@"/Users/macuser/Downloads/proverbial_android_expressotest.apk"' --form 'type="espresso-android"'
如果您的 CI 提供商支持集成步骤,如 Bitrise,您可以直接使用它,而不必使用命令行:
图 5.13 – Bitrise 和 LambdaTest 集成步骤
图 5.14 – Bitrise 和 LambdaTest 工作流
AWS Device Farm
AWS Device Farm (aws.amazon.com/device-farm/) 是由 AWS 提供的移动应用测试服务。它支持在 Android 和 iOS 平台上进行测试,允许开发人员在各种真实移动设备上测试他们的应用。
AWS Device Farm 提供对一系列真实设备的访问,以便更准确地测试移动应用,确保更好的与消费者使用的真实设备的兼容性。
开发人员可以远程访问设备进行手动测试,支持交互式调试和故障排除。
AWS Device Farm 支持流行的测试自动化框架,如 Appium、Espresso 和 XCUITest,使开发人员能够自动化他们的测试过程。
AWS Device Farm 与流行的 CI 工具集成,如 AWS CodePipeline、GitHub Actions、Codemagic 和 Bitrise,简化了开发工作流中的测试过程。
使用 AWS Device Farm,您可以手动上传移动应用和测试文件来运行测试,如以下截图所示。您还可以通过 CI 构建上传应用:
图 5.15 – AWS Device Farm – 选择应用程序
接下来,您可以配置测试类型并设置测试框架,如 Instrumentation,如图所示:
图 5.16 – AWS Device Farm – 设置测试框架
完成此操作后,您可以选择一个 APK 并选择您的执行环境:
图 5.17 – AWS Device Farm – 上传测试应用
接下来,您可以选择要使用的设备。您可以组合不同设备制造商,如 Google 和 Samsung,如下所示:
图 5.18 – AWS Device Farm – 选择设备
一旦运行了测试,您将看到测试结果,包括视频、日志和截图,如下所示:
图 5.19 – AWS Device Farm – 测试结果
AWS Device Farm 提供灵活的按需计费定价模型,允许开发人员仅为他们使用的测试资源付费,这对某些团队来说是一种成本效益高的选择。
Firebase Test Lab
Firebase Test Lab (firebase.google.com/products/test-lab),作为 Google Firebase 开发工具套件的一部分,是一个基于云的测试服务,允许开发人员在各种真实设备和虚拟设备(模拟器和仿真器)上测试他们的移动应用:
图 5.20 – Firebase Test Lab 矩阵
Firebase Test Lab 支持在 Android 和 iOS 平台上进行测试,使开发人员能够在各种设备和操作系统上测试他们的应用。
Firebase Test Lab 支持流行的自动化测试框架,如 Espresso 和 XCTest,但不支持 Appium 和 Detox:
图 5.21 – Firebase Test Lab 结果
Firebase Test Lab 与流行的 CI 工具(如 Jenkins、GitLab CI 和 Bitrise)集成,在开发工作流程中简化了测试过程。
Firebase Test Lab 会自动生成一个发布前报告,包含详细的测试结果、性能指标和截图,帮助开发人员在发布应用之前识别和解决问题。
作为 Firebase 工具套件的一部分,Firebase Test Lab 与其他 Firebase 服务(如 Cloud Functions)无缝集成,简化了整体测试和开发流程。
你可以使用 Flank (github.com/Flank/flank/),这是一个用于 Firebase Test Lab 的大规模并行 Android 和 iOS 测试工具。
Flank 与 gcloud CLI 兼容。它提供了额外的功能来加速速度并提高质量。
你可以通过以下步骤使用 Flank:
-
创建一个 Google Cloud 项目和账户。
-
创建 Firebase 账户。
-
将你的项目添加到 Firebase。
-
创建服务账户以获取 API 访问权限。
-
下载服务账户的 JSON 文件。该文件包含一个私钥,可直接添加到你的 CI 服务器并用于身份验证。
完成此步骤后,你可以为你的应用创建一个配置文件,类似于github.com/PacktPublishing/Mobile-DevOps-Playbook/blob/main/Chapter-5/Flank/flank.yml中的文件。
然后,你可以运行以下脚本:
wget --quiet https://github.com/TestArmada/flank/releases/download/v22.05.0/flank.jar -O /usr/local/bin/flank.jarjava -jar /usr/local/bin/flank.jar firebase test android run
最后,你需要监控 Flank 的使用情况,因为你正在运行并行设备,这会产生费用。
其他服务提供云设备,例如Genymotion(www.genymotion.com/),这是一款流行的安卓模拟器和移动测试平台,使开发人员和质量保证(QA)团队能够在各种虚拟设备上测试他们的移动应用程序。此外,emulator.wtf(emulator.wtf/)是一个专注于性能的安卓云模拟器,旨在为您的拉取请求(PRs)提供快速反馈。
Kobiton(kobiton.com/)是一个基于云的移动测试平台,使开发人员和 QA 团队能够在各种真实设备和模拟器上测试他们的移动应用程序。它提供了丰富的功能,确保在不同平台和设备上进行全面的应用测试。
此外,Perfecto(www.perfecto.io/)是 Perforce 推出的移动测试平台,使开发人员和 QA 团队能够在安全的云环境中,在各种真实设备和模拟器上测试他们的移动应用程序。它提供了丰富的功能,确保在不同平台和设备上进行全面的应用测试。
人工智能(AI)和机器学习(ML)如何改变移动测试
移动测试已经被人工智能(AI)和机器学习(ML)彻底革新。开发人员可以更快速、准确地测试应用程序,因为他们实现了测试的自动化。在预测分析的帮助下,错误可以更快地修复。智能化的测试用例生成根据用户行为和使用趋势生成测试用例,从而暴露潜在问题。
此外,借助 AI 和机器学习,移动测试的费用可以减少,除了前面提到的优势之外。公司通过自动化测试,能够减少与人工劳动相关的费用,并简化测试流程。
无代码和基于 AI 的测试工具
人工智能(AI)可以在自动化测试中成为游戏规则的改变者。AI 驱动的测试工具有助于提高测试覆盖率,减少测试所需的时间和精力,并提供更准确的测试结果。
这里有一些可以帮助软件测试人员在自动化测试中释放人工智能(AI)威力的工具:
-
Applitools
-
Katalon
-
Waldo
让我们仔细看看。
Applitools
Applitools(applitools.com/solutions/mobile-testing)是一个视觉测试平台,旨在帮助开发人员和 QA 团队自动验证他们的移动应用程序在不同设备和屏幕分辨率上的外观。它通过利用 AI 驱动的视觉比较和验证,旨在简化测试流程,减少人工工作量。
它利用 AI 对应用程序的 UI 进行视觉比较,以高准确度检测差异,减少误报,这在可用性测试和快照测试中非常有益。
Applitools 与许多流行的测试框架(如 XCUITest、Appium 和 Espresso)集成,使得将视觉验证纳入现有测试套件变得简单。
它提供对不同浏览器、设备和屏幕分辨率的广泛覆盖,确保应用程序在各种配置上得到视觉测试。
Katalon AI 视觉测试
除了 Katalon 生态系统,Katalon 视觉测试通过无缝集成,帮助您优化测试性能并节省时间,无需任何设置工作。除了功能性测试外,它还能识别 UI 中的意外视觉变化。
使用 AI,Katalon 识别并匹配基准图像与检查点图像之间的各个区域,然后突出显示布局中的变化。此外,机器学习模型用于提取并比较两幅图像中的文本,帮助用户识别出无论字体、字体大小或颜色如何变化的已修改文本。
您还可以将其与功能性测试并行运行,以涵盖 E2E 场景和视觉回归。
Waldo
其他服务为我们提供了 AI 测试工具和平台,例如 Tricentis 的Waldo (www.waldo.com/)。这是一个无代码的移动应用测试平台,旨在帮助开发人员和 QA 团队自动化并简化 iOS 和 Android 应用程序的测试过程。其无代码方法最大程度地减少了学习曲线,并减少了测试脚本创建和维护所花费的时间。
Waldo 使用户无需编写代码即可创建测试脚本,通过可视化界面定义和记录测试场景。Waldo 会在每次构建时自动运行测试,简化了流程并确保应用程序始终得到测试。
Waldo 提供云端真实移动设备测试,提供准确的结果和逼真的测试环境。Waldo 的无代码方法简化了测试脚本创建过程,使不同编程技能的测试人员都能轻松使用。
另外两个值得提及的工具是 Testsigma 和 Sofy.ai。
Testsigma (testsigma.com/ai-driven-test-automation)与移动 CI/CD 工具无缝集成,便于将其纳入现有的开发工作流程中。
Sofy.ai (sofy.ai/) 是一个 AI 驱动的移动应用测试平台,旨在帮助开发人员和 QA 团队自动化并简化 Android 和 iOS 应用程序的测试过程。其 AI 驱动的方法旨在减少测试脚本创建和维护所花费的时间,同时提高整体测试效率。在本评测中,我们将重点关注 Sofy.ai 的移动测试能力,讨论其主要特点、优缺点,并与市场上其他技术进行比较。Sofy.ai 与移动 CI/CD 工具无缝集成,便于将其纳入现有的开发工作流程中。
通过有效管理测试用例,测试团队可以确保全面覆盖软件功能,识别和修复缺陷,最终交付高质量的软件给终端用户。
测试用例管理工具在简化这个过程和提高测试效率方面发挥着至关重要的作用。让我们讨论一下测试用例管理的概念,并介绍一些流行的测试用例管理工具。
测试用例管理
为了确保高质量的移动应用交付给客户,测试用例管理必须与测试自动化和移动 DevOps 集成。集成意味着使用一个与自动化工具无缝对接并提供实时报告的测试用例管理系统。
这种集成使开发人员能够自动化不同场景的测试,并在多个设备上以受控的环境执行测试。
此外,将测试集成到 DevOps 管道中有助于自动化测试、早期缺陷识别和快速反馈。
与测试自动化和移动 DevOps 集成的测试用例管理可以提高移动应用的质量,减少开发时间并提高效率。
一个与测试自动化和移动 DevOps 集成良好的流行测试用例管理工具是TestRail。它是一个基于 Web 的测试用例管理工具,允许团队创建、管理和组织测试用例。TestRail 可以嵌入到 CI/CD 管道中,如 Jenkins、GitLab、GitHub Actions 等,也可以与 Appium、Espresso 和 XCUITest 等移动测试框架集成。
利用 TestRail 强大的 API、webhooks 或 CLI,你可以轻松自定义你的 QA 流程,使其适应特定的测试工作流程,并与技术栈集成。
其他一些测试用例管理工具包括Zephyr (smartbear.com/test-management/zephyr/) 和Testmo (www.testmo.com/)。
测试报告、洞察和分析是成功的测试过程和策略中的关键组成部分。当你在衡量测试自动化进展的成功时,测试报告、洞察和分析帮助利益相关者理解缺陷的根本原因,并做出数据驱动的决策。
让我们来看看测试报告、测试洞察和测试分析之间的区别:
-
测试报告:通过报告,你可以总结测试结果,包括执行的测试数量、通过和失败的测试数量,以及整体的测试覆盖率。测试报告应易于理解,并为软件的质量提供洞察。
-
测试洞察:测试洞察通过分析缺陷的根本原因并识别需要改进的领域,提供对测试过程的更深入理解。测试洞察有助于利益相关者理解测试失败背后的原因,并采取纠正措施以提高软件质量。
-
测试分析:测试分析涉及分析测试数据,以识别趋势和模式。测试分析可以帮助利益相关者识别应用程序中容易出现缺陷的区域,并根据数据做出提高软件质量的决策。
以下是一些测试洞察和分析的示例:
-
测试覆盖率指标显示了应用程序已测试和未测试的部分。
-
失败率和缺陷密度提供了有关发现的缺陷数量以及它们被发现的速度的信息。
-
测试执行时间和效率有助于识别测试过程中的瓶颈和改进领域。
-
测试结果和通过/失败率总结了应用程序的整体质量和测试的有效性。
可以使用许多工具和技术来收集测试洞察和分析,例如Buildkite Test Analytics(buildkite.com/test-analytics)、Bitrise Insights(bitrise.io/bitrise-insights)和Sauce Labs Insights(saucelabs.com/products/sauce-insights)。
在软件测试中,测试自动化工具和测试用例管理对创建、组织和管理测试用例至关重要。这有助于确保软件应用程序经过彻底测试。然而,实现移动测试覆盖率同样重要。让我们学习如何做到这一点。
实现成功的移动测试覆盖率
在确保移动应用的质量和功能时,测试移动应用可能具有挑战性,甚至更难以实现成功的移动测试覆盖率。以下准则可能会有所帮助:
-
了解应用的目标和需求:在开始测试过程之前,彻底理解移动应用的需求和目标至关重要。应该理解应用的目的和功能,以及它们的特定特性和能力。
-
确定最重要的特性和功能:根据影响和风险优先考虑测试用例。移动应用最关键的特性和功能应该优先考虑,因为并非所有特性和功能都同等重要。可能需要识别哪些特性和功能是用户最常使用的,或者哪些最有可能影响应用的性能或稳定性。
-
应制定全面的测试计划:在识别移动应用的关键特性和功能后,您可以制定一个全面的测试计划,涵盖所有这些特性和功能。该测试计划包括各种测试用例和场景,以识别并解决潜在的应用缺陷和问题。
-
结合手动和自动化测试:手动测试和自动化测试都是至关重要的。手动测试可以有效地识别那些难以自动化的缺陷和问题,而自动化测试可以快速高效地运行大量测试。在开发过程中加入持续测试,并使用合适的测试工具和框架。
-
与开发人员和其他相关方合作:为了实现成功的移动测试覆盖,整个测试过程中与开发人员和其他相关方的合作至关重要。共同识别和修复潜在的应用问题和缺陷,可能需要共享测试结果和反馈。
这些指南将帮助你确保你的移动应用经过彻底测试,准备发布并有效。
成功的 CI/CD 管道和测试自动化的建议
任何成功的软件开发项目都需要有 CI/CD 管道和测试自动化。
以下是确保这些领域成功的一些建议:
-
为你的 CI 管道和测试自动化策略奠定坚实基础,涉及识别需求、选择合适的工具和技术,以及制定明确的实施计划。
-
选择合适的测试工具和框架对于你所做的测试非常重要。目前有许多工具可以用于手动测试、自动化测试和性能测试。
-
提供必要的设备、模拟器、仿真器和网络条件,以设置所需的环境。
-
根据市场分析选择你的测试目标设备和平台。使用真实设备和模拟器/仿真器相结合。为了确保广泛覆盖,确保包含流行设备、操作系统版本、屏幕分辨率和外形尺寸的混合。
-
分析 CI 管道和测试自动化的结果可以帮助你识别趋势、改进的领域和潜在问题。利用这些洞察,你可以不断完善和改进你的流程。
-
投资于团队培训可以帮助他们发展实施和维护 CI 管道及测试自动化策略所需的技能和知识。
-
通过不断根据结果和反馈改进测试策略,确保你的移动应用达到最高质量。根据需要更新测试用例、脚本和工具。
移动测试人员的技能
移动测试人员在确保移动应用质量和可靠性方面发挥着至关重要的作用。以下是移动测试人员应具备的一些基本技能:
-
移动测试人员应该能够与其他相关方有效沟通和合作,包括开发人员、产品负责人和业务分析师。
-
移动测试人员必须能够识别、分析和解决移动应用中的问题和缺陷。
-
移动测试人员需要了解他们所测试的移动平台的操作系统、设备类型和屏幕尺寸。
-
为了识别潜在的问题和缺陷,移动测试人员应该熟悉移动应用的架构,包括前端和后端如何交互。
-
为了自动化重复性测试并提高测试覆盖率,移动测试人员应该熟悉测试自动化工具和技术,包括 Appium、Espresso 和 XCUITest 等框架。
-
移动测试人员需要能够测试移动应用的性能,包括检查应用崩溃和加载缓慢等问题。
-
成为一名成功的移动测试人员,测试人员应该具备扎实的应用安全知识,并能够测试潜在的安全问题,如恶意软件和未经授权的访问。
-
移动测试人员必须熟练使用缺陷跟踪和报告工具,以便有效地记录、跟踪和报告问题给开发团队。
如何提升你的移动测试技能
现在我们已经讨论了移动测试人员需要的技能,接下来我们来探讨如何提升我们的移动测试技能。
跟上移动应用快速发展的步伐,需要不断提升自己的移动测试技能。你可以通过多种方式实现这一点:
-
了解各种可用的移动平台和操作系统,如 Android 和 iOS,是一个很好的起点。
-
参与真实项目,体验真实世界中的移动测试。
-
跟上最新的移动技术趋势,如 5G 或物联网,将帮助你预见未来的挑战和机遇。
-
熟悉不同的移动设备、操作系统和浏览器。
-
了解 Appium、XCUITest、Espresso、Detox 和 Maestro 等一些当今最流行的移动测试工具和框架。
-
为了交流知识和最佳实践,加入一个移动测试人员的社区,如在线论坛或本地聚会。
-
通过参加在线课程、阅读博客、参加网络研讨会和行业活动,持续学习。跟上这些资源将帮助你在快速变化的移动测试领域保持信息灵通并具备适应能力。
-
测试人员应能够将技术技能(如移动平台和测试自动化的知识)与软技能(如沟通和解决问题的能力)结合起来。移动测试人员必须具备多样化的技能组合,以帮助确保移动应用的质量和可靠性,最终确保最佳的客户体验。
总结
本章我们讨论了移动应用测试的众多方面。我们了解到,测试移动应用对于提供高质量的用户体验至关重要。我们还探讨了测试自动化的优势,如更快的测试周期和跨平台与设备的一致结果。这帮助我们理解了制定良好测试策略的重要性,以克服移动应用测试中的挑战和障碍。
此外,我们获得了关于各种移动应用测试工具、框架和服务的宝贵见解。我们理解了测试移动应用 UI 和功能的重要性,以确保无缝的用户体验。我们对云端设备上进行测试以及 AI 和 ML 对移动测试的影响的探索,加深了我们的理解,使我们认识到全面的测试用例管理的必要性。
这简化了测试过程,确保在各种设备、操作系统版本和网络条件下都能成功覆盖移动测试。通过引入这些概念,开发者可以实施有效的移动应用测试策略,创建满足用户期望的强大且可靠的应用程序。
下一章将涵盖移动应用发布管理。由于技术发展迅速和用户体验需求的不断变化,高效发布移动应用至关重要。我们还将讨论最佳实践和面临的挑战。
1727

被折叠的 条评论
为什么被折叠?



