在微服务架构和持续交付已经成为主流的软件研发环境中,产品集成测试的重要性越来越高。尤其是在多个团队并行开发、频繁发布、A/B 测试持续运行、全球多地区同步上线的复杂场景下,如何通过自动化测试和端到端质量保障机制,在不牺牲创新速度的前提下维护用户体验,成为许多工程团队面临的核心问题。

某海外流媒体平台的会员体验采用微服务架构,并会根据数千万会员的真实使用情况进行个性化定制。这些服务由多个团队共同负责,每个团队都有各自的构建和发布周期。这意味着,即使微服务每天都以去中心化方式持续部署,仍然需要一支专注且经验丰富的集成测试团队,来确保端到端质量标准始终得到维护。
作为产品工程集成测试团队,我们的职责是在不影响创新速度的前提下守住质量关,并确保开发人员能够快速获得反馈。每个开发团队都需要对自己的交付成果质量负责。我们的目标,是与各工程团队无缝协作,聚焦端到端功能以及跨团队协同。我们是一支非常精简的团队:在一个拥有 200 多名工程师的组织中,专职集成测试工程师只有少数几位。
在企业研发实践中,要让这类集成测试体系真正发挥作用,往往不能只依赖测试脚本本身,还需要把目标、需求、开发、测试、发布和知识沉淀串联起来。像 PingCode 这类智能化研发管理工具,就可以帮助团队覆盖从目标制定、需求评审、项目开发、测试发布到 Wiki 知识沉淀的完整流程,并打通研发工具链,让质量数据和研发过程数据更顺畅地流转。
在确保质量的同时保持高速创新,持续给我们的团队带来许多有趣的挑战。本文将重点介绍产品集成测试中的三个关键场景:
- 高影响力内容的测试与监控
- A/B 测试自动化
- 全球上线与自动化冒烟测试
高影响力内容的测试与监控:端到端质量保障的关键场景
平台上经常会推出许多高影响力内容,例如热门原创剧集。这些内容的形式和规模各不相同:有些是连续剧,有些是独立影片;有些面向儿童,有些会一次性上线整季,有些则按周更新若干集。其中一些内容还会参与复杂的 A/B 测试,不同测试组会呈现不同的用户体验。
这类内容在会员中的曝光度非常高,因此需要进行充分测试。测试通常会在内容上线前数周开始,并一直持续到上线当天。上线之后,我们还会监控这些内容在所有国家和地区、不同设备平台上的表现。
测试策略会随着内容所处阶段而变化。不同阶段的推广方式也不相同,这使得测试和自动化工作变得更加复杂。整体来看,测试主要分为两个阶段。
内容上线前
在内容上线之前,我们必须确保相关元数据已经准备到位,从而保证上线当天一切顺利。由于热门内容上线通常涉及多个团队,我们需要确保所有后端系统之间,以及后端系统与前端用户界面之间,都能顺畅通信。
这些内容可能会通过首页顶部的大型推荐位、预告片和宣传片等方式进行推广。但由于平台在多个层面都高度重视个性化,我们还需要设计复杂的测试用例,验证系统是否把合适的内容推荐给了合适的会员。
由于系统处于持续变化之中,这一阶段的自动化测试难度较高。因此,此阶段的大部分测试仍以手动测试为主。
内容上线后
我们的工作并不会在上线当天结束。内容上线之后,我们还必须持续监控,确保会员体验不受影响。
上线后的内容会成为庞大片库的一部分,这本身也会带来新的挑战。此时,我们需要编写测试,检查这些内容是否仍能持续吸引观众,以及相关数据的完整性是否得到维护。例如,有些测试会验证剧集简介自上线以来是否发生异常变化;另一些测试则会验证在使用正确搜索词时,搜索结果是否仍能返回对应内容。
随着原创内容和授权内容规模持续扩大,我们已经无法继续依赖手动测试。幸运的是,内容上线后,我们可以对其做出一些通用假设,因为相关数据和推广逻辑通常不会频繁变化。例如,剧集的集数应该大于 0;影视内容应当可以被搜索到,等等。这使我们能够使用自动化测试工具持续监控内容,并检查与每个内容相关的功能是否依然正常运行。
高影响力内容测试充满挑战,而且时间压力很大。但能够参与热门内容上线,并确保所有相关功能和后端逻辑在上线时正常运行,仍然是一段令人兴奋的经历。偶尔遇到名人、获得一些有趣的周边,也算是不错的额外福利。
A/B 测试自动化:如何提升端到端验证效率
我们会频繁进行 A/B 测试。在任意时刻,平台上通常都会同时运行多种不同复杂度的 A/B 测试。
过去,A/B 测试验证主要采用自动化测试和手动测试相结合的方式:自动化测试主要用于各个组件层面的白盒测试,而端到端测试,也就是黑盒测试,则主要依赖手动完成。随着 A/B 测试数量显著增长,手动进行端到端验证已经无法满足需求,因此我们开始逐步增加自动化测试。
为 A/B 测试添加端到端自动化的一大挑战,在于需要自动化的组件数量非常庞大。我们的做法是,将测试自动化本身视为一个可交付产品,并聚焦于交付由可复用组件构成的最小可行产品。对我们而言,这个最小可行产品至少要能够通过验证各个微服务 REST 端点返回的数据,来保障基本的会员体验。这样,我们就可以逐步迭代解决方案,而不是一开始就试图设计一个完美方案。

拥有一个通用库,对我们来说至关重要。它让我们能够复用和重新组合模块,用于执行各类自动化测试。
例如,我们曾经有一个 A/B 测试,需要修改会员的“我的片单”。在实现自动化时,我们编写了一个脚本,用于向会员的片单中添加或删除内容。这些脚本都进行了参数化,因此之后任何涉及“我的片单”的 A/B 测试,都可以复用这些脚本。
这种方法让我们能够更快地实现 A/B 测试自动化,因为可复用的构建模块越来越多。此外,我们还尽可能复用已有自动化流程,以提高效率。例如,我们并没有重新编写自己的 UI 自动化脚本,而是利用内部测试平台来触发需要在各类设备上执行 UI 操作的测试场景。
在选择用于实现自动化测试的语言和平台时,我们最关注的是能否为产品团队提供快速反馈。为此,我们需要测试套件的执行速度足够快,最好能达到秒级。同时,我们也希望测试尽可能容易实现和部署。
考虑到这两个要求,我们放弃了最初偏好的方案。原因是,如果采用传统服务端语言实现,测试将依赖多个相互关联的包或库文件,我们就必须处理依赖管理、版本控制以及不同版本变更带来的额外成本。这会显著增加测试运行时间。
最终,我们决定通过访问微服务的 REST 接口来实现自动化。这样可以绕过复杂依赖,也避免在测试中编写任何业务逻辑。为了确保自动化实现和部署足够简单,我们采用了参数化 shell 脚本与 Python 脚本相结合的方式,这些脚本都可以直接从命令行执行。我们使用一个 shell 脚本控制测试用例执行,再由它调用其他 shell 或 Python 脚本,而这些脚本则作为可复用工具存在。

这种方法带来了几个明显好处。
第一,测试运行时间大幅缩短。包含环境准备和清理在内,测试运行时间通常在 4 秒到 90 秒之间,中位数约为 40 秒。如果使用基于传统服务端语言的自动化工具,我们估计中位运行时间会在 5 到 6 分钟之间。
第二,持续集成变得简单得多。我们只需要配置一个持续集成任务,让它从代码仓库下载代码,执行必要脚本,并记录测试结果。持续集成平台内置的控制台日志解析能力,已经足以提供测试通过和失败的统计信息。
第三,上手成本很低。其他工程师只需要访问代码仓库,并准备一个终端,就可以运行整套测试。
全球上线测试:多国家、多语言场景下的自动化冒烟测试
2015 年,我们最大的项目之一,是确保有足够的集成测试来保障平台在 130 个国家和地区同步上线。这意味着,至少我们需要针对每个国家、地区和语言组合,实现一套自动化冒烟测试。这实际上为我们的自动化产品增加了一个全新的功能维度。
由于测试本身运行速度已经足够快,我们最初认为,只需要针对每个国家和地区组合循环执行相同的测试代码即可。然而实际结果表明,原本大约 15 秒就能完成的测试,现在需要一个多小时才能完成。我们必须找到更好的方法。此外,每个测试日志的大小也增加了约 250 倍,使故障排查变得更加繁琐。
为了解决这个问题,我们采取了两项措施。
第一,我们利用某持续集成平台的矩阵插件实现测试并行化,使每个国家和地区的测试都能并行运行。此外,我们还对持续集成从节点进行了定制,使其支持多个执行器,避免某些测试出现竞态条件或无限循环时,导致其他任务排队等待。由于我们的自动化流程只需要运行 shell 脚本,不需要预加载二进制文件,这种方案对我们来说非常可行。
第二,我们不希望重构此前已经编写好的所有测试,也不希望每个测试都默认针对所有国家和地区组合运行。因此,我们采用了一种可选模型:测试仍然可以按照原有方式编写;如果希望某个测试具备全球运行能力,只需要为它额外添加一个包装器。这个包装器会接收测试用例 ID 以及国家和地区组合作为参数,然后使用这些参数执行测试用例。

目前,我们已经在全球范围内运行自动化测试,覆盖所有高优先级集成测试用例,包括对所有可提供相关内容地区的高影响力内容进行监控。
产品集成测试的未来挑战
在这个平台上,创新步伐不仅没有放缓,反而还在不断加快。因此,我们的自动化测试产品也必须持续演进。当前路线图中的一些重点项目包括以下几类。
基于工作流的测试
这种测试方法会将测试用例表示为一个工作流,或者一系列步骤,用来模拟数据在服务链路中的流动。这样做的目的,是降低测试失败后的排查成本,因为我们可以更容易地识别失败发生在哪一个具体步骤。
警报集成
平台内部部署了多个警报系统。当某些警报被触发时,继续执行某些测试套件可能并不合适。原因在于,这些测试依赖的某些服务可能并未完全正常运行,甚至可能已经失败,因此测试结果无法提供有效信息。
我们需要构建一个系统来监听这些警报,并根据警报状态判断哪些测试应该运行,哪些测试应当暂缓执行。
混沌工程集成
目前,我们的测试默认假设整个平台生态系统处于 100% 正常运行状态,但现实情况并不总是如此。可靠性工程团队会持续进行混沌演练,以测试系统整体韧性。
目前,在降级环境下运行的自动化测试结果显示,失败率可能高达 90% 以上。我们需要改进自动化测试,使其即使在降级环境中,也能提供有价值的测试结果。
结语:用自动化测试支撑高速产品迭代
未来,我们还会进一步探讨当前面临的挑战以及其他相关实践。自由与责任并重的工程文化,在帮助团队快速适应不断变化的技术生态方面发挥着至关重要的作用。
接下来,还会有更多尝试和新的挑战等待我们去解决。对于集成测试团队而言,真正的难点从来不只是“测试更多”,而是在高速迭代、微服务拆分、全球化发布和复杂实验并行的背景下,建立一套足够灵活、足够快速、也足够可靠的质量保障体系。
这正是产品集成测试的价值所在:它既不是单纯的上线前检查,也不是开发流程末端的质量补丁,而是连接产品体验、工程交付和系统稳定性的关键环节。只有当测试能力能够跟上产品创新速度,团队才能在快速发布的同时,持续保障用户体验。
而当产品集成测试从单一团队扩展到跨部门、跨角色协作时,团队还需要更通用的项目协作能力。比如 Worktile 这类项目协作系统,可以承接任务、项目、文档、目标、日历、工时和审批等协作场景,帮助产品、研发、测试和运营等角色围绕同一交付目标高效配合。
文章包含AI辅助创作:产品集成测试实践:如何在高速迭代中保障微服务质量,发布者:shang,转载请注明出处:https://worktile.com/kb/p/3979943
微信扫一扫
支付宝扫一扫