盘口在搭建时,尤其是飞鸟这类的源码【电报TG-duotebb】版权所有,禁止转载。质量都是至关重要的,无论是为了确保你的产品的出色体验和最少的错误,甚至是出于安全原因,而且众所周知,好的代码伴随着好的测试。与质量保证相关的测试层次结构是从单元测试到 E2E 测试,所以我们在同一页面上——我将简要介绍每一个,以及为什么最终目标是实现对你的 E2E 测试产品。
单元测试位于金字塔的底部,因为它们听起来就像是最小的独立测试单元。这意味着你获取你编写的组件或代码片段,并将其作为独立单元进行测试。该代码与软件堆栈和系统中的任何其他内容完全断开连接,并且测试将检查它是否按预期执行,作为一个独立的实体。
一旦我们完成了对代码的基本测试,我们需要更深入地研究代码,并使用更多上下文来测试代码,了解代码在堆栈中实际存在的位置,这就是集成测试的用武之地。集成测试是我们开始将我们的代码与其他模块和服务集成,以了解它在更现实的生态系统中如何执行和运作。虽然这些可以提供一些上下文,但它们仍然需要快速,因此它们实际上并没有涵盖所有场景,也根本没有涵盖用户如何与你的产品交互。
虽然有些人会争辩说单元测试是最简单的测试单元,但有时你需要实际编写模拟模块以确保代码实际工作,而使用集成测试你可以插入实际的现有模块。此时,你验证在模拟和注入单元测试依赖项时的假设是否成立。所以这是一个折腾 - 但是这两种测试类型通常会带来与端到端(E2E)测试完全不同的挑战。
E2E 测试可能是你需要对产品执行的最重要的测试。确保实现你试图为最终用户提供的核心业务和价值对公司而言至关重要。它涉及尽可能地模拟最终用户,并确保产品按预期工作——考虑到许多因素:可用性、性能、用户体验等等。
E2E 测试通常涉及模拟最终用户旅程,例如登录、将其与用户现有环境集成、与之交互等等。由于要做到这一点并提取现实结果涉及很多事情,因此许多公司选择手动执行此操作。
公司通常雇佣 QA 团队,其唯一目的是在测试环境中启动产品,并像普通用户一样使用产品。然而,公司很快就会发现,他们需要以更快的速度和更大的规模来完成这项工作,而 QA 和工程团队之间需要反复来回打票,这是一个乏味且令人厌烦的过程这在很大程度上只会让工程师感到沮丧。
所以他们决定通过创建一个测试自动化团队来自动化测试。
在 Diversion,作为一家早期创业公司,我们需要我们所有的工程师都专注于编写出色的代码,以快速实现我们的产品发布目标。然而,我们知道我们不能在质量上妥协,所以我们从第一天开始就着手设计一个自动化 E2E 测试的解决方案。我们将向你介绍我们如何使用 Docker Compose、RPyC 和 Puppeteer 构建和自动化 E2E 测试框架。
自动化所有测试
开发人员应该快乐并享受他们的日常工作是我们理念的核心。然而,作为工程经理,开发人员最常见的痛苦来源之一是我们无法妥协的测试。
自动化是消除所有流程中的人为错误、简化可重复流程并消除手动测试痛苦的好方法。我们明白,如果我们投资于测试自动化的技术设计,我们将能够从我们的工程师那里卸下这个负担。此外,通过自动化我们的 E2E,我们的工程师对我们的产品产生了更高的满意度和所有权,他们专注于打造出色的产品,并在最大限度地减少摩擦的同时内置质量护栏。
然而,自动化你的产品的端到端用户体验是相当具有挑战性的。我们需要确保测试涵盖端到端用户流链中的所有关键部分以及他们将执行的典型操作,例如:
登录并在网页中输入凭据,检查文件系统操作,例如创建文件、写入文件然后将其移动到某处,使这在多台机器上并行发生,并使这些机器能够相互通信。最重要的是,我们需要能够相信结果的准确性。
堆栈
在对我们需要设计和构建的内容进行了一些研究和理解之后,我们选择了Docker Compose、RPyC和Puppeteer作为我们的测试自动化套件。我们的 E2E 测试的技术栈完全独立于我们为我们的产品选择的栈(我们将在另一篇文章中深入探讨),它可以与任何能够运行 Docker 和 Docker Compose 的产品一起运行他们的环境。
我们选择了 Docker Compose,因为该服务需要启动多个主机并相互通信。Docker Compose 为此提供了一个方便的解决方案,因为它默认为你的应用程序设置一个单一的平面网络。这意味着服务的每个容器都加入默认网络,并且该网络上的其他容器可以通过与容器名称相同的主机名访问。Docker Compose 也是生态系统中非常流行的工具,因此很容易与其他流行的 CI 工具(如 Github Actions)集成和运行它。使自动化真正易于设置。
RPyC 使我们能够从单个脚本运行测试场景,因为一台主机可以控制参与测试脚本的其他主机。我们的大部分后端代码都是 Python,所以这对我们来说是一个明智的选择,因为整个团队都对此感到满意。RPyC 还使我们能够在测试场景中执行我们需要的任何随机操作,例如执行任何二进制文件。
Puppeteer 是 Chrome 的自动化工具,可让你控制网页,并能够单击按钮、填写表单和执行其他基于 Web 的操作。当你开始使用Diversion CLI时,登录过程会将你从终端带到网页进行身份验证。然后,它使用代码交换流程 ( RFC7636 ) 的证明密钥从服务器获取凭据。Puppeteer 使我们能够模拟执行 Web 登录过程的用户。