从 Protractor 迁移到 Cypress
您将学习到
- 如何从 Protractor 迁移到 Cypress
- 使用 Cypress 进行端到端测试的优势
- 如何在 Cypress 中操作 DOM 和编写断言
- 使用 Angular schematic 配置 Cypress
Protractor 曾是 Angular 和 AngularJS 应用中流行的端到端测试工具,但 自 Angular 12 起,新 Angular 项目已不再包含它。我们为您准备了这份迁移指南,帮助您和团队从 Protractor 过渡到 Cypress。
首先,通过一个快速代码示例看看 Cypress 对 Protractor 用户有多友好。以下场景测试用户能否注册新账户。
要查看您自己的测试代码如何转换,可将其粘贴到交互式 Cypress Migrator 工具,该工具会生成等效的 Cypress 代码。
describe('Authorization tests', () => {
it('allows the user to signup for a new account', () => {
browser.get('/signup')
element(by.css('#email-field')).sendKeys('user@email.com')
element(by.css('#confirm-email-field')).sendKeys('user@email.com')
element(by.css('#password-field')).sendKeys('testPassword1234')
element(by.cssContainingText('button', 'Create new account')).click()
expect(browser.getCurrentUrl()).toEqual('/signup/success')
})
})
describe('Authorization Tests', () => {
it('allows the user to signup for a new account', () => {
cy.visit('/signup')
cy.get('#email-field').type('user@email.com')
cy.get('#confirm-email-field').type('user@email.com')
cy.get('#password-field').type('testPassword1234')
cy.get('button').contains('Create new account').click()
cy.url().should('include', '/signup/success')
})
})
使用 Cypress 的优势
许多开发者深知端到端测试的必要性,但常因测试脆弱或耗时过长而放弃。Cypress 不仅确保测试可靠,还提供工具使测试成为开发助力而非阻碍。
在浏览器中交互式测试
Protractor 测试时浏览器自动化速度过快,难以观察。Cypress 的命令日志实时显示测试过程,点击命令可查看 DOM 快照,观察应用在测试中的真实渲染 UI 和用户交互行为。此外,选择器 playground 和 Cypress Studio 帮助快速定位 CSS 选择器。
更快的反馈循环
Cypress 在文件保存时自动重新运行测试,结合编辑器与浏览器并排工作,实现高效迭代。
测试时间回溯
通过 DOM 快照,可回溯测试执行中任意时间点的应用状态,模拟真实用户行为。
无头模式下的可视化
Cypress 在无头模式下自动截取失败截图、录制测试视频,并通过 Test Replay 在 Cypress Cloud 中重现测试过程。
测试重试
复杂应用中可能出现“脆弱测试”。Cypress 支持测试重试,Cypress Cloud 还能检测 CI/CD 中的脆弱测试。
开始使用
推荐安装方式
使用官方 Cypress Angular schematic:
ng add @cypress/schematic
这会安装 Cypress、添加运行脚本、生成基础文件,并可选移除 Protractor 配置。安装后,通过以下命令启动 Cypress:
ng e2e
或直接运行:
ng run {your-project-name}:cypress-open
无头模式运行:
ng run {your-project-name}:cypress-run
更多配置如指定浏览器或记录测试到 Cypress Cloud,请参阅Angular Schematic 配置。
此 schematic 基于 Briebug 团队的 @briebug/cypress-schematic 开发。