本文档描述了 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 类负责启动和管理用于测试的 code-server 实例。它提供了以下方法:
此类确保每个测试都有自己独立的 code-server 实例和干净的环境。
来源:test/e2e/models/CodeServer.ts37-260
CodeServerPage 类实现了页面对象模型(Page Object Model)模式,并提供了一个用于与 code-server UI 交互的高级 API。它封装了 Playwright 的 Page 对象,并提供了特定于 code-server 的方法,从而使测试更易于阅读和维护。
来源:test/e2e/models/CodeServer.ts262-598
端到端测试使用自定义的 fixture,这些 fixture 提供了已初始化的 CodeServer 和 CodeServerPage 实例。这些 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
可以使用提供的脚本运行端到端测试
该脚本构建一个测试扩展,验证 code-server 构建,并运行 Playwright 测试
您还可以通过设置 CODE_SERVER_TEST_ENTRY 环境变量来测试 code-server 的特定构建
来源:ci/dev/test-e2e.sh1-51 test/playwright.config.ts5-12
端到端测试遵循一致的模式
describe 函数创建带有 code-server 参数的测试套件test 函数创建单个测试用例codeServerPage fixture 与 code-server 交互expect 函数进行断言示例测试
来源:test/e2e/login.test.ts1-61 test/e2e/baseFixture.ts1-65
测试基础设施为每个测试设置了以下环境
来源:test/e2e/models/CodeServer.ts78-113 test/utils/constants.ts1-5
身份验证测试会验证登录功能,处理错误的密码,并测试速率限制。
来源:test/e2e/login.test.ts31-38
UI 交互测试会导航菜单,执行命令,并验证 UI 元素。
来源:test/e2e/openHelpAbout.test.ts5-16
终端集成测试会聚焦终端,执行命令,并验证环境变量。
来源:test/e2e/terminal.test.ts14-31
code-server 中的端到端测试基础架构提供了一种强大的方式,可以从用户的角度验证应用程序的功能。通过使用 Playwright 并遵循页面对象模型(Page Object Model)模式,测试变得易于维护、阅读和可靠。
主要组件(CodeServer、CodeServerPage 和测试 fixture)协同工作,以创建隔离的测试环境、自动化浏览器交互并验证预期的行为。测试套件涵盖了功能的关键领域,确保 code-server 在不同浏览器和配置下都能正常工作。