Skip to main content
Cypress应用

实战指南

本指南展示如何使用 Cypress 测试常见场景。

https://github.com/cypress-io/cypress-example-recipes

基础篇

方案描述
Node 模块导入自定义 Node 模块
环境变量向测试传递环境变量
错误处理处理抛出错误和未处理的 Promise 拒绝
动态测试从 JSON 数据动态创建测试
从 CSV 生成动态测试从 CSV 文件动态创建测试
从 API 生成动态测试通过调用外部 API 动态创建测试
测试夹具加载单个或多个测试夹具
添加自定义命令使用 JavaScript 编写自定义命令并确保 IntelliSense 类型提示正常工作
添加自定义命令(TypeScript)使用 TypeScript 编写自定义命令
添加 Chai 断言添加新的或自定义的 chai 断言
Cypress 模块 API通过模块 API 运行 Cypress
封装 Cypress 模块 API编写封装 "cypress run" 命令行解析的包装器
自定义浏览器控制项目可用的浏览器列表,或添加自定义浏览器
使用 Chrome 远程调试接口使用 Chrome 调试协议触发悬停状态和打印媒体样式
开箱即用的 TypeScript无需设置预处理器即可用 TypeScript 编写测试
单测试超时如果测试运行超过指定时间限制则失败
Cypress 事件使用 Cypress.oncy.on 监听 before:window:load 等 Cypress 事件
视频分辨率增加浏览器窗口尺寸以录制高质量视频和捕获详细截图

DOM 测试

方案描述
标签页处理与链接在新标签页打开的链接
悬停与隐藏元素测试需要悬停的隐藏元素
表单交互测试 range 等表单元素
拖放操作使用 .trigger() 测试拖放功能
Shadow DOM测试 Shadow DOM 中的元素
等待静态资源展示如何等待 CSS、图片等静态资源加载完成
CSV 加载与表格测试加载 CSV 文件并与表格单元格数据对比
评估性能指标利用 Cypress 监控网站性能
根样式触发修改 CSS 变量的颜色输入变化
选择器组件测试 <select> 元素和 Select2 组件
Lit 元素测试带 Shadow DOM 的 Lit 元素
文件下载下载并验证 CSV、Excel、文本、Zip 和图片文件
页面刷新处理随机性时避免使用 while 循环
分页点击"下一页"直到最后一页
剪贴板在测试中复制粘贴剪贴板文本

登录测试

方案描述
基础认证使用基础认证登录
单点登录跨多服务器或提供商登录
HTML 网页表单通过基础 HTML 表单登录
XHR 网页表单使用 XHR 登录
CSRF 令牌需要 CSRF 令牌的登录
Json Web 令牌使用 JWT 登录
使用应用代码通过调用应用代码登录

另请参阅 认证插件 并观看 测试组织、登录控制、状态管理

预处理器

方案描述
测试筛选使用类 Mocha 的 grep 语法按名称过滤测试
Browserify 的 TypeScript 支持通过 browserify 添加 TypeScript 支持
Webpack 的 TypeScript 支持通过 webpack 添加 TypeScript 支持
Browserify 的 Flow 支持通过 Browserify 添加 flow 支持

博客案例

来自 Cypress 博客 的演示方案。

方案描述
应用操作应用操作是 Page Objects 的替代方案
端到端 API 测试通过 GUI 运行 API 测试
端到端快照端到端快照测试
元素覆盖率追踪测试覆盖的元素
Codepen.io 测试测试 HyperApp Codepen 演示
Redux Store 测试测试使用 Redux 数据存储的应用
Vue + Vuex + REST 测试测试使用 Vuex 数据存储的应用
无障碍测试使用 cypress-axe 进行无障碍测试
自动化 Angular 测试自动化 Angular 测试
React DevTools自动加载 React DevTools Chrome 扩展
断言计数如何预期测试中的断言数量
浏览器通知测试使用 Notification 的应用
iframe 测试访问第三方 iframe 元素,监视和拦截 iframe 网络请求
类装饰器使用 JavaScript 类装饰器暴露应用创建的对象以便测试访问
表单提交消除表单提交后页面重载测试的不稳定性
使用 Day.js 替代 Moment.js使用 day.js 库替代已弃用的 Cypress.moment

桩与监视

方案描述
函数桩使用 cy.stub() 测试函数调用
拦截 window.fetch使用 cy.stub() 控制 fetch 请求
使用 cy.intercept 拦截使用 cy.intercept API 控制网络
拦截 window.openconsole.log使用 cy.stub()cy.spy() 测试应用行为
拦截 window.print使用 cy.stub() 测试应用调用的 window.print
拦截 Google Analytics使用 cy.stub()cy.intercept() 测试 Google Analytics 调用
拦截 console 方法使用 cy.stub() 测试和控制 console 方法调用
拦截资源加载使用 MutationObserver 拦截 img 等资源加载
拦截 navigator.cookieEnabled 属性使用 cy.stub() 模拟 navigator.cookieEnabled 属性

单元测试

方案描述
应用代码导入并测试自己的应用代码

服务端通信

方案描述
应用初始化用测试数据初始化应用
Node 中初始化数据库用测试数据初始化数据库
XHR 断言监视和断言应用的网络调用
访问第二个域名在不同测试中访问两个不同域名并传递值
在测试文件间传值使用 cy.task 在测试文件间传值
流式测试结果将每个测试结果从浏览器通过插件流式传输到外部进程
离线测试测试网络离线时的应用
服务端计时从 Cypress 测试报告服务端计时结果
等待 API使用 cy.request 调用后端直到响应
发起 HTTP 请求如何使用 cy.requestwindow.fetchcy.task 命令发起带或不带 cookie 的 HTTP 请求

其他 Cypress 方案

方案描述
视觉测试Cypress 官方视觉测试指南
代码覆盖率Cypress 官方代码覆盖率指南
Docker 运行单条 Docker 命令运行 Cypress