본문으로 건너뛰기

플레이크 바이섹트

플래키 테스트는 봇의 별도 단계에서 보고됩니다. (예제 빌드)

각 테스트 로그는 자동화된 플레이크 바이섹트를 트리거하는 사전 입력된 명령어를 제공합니다. 예:

커맨드 라인에서 플레이크 바이섹트 트리거:
bb add v8/try.triggered/v8_flako -p 'to_revision="deadbeef"' -p 'test_name="MyTest"' ...

플레이크 바이섹트를 처음으로 트리거하기 전에, 사용자는 google.com 계정으로 로그인해야 합니다:

bb auth-login

그런 다음 제공된 명령을 실행하면 플레이크 바이섹트를 수행하는 빌드 URL이 반환됩니다. (예제)

운이 좋다면, 바이섹트가 용의자를 지목할 것입니다. 운이 나쁘다면, 좀 더 읽어보세요...

자세한 설명

기술적 세부사항은 구현 트래커 버그를 참조하세요. 플레이크 바이섹트 접근법은 findit와 동일한 목적을 가지지만 다른 구현을 사용합니다.

어떻게 작동하나요?

바이섹트 작업은 세 단계로 이루어집니다: 보정, 역방향 바이섹션, 내부 바이섹션. 보정 단계에서는 테스트를 반복하여 총 타임아웃(또는 반복 횟수)을 두 배로 늘려 한 번의 실행에서 충분한 플레이크를 감지합니다. 그런 다음 역방향 바이섹션은 플래키가 없는 리비전을 찾을 때까지 Git 범위를 두 배로 늘립니다. 마지막으로, 좋은 리비전과 가장 오래된 나쁜 리비전의 범위를 내부 바이섹션합니다. 참고로, 바이섹션은 신규 빌드 제품을 생성하지 않으며, V8의 지속적인 인프라에서 이전에 생성된 빌드만을 기반으로 합니다.

바이섹션이 실패하는 경우...

  • 보정 중 신뢰도를 확보할 수 없는 경우. 이는 백만 중 하나의 플레이크 또는 다른 테스트가 병렬로 실행될 때만 보이는 플래키 동작(예: 메모리를 많이 사용하는 테스트)에서 일반적입니다.
  • 원인이 너무 오래된 경우. 바이섹션은 일정 단계 이후 중단되거나, 더 오래된 빌드가 더 이상 아이솔레이트 서버에서 사용할 수 없는 경우 중단됩니다.
  • 전체 바이섹트 작업이 타임아웃되는 경우. 이 경우, 더 오래된 알려진 나쁜 리비전으로 다시 시작할 수 있습니다.

플레이크 바이섹트를 사용자 정의할 수 있는 속성

  • extra_args: V8의 run-tests.py 스크립트에 전달되는 추가 인수.
  • repetitions: 초기 테스트 반복 횟수 (run-tests.py--random-seed-stress-count 옵션에 전달됨; total_timeout_sec가 사용되는 경우 사용되지 않음).
  • timeout_sec: run-tests.py에 전달되는 타임아웃 매개변수.
  • to_revision: 나쁜 것으로 알려진 리비전. 여기에서 바이섹션이 시작됩니다.
  • total_timeout_sec: 전체 바이섹트 단계 하나에 대한 초기 총 타임아웃. 보정 중 필요한 경우 해당 시간이 여러 번 두 배로 증가됩니다. 0으로 설정하여 비활성화하고 대신 repetitions 속성을 사용하세요.
  • variant: run-tests.py에 전달되는 테스트 변형의 이름.

변경이 필요 없는 속성

  • bisect_buildername: 바이섹션 빌드를 생성한 빌더의 마스터 이름.
  • bisect_mastername: 바이섹션 빌드를 생성한 빌더의 이름.
  • build_config: V8의 run-tests.py 스크립트에 전달되는 빌드 구성 (--mode 매개변수, 예: Release 또는 Debug).
  • isolated_name: 아이솔레이트된 파일의 이름 (예: bot_default, mjsunit).
  • swarming_dimensions: 테스트가 실행되는 봇의 유형을 나타내는 스워밍 차원. 문자열 리스트로 전달되며 각 문자열은 name:value 형식임.
  • test_name: run-tests.py에 전달되는 완전히 지정된 테스트 이름. 예: mjsunit/foobar.

팁과 요령

멈춘 테스트(예: 데드락) 바이섹션

실패한 실행이 타임아웃되었지만 통과가 매우 빨리 실행되는 경우, timeout_sec 매개변수를 조정해 타임아웃된 실행을 기다리지 않고 바이섹션이 지연되지 않도록 설정하면 유용합니다. 예를 들어, 통과가 보통 1초 미만으로 이루어진다면, 타임아웃을 작은 값(예: 5초)으로 설정하세요.

용의자에 대한 신뢰도 높이기

일부 실행에서 신뢰도가 매우 낮을 수 있습니다. 예를 들어, 보정은 한 번의 실행에서 4개의 플레이크가 관찰되면 만족됩니다. 바이섹션 중에는 하나 이상의 플레이크가 있는 모든 실행이 나쁜 것으로 간주됩니다. 이런 경우, 바이섹트 작업을 다시 시작하고 to_revision을 용의자로 설정하고 원래 작업보다 더 높은 반복 횟수나 총 타임아웃을 사용하여 동일한 결론에 다시 도달하는지 확인하는 것이 유용할 수 있습니다.

타임아웃 문제 해결

전체 타임아웃 옵션으로 인해 빌드가 멈추는 경우, 적합한 반복 횟수를 추정하고 total_timeout_sec0으로 설정하는 것이 가장 좋습니다.

무작위 시드에 따라 테스트 동작