自动化测试66 条

Cypress 基础

Cypress 在浏览器内运行测试:cy 命令链内置重试与自动等待(默认命令超时 4000ms),提供时间旅行调试与网络拦截;运行器与页面同环境,调试链路贴近前端开发。

软件测试速查开发更新于 2026-10-13

Cypress 是什么

Cypress 是面向浏览器应用的端到端与组件测试框架:测试代码运行在浏览器上下文里,通过命令队列驱动页面。三个显著特点:断言自动重试(retry-ability)、时间旅行调试(回看每步 DOM 快照)、网络桩 cy.intercept。技术栈为 JavaScript/TypeScript。

基本信息

运行方式npx cypress open 交互调试,npx cypress run 无头执行
默认超时命令默认 4000ms 未完成即失败,可全局或按用例调整
网络桩cy.intercept 拦截并伪造响应,覆盖异常态
断言should/expect 链式断言自动重试直到超时
配置cypress.config.js 管理 baseUrl、超时、视口等
定位建议用 data-cy 等专用属性,避免依赖样式类

最小示例

最小示例
describe('登录', () => {
  it('登录成功进入工作台', () => {
    cy.intercept('POST', '/api/login').as('login');   // 标记请求
    cy.visit('/login');
    cy.get('[data-cy=user]').type('tester');          // 专用属性定位
    cy.get('[data-cy=pwd]').type('secret{enter}');
    cy.wait('@login').its('response.statusCode').should('eq', 200);
    cy.url().should('contain', '/dashboard');         // 自动重试直到通过
  });
});

典型使用场景

  • 端到端关键路径回归:登录、下单、支付等主链路
  • 网络异常态验证:用拦截伪造 500、超时、慢响应
  • 调试定位问题:时间旅行看每步页面状态与请求
  • 组件测试:对单体组件渲染与交互做隔离验证
  • CI 集成:无头模式加截图、录像产出失败证据
  • 前端联调自测:后端未就绪时用网络桩先跑通流程
  • 发布前冒烟:核心流程无头模式快跑一遍,作为发布门禁
  • 跨浏览器抽查:按节奏在 Chromium、Firefox 等内核间轮换验证

常用命令与特点

命令作用特点
cy.visit打开页面失败自动重试
cy.get按选择器取元素元素不存在则重试到超时
cy.contains按文本定位适合按钮与链接
cy.intercept拦截网络请求桩数据与断言请求双用途
cy.wait等待别名请求配合 intercept 使用
Cypress 命令是队列不是 Promise:不能写 async/await 再取返回值,链式调用里拿到的是可链对象,断言要用 should 表达。
跨域访问受同源限制:多域名流程用 cy.origin 分段驱动,不要试图在一个上下文里直接跳转。
原生弹窗与文件上传要用框架提供的专用写法处理(如 cy.on 监听窗口事件),普通选择器点不到系统弹窗。

易错点

  • 把 cy 命令当普通函数取返回值:没有 await 机制,断言打在错误对象上,用例假通过
  • 用易变的 CSS 类名定位:改一次样式全量用例红,改用 data-cy 专用属性
  • 用例间共享服务端状态不清理:顺序一换就失败,用 cy.session 或前置清理接口
  • 用固定 sleep 等接口:机器稍慢就抖动,改用 cy.wait 等别名请求

数据来源与参考

  • Cypress 官方文档(docs.cypress.io)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌