App 自动化测试的价值与体系
同学们大家好,从这个章节开始,我们来学习 app 自动化测试。在开始学习之前,我们先来了解一下 app 自动化测试的价值。
App 自动化测试的时代背景
随着许多公司向互联网方向转型,包括国有企业和事业单位,它们开始开发各种互联网产品,例如 Web 端、App 端,以适应当今时代的需求。当前人们普遍习惯使用手机,App 的用户数量也越来越多,因此 App 的更新速度也越来越快。
几年前公司发布产品,可能是每月发布一个版本,然后逐渐变为每周发布一个版本,现在甚至可能每小时发布一次。尤其是后端接口,可能每分钟或每秒钟发布多个产品线。迭代速度越来越快。
而且现在的产品需要兼容不同的平台,除了 Android、iOS,微信小程序和 H5 也越来越受欢迎。
首先,先来了解一下 app 自动化测试出现的时代背景。随着许多公司向互联网方向转型,包括国有企业和事业单位,它们开始开发各种互联网产品,例如 Web 端、App 端,以适应当今时代的需求。当前人们普遍习惯使用手机,App 的用户数量也越来越多,因此 App 的更新速度也越来越快。几年前公司发布产品,可能是每月发布一个版本,然后逐渐变为每周发布一个版本,现在甚至可能每小时发布一次。尤其是后端接口,可能每分钟或每秒钟发布多个产品线。迭代速度越来越快。而且现在的产品需要兼容不同的平台,除了 Android、iOS,微信小程序和 H5 也越来越受欢迎。总之,App 测试现在遇到的挑战有下面几种情情景,对于不同的情景需要解决的问题也不同。
- 多平台
- 多环境
- 多机型
- 多版本共存
对于多平台场景来说,我们要确保每个平台上的稳定性,用户使用时无问题。因此,需要在每个平台上进行严格的测试和回归,导致测试工作量非常大。多环境是指在测试、联调、预发布和线上环境进行验证。每个环境都需要验证一些功能和测试用例,有时还需要进行一些探索性测试。多机型是指现在市场上不同品牌和型号的机型需要考虑,例如,安卓平台中的华为、小米、OPPO 和 VIVO 的主流品牌,此外,每个品牌中还有不同的机型和型号。还有一些小众的机型无法完美覆盖。因此,许多公司通常会选择一些主流机型进行主要功能点的验证。例如,对于华为,会选择验证最新的几款机型,而较旧的机型可能不予考虑,因为用户数量相对较少。而且现在的大部分产品还存在用户使用旧版本和新版本的情况,所以仍需要对旧版本进行验证,以满足不同用户的需求。随着产品的不断发展,平台的增多以及上线渠道的增加,测试人员的工作量也越来越大。数以百计甚至上千个测试用例需要进行回归测试,并需要验证一些新功能点。这种情况下,测试人员加班情况日益严重。因此需要优化测试流程以提高效率。例如,可以用自动化手段来辅助完成一些测试工作,通过编写代码或脚本的方式,让自动化工具帮助我们完成一些重复性的工作和固定流程的验证,在确保产品质量的同时提高工作效率。
App 自动化测试的价值
App 自动化测试在软件开发过程中扮演着重要的角色,具有以下几个方面的价值:
- 提高测试效率和覆盖率
- 增强测试准确性和一致性
- 加速发布周期
- 支持持续集成和持续交付
- 提高软件质量和用户体验
- 降低成本和风险
从上面描述的这些场景,我们就可以看出 app 自动化测试的价值。App 自动化测试在软件开发过程中扮演着重要的角色,具有以下几个方面的价值。第一,可以提高测试效率和覆盖率:自动化测试可以执行大量的测试用例,覆盖各种功能和场景,相比手动测试可以节省大量的时间和人力资源。自动化测试可以在短时间内运行大量测试,快速发现潜在的问题和缺陷,提高测试的效率和覆盖率。第二,可以增强测试准确性和一致性:自动化测试可以消除人为的错误和测试的主观性,确保测试的准确性和一致性。自动化测试脚本可以精确地模拟用户操作和测试场景,避免了人为疏忽和遗漏,提高了测试的可靠性。第三,可以加速发布周期:通过自动化测试,可以在应用程序开发周期的早期阶段就进行测试,快速发现和修复问题。这样可以减少后期修复的成本和风险,加速应用程序的发布周期,提高产品交付的速度。第四,可以支持持续集成和持续交付:自动化测试是持续集成和持续交付过程中的关键环节。通过集成自动化测试到 CI/CD 流程中,可以自动化执行测试用例,及时发现问题,确保每次代码提交后的应用程序的质量和稳定性。第五,可以提高软件质量和用户体验:自动化测试可以发现应用程序的潜在缺陷和问题,帮助开发团队及时修复,并提高软件的质量和稳定性。通过减少崩溃、功能错误和性能问题,可以提升用户的满意度和体验。第六,可以降低成本和风险:自动化测试可以降低测试过程中的人力成本和时间成本,同时也减少了人为错误的风险。通过自动化测试,可以在较短的时间内覆盖更多的测试用例,减少人为操作的误差,并提供更加可靠的测试结果,从而降低了测试的成本和风险。
App 自动化测试技术选型
工具名称 | 被测系统 | 测试 | 脚本语言 | 支持 H5 | 跨应用 | 稳定性 | SDK 自带 |
---|---|---|---|---|---|---|---|
Appium | Android, iOS | 功能 | Java/Python/JS/C/C##/Perl | 支持 | 可以 | 一般 | 否 |
Airtest | Android, iOS | 功能 | Python | 支持 | 可以 | 稳定 | 否 |
Macaca | Android, iOS | 功能 | Java/Python/JS | 支持 | 可以 | 稳定 | 否 |
Calabash | Android, iOS | 功能 | Ruby | 支持 | 可以 | 一般 | 否 |
Uiautomator2 | Android | 功能 | Java | 支持 | 可以 | 稳定 | 是 |
Robotium | Android | 功能 | Java | 支持 | 可以 | 稳定 | 否 |
ATX | Android | 功能 | Python | 一般 | 可以 | 一般 | 否 |
Uiautomation | iOS | 功能 | JS | 支持 | 可以 | 稳定 | XCode 自带 |
XCUITest | iOS | 功能 | Swift/Objective-C | 支持 | 可以 | 稳定 | 是 |
WDA | iOS | 功能 | Swift/Objective-C | 支持 | 可以 | 稳定 | 否 |
既然 app 自动化测试如此重要,相关的技术也就发展的越来越好,现在市面上已经有很多中 app 自动化相关的技术。下面我们可以把常见的这些技术从下面这几方面给大家做个介绍。
自动化工具选择的取决因素
-
应用程序平台:首先需要确定要进行自动化测试的应用程序平台,是 iOS、Android 还是跨平台应用。不同平台可能需要使用不同的测试工具和框架。
-
编程语言:选择一个熟悉的编程语言作为自动化测试的开发语言。常用的编程语言包括 Python、Java、JavaScript 等,选择一个适合团队技术栈和项目需求的编程语言。
-
测试框架:选择一个适合的测试框架来编写和执行测试用例。常见的测试框架包括 Appium、Calabash、Espresso、XCUITest 等,根据应用程序的平台和需求选择合适的框架。
-
设备管理:考虑如何管理和连接测试设备。可以选择使用物理设备或模拟器/仿真器进行测试,也可以使用云设备提供商来管理和运行测试设备。
-
集成能力:考虑测试工具的集成能力,是否能与持续集成/持续交付(CI/CD)流程集成。可以选择能够与常用的 CI/CD 工具如 Jenkins、Travis CI、CircleCI 等集成的测试工具。
-
社区支持和文档资料:选择一个有活跃社区支持和丰富文档资料的测试工具和框架。这样可以更容易地获取帮助和解决问题,加快测试开发的速度。
-
可维护性和可扩展性:考虑测试框架和工具的可维护性和可扩展性。选择一个易于编写、维护和扩展的测试框架,以便适应应用程序的变化和扩展测试需求。
既然有这么多技术,那我们自己要做的时候,到底要选择哪个技术呢?下面我们来看看选择工具要考虑的点。在选择 App 自动化测试技术时,可以根据以下几个方面,从中选优,找到更适合实际场景的工具和方案:基于这些方面,我们这里给大家推荐的工具是 appium。
Appium 测试框架的优势
推荐 Appium 的原因:
- 跨语言:Java、Python、NodeJS 等。
- 跨平台:Android、iOS、Windows、Mac 等。
- 底层多引擎可切换。
- 生态丰富,社区强大。
综合考虑一下上面的这些因素,最终推荐大家选择使用 Appium 框架进行测试,结合适当的编程语言和测试框架来编写测试脚本。因为 Appium 既能跨语言,又能跨平台,而且底层有多种引擎可以切换。本身的社区也很强大,遇到问题可以得到及时的解决。
适用场景
- 业务流程不频繁改动。
- UI 元素不频繁改动。
- 需要频繁回归的场景。
- 核心场景等。
工具选择好之后,我们来看看什么场景下适合做 app 自动化测试。app 自动化测试相对来说成本是比较高的。我们在设计自动化测试策略的时候,一般不会把所有的用例都实现自动化测试。那什么时候我们可以去做这个 app 自动化测试呢?那在这我给大家贴了一张图,这张图非常经典,就是测试金字塔模型。我们先来看这两个坐标。左边这个坐标,左边这个纵坐标代表是从下往上,执行效率越来越低。然后右边这个坐标代表的是从下往上,成本越来越高。 OK 那这时候我们就会发现一个问题,就是 UI 自动化测试相对执行效率又低,然后成本又高。注意,这里的对比是和接口测试还有单元测试一个对比。但是对比人工对比人力,那肯定还是要一这个自动化测试它的一个执行效率和成本要更加的低的。但是所以说这个就会导致一个问题,就是我们一定要慎重地去选择哪一些用例适合去做 UI 自动化测试?哪一些用例不要去做 UI 自动化测试?在这个图里面透露给我们的讯息,不是说不要去做 UI 自动化测试,而是去有选择地去做 UI 自动化测试。我们一定要明白这个场景。那这时候我们抛出来一个观点,叫做有选择的去做 UI 自动化测试。那什么叫做选择?那我们哪一些部分可以选择去做 UI 自动化测试呢?那我在这给大家列举了四种场景,基本上也是所有的大厂对于这个哪一些用例适合去做 UI 自动化测试的一个共识吧。那第一条就是业务的流程不要频繁地改动。如果说说你业务的流程今天和明天都不一样,这个上个迭代和这个迭代都不一样。那这部分不要去做 UI 自动化测试,因为你脚本刚写好,那下个版本就用不上了。第二个就是 UI 的元素不要频繁地变动,比如说你们的前端老是这个动不动就改这个元素的一个布局,那这种情况也不适合去做 UI 自动化测试。第三种就是需要频繁回归的一些场景。举个例子,其实这个频繁回归的场景也就是通常也指的是我们的一个核心场景比如说举个例子,比如说登录注册,那登录注册这种功能通常开发出来一万年都不会变,但是这部分功能又永远的存在。那这部分功能就叫做频繁回归的场景,我们每个版本可能都得需要去进行测试,那这部分它又不会又要频繁回归,但是又不怎么变动的场景,我们这种登录注册我们就很适合去做这个 UI 自动化测试。那还有第四种叫做这个核心场你比如说我们的一个产品是一个商城这样的一个产品。那对于我们这个商城产品来说,用户的从下单到支付这个过程是不是就是我们的核心场景?那这种核心场景是和你的业务息息相关的。那如果说你是抖音,如果说你是这个我们的被测产品是抖音或者 B 站这样的一个视频,那它的一个这个比如说我们看视频切换视频就是我们的一个核心场景。针对于这些核心场景,我们全部都应该去对它做一些自动化测试。那一些非核心场景就比如说一些不重要的功能,或者说这个用例级别比较低的一个功能,我们就可以选择性地去做 UI 自动化测试。那这一部分就是叫做什么时候可以做 UI 自动化测试?
总结
总而言之,自动化测试对于移动应用程序的开发过程来说是必不可少的。它提供了高效、可重复的测试方法,支持持续集成和持续交付,提高软件质量并节省成本和时间。通过自动化测试,开发团队可以更加自信地发布高质量的应用程序,满足用户的需求和期望。
App 自动化测试适用于回归测试、兼容性测试、多语言测试、性能测试、UI 自动化测试、安全性测试、多渠道发布测试以及持续集成和持续交付等多种场景。
总而言之,自动化测试对于移动应用程序的开发过程来说是必不可少的。它提供了高效、可重复的测试方法,支持持续集成和持续交付,提高软件质量并节省成本和时间。通过自动化测试,开发团队可以更加自信地发布高质量的应用程序,满足用户的需求和期望。App 自动化测试适用于回归测试、兼容性测试、多语言测试、性能测试、UI 自动化测试、安全性测试、多渠道发布测试以及持续集成和持续交付等多种场景。