Skip to main content
Cypress应用

测试隔离

info
你将学到
  • Cypress如何确保测试隔离
  • 如何在端到端测试和组件测试中配置测试隔离
  • 启用或禁用测试隔离的权衡
tip

最佳实践: 测试应始终能够独立运行且仍能通过

正如我们的使命所述,我们有责任倡导一个真正有效的测试流程,并构建Cypress来引导开发者从一开始就编写独立的测试。

我们通过在每次测试_之前_清理状态来实现这一点,确保一个测试的操作不会影响后续测试。每个测试的目标应该是可靠地通过,无论是单独运行还是与其他测试连续运行。依赖先前测试状态的测试可能导致非确定性的测试失败,使调试变得困难。

Cypress将通过恢复和清除以下所有内容,为每个测试提供一个干净的测试环境:

除了干净的测试环境外,Cypress还主张在干净的浏览器上下文中运行测试,以便被测应用程序或组件在运行时表现一致。此行为称为testIsolation

测试隔离是一个全局配置,可以在端到端测试中通过testIsolation选项在describe级别覆盖。

端到端测试中的测试隔离

Cypress支持在端到端测试中启用或禁用测试隔离,以描述测试套件是否应在干净的浏览器上下文中运行。

启用测试隔离

当启用测试隔离时,Cypress会在每次测试_之前_通过以下方式重置浏览器上下文:

由于测试在全新的浏览器上下文中开始,您必须重新访问您的应用程序并执行一系列交互以构建每个测试所需的DOM和浏览器状态。

此外,cy.session()命令将继承此配置,并在建立浏览器会话时清除页面和当前浏览器上下文。这是为了确保测试在单独运行或随机顺序运行时能够可靠地通过。

禁用测试隔离

当禁用测试隔离时,Cypress不会在测试开始前更改浏览器上下文。页面在测试之间不会清除,cookies、本地存储和会话存储将在该套件的测试中保持可用。此外,cy.session()命令在建立浏览器会话时只会清除当前浏览器上下文——当前页面不会被清除。

快速比较

testIsolation每次测试前cy.session()
true- 通过访问about:blank清除页面
- 清除所有域中的cookies
- 所有域中的本地存储
- 所有域中的会话存储
- 通过访问about:blank清除页面
- 清除所有域中的cookies
- 所有域中的本地存储
- 所有域中的会话存储
false不更改当前浏览器上下文
- 清除所有域中的cookies
- 所有域中的本地存储
- 所有域中的会话存储

组件测试中的测试隔离

Cypress不支持在组件测试中配置测试隔离行为。

在运行组件测试时,Cypress始终会在每次测试_之前_通过以下方式重置浏览器上下文:

测试隔离的权衡

需要注意的是,禁用测试隔离可能会提高端到端测试的整体性能,但也可能导致状态在测试之间“泄漏”。这可能会使后续测试依赖于先前测试的结果,并可能导致误导性的测试失败。在使用此模式时,必须非常注意测试的编写方式,并确保测试能够独立运行。

确保测试独立的最佳方法是在测试中添加.only(),并验证它可以在没有前一个测试的情况下成功运行。