[test-84/e2e] E2E 테스트 안정화 및 회귀 수정 - #216
Merged
Merged
Conversation
#215 Task 8. 같은 커밋으로 CI를 반복 실행해 케이스별 실패율을 측정하기 위한 측정 전용 설정이다. 측정이 끝나면 retries 최종값을 정하고 함께 정리한다. - retries를 0으로 둔다. 재시도가 성공하면 결과가 초록으로 끝나 흔들림이 드러나지 않으므로 측정 기간에는 재시도를 꺼야 데이터가 나온다. - json reporter를 추가한다. 케이스별 실패율을 세려면 통과한 실행의 결과도 파일로 남아야 한다. - 산출물 업로드 조건을 always로 바꾼다. 같은 이유로 성공한 실행의 리포트도 받아야 한다. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
#215 Task 8. 같은 커밋으로 20회 반복 실행하는 측정이 끝나 측정 전용 설정을 모두 원래대로 돌린다. `develop`에 남기지 않기로 한 설정들이다. - retries를 측정 전 값으로 되돌린다. 최종값은 다음 커밋에서 정한다. - json reporter를 뺀다. 케이스별 집계가 끝나 더 필요하지 않다. - 산출물 업로드 조건을 failure로 되돌린다. 성공한 실행의 리포트는 측정 기간에만 필요했다. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
#215 Task 8. 같은 커밋(49c01fb)으로 CI를 20회 반복 실행해 재시도 없이 측정한 결과를 근거로 값을 정한다. 측정값은 케이스 실행 320회(16건 x 20회) 중 실패 1회로 케이스 실패율 0.31%, 실행 단위로는 20회 중 1회 실패다. 유일한 실패는 seeder가 PostgREST를 호출할 때 받은 `PGRST303 JWT issued at future`로, 토큰 발급과 검증이 모두 Supabase 쪽에서 일어나는 구간이라 우리 코드가 시각에 관여하지 않는다. 1회로 정한 이유는 이 정도 일회성 오류는 한 번의 재시도로 흡수되고, 반복해서 깨지는 테스트는 그대로 실패로 남기 때문이다. 2회는 관측된 흔들림 크기에 비해 과하고 진짜 회귀의 실패 확정만 늦춘다. 재시도로 통과한 건은 리포트에 flaky로 따로 집계되므로 흔들림 관측은 계속 가능하다. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
hm1n
marked this pull request as ready for review
September 3, 2026 03:17
Collaborator
Author
|
@codex review |
|
Codex Review: Didn't find any major issues. Delightful! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #215
진행 상태
같은 커밋으로 CI를 20회 반복 실행해 E2E 16건의 케이스별 실패율을 측정했습니다.
측정이 끝나 측정 전용 설정을 되돌리고, 결과를 근거로
retries최종값을 정했습니다.최종 변경
develop대비 남는 변경은playwright.config.ts의retries한 줄입니다.retries: process.env.CI ? 1 : 0(기존 CI 2회 → 1회). 근거는 아래 측정 결과에 있습니다.측정 전용으로 넣었던
retries: 0,jsonreporter, 산출물 업로드if: always()는 모두 되돌렸습니다.측정 방법
workflow_dispatch대신 이 PR의 실행을gh run rerun으로 반복했습니다.재실행은 커밋 SHA가 그대로라 "같은 커밋" 조건을 정확히 만족하고,
develop에 트리거를 추가하지 않아도 됩니다.(
workflow_dispatch는 default branch인develop에 트리거가 있어야 동작하므로 제약과 충돌합니다.)49c01fbmobile(base가develop이라 matrix가 mobile 단일로 분기)18 은 2026-09-02 07:5309:03 UTC, attempt 1920 은 2026-09-03 01:1401:17 UTC집계는 각 attempt의 job 로그에서 가져왔습니다. 전체 재실행은 이전 attempt의 아티팩트를 지우기 때문에, 애초에 추가했던
jsonreporter 파일은 마지막 attempt 것만 남습니다. attempt별 로그는 그대로 남아 있어 이쪽으로 집계했습니다.측정 결과
실행 단위
케이스별 실패율
auth.spec.ts:7접근 제어 › 비로그인 사용자가 보호 경로를 열면 첫 화면으로 이동한다auth.spec.ts:23로그인 콜백 처리 › 약관에 동의한 사용자는 인증 콜백 뒤 요청한 초대 경로로 이동한다group.spec.ts:31그룹 생성 › 필수 정보를 입력하면 그룹 미리보기로 이동한다group.spec.ts:59그룹 생성 › 금액과 인원을 바꾸면 나눈 금액이 반올림되어 갱신된다group.spec.ts:76그룹 생성 › 미리보기에서 그룹을 만들면 홈으로 이동한다group.spec.ts:111홈 그룹 조회와 상세 진입 › 홈의 그룹 카드를 누르면 그룹 정보 탭으로 진입한다group.spec.ts:146참여자 권한과 그룹 탈퇴 › 일반 참여자는 그룹을 수정할 수 없고 나가기만 선택할 수 있다invite.spec.ts:31초대 링크 조회 › 유효한 대기 중 초대 링크에서 초대 정보를 확인할 수 있다invite.spec.ts:58초대 응답 › 초대 대상자가 수락하면 엔빵 참여가 완료된다landing.spec.ts:3랜딩 페이지의 주요 콘텐츠를 노출한다settlement.spec.ts:53납부 상태 변경 › 그룹장이 참여자의 납부 상태를 완료로 변경한다settlement.spec.ts:80납부 상태 변경 › 일반 참여자가 자신의 납부 상태를 완료로 변경한다settlement.spec.ts:113납부 상태 변경 › 일반 참여자는 다른 참여자의 납부 상태를 변경할 수 없다settlement.spec.ts:141정산 기간 기록 조회 › 현재 정산 기간의 납부 기록만 참여자 목록에 반영된다settlement.spec.ts:165정산 기간 기록 조회 › 새 참여자가 추가되면 그룹 시작일 기준의 미납 기록이 한 건 생성된다settlement.spec.ts:190납부 상태 저장 처리 › 납부 상태 저장에 실패하면 화면 상태를 유지하고 오류를 알린다#209에서 확인했던 테스트 계정tag충돌은 20회 동안 한 번도 재현되지 않았습니다.3dc3ada의 재시도 처리가 동작하는 것으로 보입니다.실패 상세 (attempt 19)
PostgREST가 요청에 실린 토큰의
iat를 자기 시계보다 미래로 판단해 거절했습니다.실패 지점은 브라우저가 아니라 테스트 준비 단계의 Node 코드입니다. 오류 출력에 stack이 없는 것은
Error가 아닌 plain object가 던져졌다는 뜻이고, supabase-js의PostgrestError가 그 형태입니다.e2e/fixtures/seed.ts에서this.admin(secret key)으로 PostgREST를 호출한 뒤throw error하는 지점들이 여기 해당합니다.즉
createSession이 만드는 사용자 세션 토큰과는 무관하고, 토큰 발급과iat검증이 모두 Supabase 쪽에서 일어나는 구간입니다. 우리 코드는 이 시각에 관여하지 않습니다.대응 방침
seeder에
PGRST303전용 재시도를 넣는 방안도 검토했습니다. 그러나 320회 중 1회이고 재현되지 않으며 원인이 Supabase 쪽이라, 지금 코드를 넣는 것은 근거가 얇다고 판단했습니다.retries가 이 실패 유형을 그대로 덮고, 재시도는 fixture teardown을 attempt마다 실행하므로 잔여 데이터도 남지 않습니다.재시도로 통과한 건은 Playwright가
flaky로 따로 집계하므로 관측은 계속됩니다.PGRST303이 flaky로 반복해서 뜨면 그때 근거를 갖고 seeder 재시도를 넣습니다.retries최종값retries: process.env.CI ? 1 : 0으로 정했습니다.체크리스트
PGRST303대응 방침 결정 —retries로 흡수, seeder 재시도는 재발 시 재검토retries최종값과 근거playwright-mobile-20아티팩트가 성공 실행에도 올라온 것을 확인했습니다. 실패 시 업로드는 attempt 19에서 동작을 확인했습니다.develop이라 matrix가 mobile 단일로 분기합니다.main대상 PR에서만 확인할 수 있어 다음 릴리즈 PR에서 봐야 합니다.🤖 Generated with Claude Code