服务端2月17日 13:02
Cypress 中 Page Object 模式有必要用吗?Page Object 模式将页面元素选择器和操作封装为独立类,测试代码只调用方法不直接写选择器,页面变更时只需改 Page Object 不改测试。但在 Cypress 中,Custom Command 常能替代 POM 的大部分功能——cy.login() 比 loginPage.login() 更符合 Cypress 风格。POM 真正有价值的场景是:多页面复杂流程(如电商下单流程跨 4 个页面)、团队已熟悉 POM 模式、选择器需要跨多个测试文件共享复用。
## 追问
**Cypress 官方对 POM 的态度是什么?**
官方认为 POM 不是必须的,Cypress 的 C...前端2月16日 23:33
FFmpeg的核心组件包括哪些?分别有什么作用?FFmpeg的核心组件分为库和命令行工具两大类。库层面:**libavcodec**负责音视频编解码(H.264/H.265/AAC等),**libavformat**处理容器封装与解封装(MP4/MKV/FLV),**libavfilter**实现滤镜链(缩放/旋转/叠加),**libswscale**做像素格式转换(YUV↔RGB),**libswresample**处理音频重采样与通道转换,**libavutil**提供通用数据结构(AVPacket/AVFrame)和工具函数,**libavdevice**抽象硬件设备交互。工具层面:**ffmpeg**是转码命令行入口,**ff...服务端2月17日 13:07
如何优化 Cypress 测试的执行速度?核心优化手段:用 cy.session() 缓存登录状态避免重复登录;通过 --parallel 并行执行拆分 spec 文件;用 cy.intercept() 拦截 mock 网络请求减少真实 API 调用;避免 cy.wait() 硬编码等待,让 Cypress 自动重试机制生效;配置 baseUrl 避免重复导航。综合使用可将 1000+ 用例执行时间从 20 分钟压到 5 分钟以内。
## 追问
**cy.session() 和 before() 中登录有什么区别?**
before() 每个测试文件都会执行登录;cy.session() 在同文件内跨测试复用登录状态,且 s...服务端2月17日 13:06
Cypress 测试隔离和数据管理怎么做?Cypress 默认每个 it 块前会重置浏览器状态(清 cookie、localStorage、sessionStorage),Cypress 12+ 开启 `testIsolation: true` 后更强——每次测试前自动 `cy.visit()` 恢复初始页面。数据管理分三层:fixtures 管理静态数据、cy.request() + 自定义命令做动态数据创建、cy.task() 操作数据库清理。核心原则:测试不依赖执行顺序,每个测试自给自足。
## 追问
**cy.session() 怎么用?和 beforeEach 中登录有什么区别?**
cy.session() 缓存...服务端2月21日 17:50
JWT 如何满足 GDPR 等合规性要求?JWT 与合规的核心矛盾:JWT 不可变(签发后不能修改内容),但 GDPR 要求用户可以删除数据(被遗忘权)。解决思路有三个:一是 payload 只放最小必要信息(用户 ID + 角色),不存个人数据;二是实现 token 黑名单或短期 TTL,用户请求删除时立即作废所有 token;三是审计日志记录所有 token 签发和使用,满足可追溯要求。对 HIPAA/PCI DSS 同理——JWT 中绝不放 PHI(受保护健康信息)和支付卡号,只存引用 ID。## 追问**GDPR 被遗忘权与 JWT 不可变性怎么协调?**JWT 内容无法修改,但可以通过作废来"遗忘":将用户所有 tok...服务端2月17日 13:05
Cypress 和 Selenium 有什么核心区别?Cypress 直接运行在浏览器内部,通过 Chrome DevTools API 与页面通信,无需 WebDriver 中间层;Selenium 通过外部 WebDriver 进程以 HTTP 协议控制浏览器,架构上多了一跳延迟。Cypress 自动重试断言、内置时间旅行调试、仅支持 Chromium 系浏览器;Selenium 支持所有主流浏览器但需手动处理显式等待。选择依据:前端 SPA 项目选 Cypress 快速反馈,跨浏览器兼容测试选 Selenium。
## 追问
**Cypress 的自动等待机制和 Selenium 的显式等待有什么区别?**
Cypress 在断言...服务端2月17日 13:07
Cypress 视觉回归测试怎么做?Cypress 本身不内置视觉回归功能,需借助插件实现:`cypress-image-diff`(轻量免费)、Percy/Chromatic(云端对比平台,付费)。核心流程是首次运行生成基准截图,后续运行做像素级 diff,差异超过阈值则判定失败。关键配置是 threshold 容忍度和动态内容排除策略。
## 追问
**cypress-image-diff 和 Percy 怎么选?**
cypress-image-diff 本地运行、零费用、适合小团队,截图存仓库;Percy 提供云端可视化审阅、多浏览器快照、PR 集成审批流,适合中大型团队。Percy 还能自动处理抗锯齿和字体渲...服务端2月21日 17:36
JWT 在生产环境有哪些常见问题?怎么解决?JWT 生产环境最核心的问题是三个:token 无法主动撤销(签发后到过期前一直有效)、payload 明文可读(Base64 非加密,敏感信息暴露)、token 体积大影响性能(每次请求都要传 1-2KB)。对应解法:撤销用黑名单(Redis 存已注销 token,TTL 等于剩余过期时间)或短期 access token + refresh token 轮换;敏感数据只放引用 ID,详情查库;体积优化用短字段名和 ES256 算法(比 RS256 小约 50%)。## 追问**token 泄露了怎么办?**XSS 可窃取 localStorage 中的 token,CSRF 可利用 ...服务端2月17日 13:06
Cypress 要不要用 Page Object Model?Cypress 官方并不推荐传统 POM——自定义命令和 App Actions 模式比 POM 更契合 Cypress 的命令链机制。POM 把 DOM 选择器封进类方法,但 Cypress 的重试机制使得类方法中返回 `this` 的链式调用容易丢失重试上下文。真正需要时,可用轻量页面对象仅封装选择器常量,操作逻辑仍交给自定义命令。
## 追问
**Cypress 官方推荐的替代模式是什么?**
App Actions:通过 `cy.request()` 直接调用 API 设置状态,跳过 UI 操作步骤。例如登录不再走页面填写表单,而是 `cy.request('POST', '...服务端2月21日 17:33
JWT 有哪些安全风险?如何防护?JWT 的 payload 仅做 Base64 编码而非加密,任何持有 token 的人都能解码查看内容;存储在 localStorage 中的 token 易遭 XSS 窃取;攻击者可将算法篡改为 none 绕过签名验证。核心防护策略:使用短期 Access Token + 长期 Refresh Token 机制;token 存入 HttpOnly Cookie 并设置 SameSite 防 CSRF;服务端固定签名算法拒绝 alg:none;敏感数据使用 JWE 加密传输。
## 追问
**JWT 无法主动撤销怎么办?**
设置 15-30 分钟短过期时间,配合 Redis 黑名...