菜单

端到端测试

相关源文件

本文档描述了 code-server 中使用的端到端测试基础架构。端到端测试通过自动化浏览器与正在运行的 code-server 实例的交互来验证 code-server 是否按用户预期正常工作。有关单元测试或其他测试方法的信息,请参阅测试基础架构

概述

code-server 的端到端测试框架使用 Playwright 自动化浏览器交互,并在不同浏览器中验证 code-server 的功能。这些测试会启动 code-server 的独立实例,通过浏览器与它们进行交互,并验证预期的行为。

来源:test/package.json1-31 test/playwright.config.ts1-44 test/e2e/baseFixture.ts1-65

测试架构

E2E 测试系统遵循页面对象模型(Page Object Model)模式,将测试逻辑与 UI 交互代码分离。这使得测试更易于维护和阅读。

来源:test/e2e/models/CodeServer.ts1-598 test/e2e/baseFixture.ts1-65

关键组件

CodeServer 类

CodeServer 类负责启动和管理用于测试的 code-server 实例。它提供了以下方法:

  1. 使用自定义参数和环境启动新的 code-server 进程
  2. 获取 code-server 运行的地址
  3. 为测试创建隔离的工作区
  4. 执行 code-server 命令
  5. 测试完成后关闭 code-server 进程

此类确保每个测试都有自己独立的 code-server 实例和干净的环境。

来源:test/e2e/models/CodeServer.ts37-260

CodeServerPage 类

CodeServerPage 类实现了页面对象模型(Page Object Model)模式,并提供了一个用于与 code-server UI 交互的高级 API。它封装了 Playwright 的 Page 对象,并提供了特定于 code-server 的方法,从而使测试更易于阅读和维护。

来源:test/e2e/models/CodeServer.ts262-598

测试夹具

端到端测试使用自定义的 fixture,这些 fixture 提供了已初始化的 CodeServerCodeServerPage 实例。这些 fixture 负责 code-server 实例和浏览器自动化的设置与拆卸。

来源:test/e2e/baseFixture.ts11-38

测试执行流程

下图展示了一个典型端到端测试的流程

来源:test/e2e/baseFixture.ts1-65 test/e2e/models/CodeServer.ts37-260

测试类别

端到端测试套件涵盖了 code-server 功能的几个关键领域

测试类别描述源文件
身份验证测试登录功能、密码验证和速率限制test/e2e/login.test.ts
编辑器核心测试基本的编辑器功能和可见性test/e2e/codeServer.test.ts
终端测试集成终端和环境变量test/e2e/terminal.test.ts
扩展测试扩展加载和功能test/e2e/extensions.test.ts
UI 集成测试菜单导航和对话框test/e2e/openHelpAbout.test.ts

来源:test/e2e/login.test.ts1-61 test/e2e/codeServer.test.ts1-44 test/e2e/terminal.test.ts1-54 test/e2e/extensions.test.ts1-37 test/e2e/openHelpAbout.test.ts1-18

测试配置

Playwright 配置为在多个浏览器(Chromium 和 WebKit)中运行测试,并具有特定的超时、重试和报告设置。

来源:test/playwright.config.ts1-44

运行 E2E 测试

可以使用提供的脚本运行端到端测试

该脚本构建一个测试扩展,验证 code-server 构建,并运行 Playwright 测试

您还可以通过设置 CODE_SERVER_TEST_ENTRY 环境变量来测试 code-server 的特定构建

来源:ci/dev/test-e2e.sh1-51 test/playwright.config.ts5-12

编写端到端测试

端到端测试遵循一致的模式

  1. 使用 describe 函数创建带有 code-server 参数的测试套件
  2. 使用 test 函数创建单个测试用例
  3. 使用 codeServerPage fixture 与 code-server 交互
  4. 使用 expect 函数进行断言

示例测试

来源:test/e2e/login.test.ts1-61 test/e2e/baseFixture.ts1-65

测试环境设置

测试基础设施为每个测试设置了以下环境

  1. code-server 的临时工作区目录
  2. 自定义配置和设置
  3. 用于验证扩展功能的测试扩展
  4. 隔离的实例,以防止测试相互干扰

来源:test/e2e/models/CodeServer.ts78-113 test/utils/constants.ts1-5

常见的端到端测试模式

身份验证测试

身份验证测试会验证登录功能,处理错误的密码,并测试速率限制。

来源:test/e2e/login.test.ts31-38

UI 交互测试

UI 交互测试会导航菜单,执行命令,并验证 UI 元素。

来源:test/e2e/openHelpAbout.test.ts5-16

终端集成测试

终端集成测试会聚焦终端,执行命令,并验证环境变量。

来源:test/e2e/terminal.test.ts14-31

结论

code-server 中的端到端测试基础架构提供了一种强大的方式,可以从用户的角度验证应用程序的功能。通过使用 Playwright 并遵循页面对象模型(Page Object Model)模式,测试变得易于维护、阅读和可靠。

主要组件(CodeServerCodeServerPage 和测试 fixture)协同工作,以创建隔离的测试环境、自动化浏览器交互并验证预期的行为。测试套件涵盖了功能的关键领域,确保 code-server 在不同浏览器和配置下都能正常工作。