Flaky tests

原文:https://docs.gitlab.com/ee/development/testing_guide/flaky_tests.html

Flaky tests

What’s a flaky test?

这个测试有时会失败,但是如果您重试了多次,它最终会通过.

Quarantined tests

master的测试频繁失败时,应创建〜” master:broken”问题 . 如果无法及时修复测试,则会影响所有开发人员的工作效率,因此应通过分配:quarantine元数据将其放入隔离:quarantine .

这意味着除非使用--tag quarantine运行,否则它将被跳过:

  1. bin/rspec --tag quarantine

在对隔离进行测试之前,应确保存在〜” master:broken”问题,这样它才不会永远留在隔离区.

Once a test is in quarantine, there are 3 choices:

  • 测试应该固定(即摆脱其脆弱性)吗?
  • 是否应将测试移至较低级别的测试?
  • 是否应该完全删除该测试(例如,因为已经有一个较低级别的测试,或者它正在复制另一个相同级别的测试,或者它测试的太多等等)?

Quarantine tests on the CI

隔离测试在允许失败的专用作业中在 CI 上运行:

  • rspec-pg-quarantine (CE 和 EE)
  • rspec-pg-quarantine-ee (仅适用于 EE)

Automatic retries and flaky tests detection

在 CI 上,我们使用RSpec :: Retry自动重试失败的示例几次(有关准确的重试次数,请参阅spec/spec_helper.rb ).

我们还使用自制的RspecFlaky::Listener侦听RspecFlaky::Listener ,该RspecFlaky::ListenerRspecFlaky::Listener示例记录在master上的 JSON 报告文件中( retrieve-tests-metadataupdate-tests-metadata作业).

这最初是在以下网址中实现的: https : //gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/13021 .

如果要在本地启用重试,则可以使用RETRIES环境变量. 例如RETRIES=1 bin/rspec ...将重试失败的示例一次.

Problems we had in the past at GitLab

Time-sensitive flaky tests

Array order expectation

Feature tests

Capybara viewport size related issues

Capybara JS driver related issues

PhantomJS / WebKit related issues

Capybara expectation times out

Resources


Return to Testing documentation