엔드투엔드 테스트 문제 해결
GitLab v19.1엔드투엔드 테스트가 실패할 경우, 실패 시 브라우저에서 어떤 일이 발생하는지 확인하면 매우 유용합니다. 테스트 실행 중 브라우저를 표시하려면 WEBDRIVER_HEADLESS=false를 설정하세요. 테스트가 실패했을 때 실패 스택 트레이스만으로 원인을 파악하기 어려운 경우가 있습니다.
브라우저 동작 확인#
엔드투엔드 테스트가 실패할 경우, 실패 시 브라우저에서 어떤 일이 발생하는지 확인하면 매우 유용합니다. 예를 들어, 테스트가 전혀 실행되지 않는다면 테스트 프레임워크가 해당 머신에서 유효하지 않은 URL을 열려고 시도하고 있을 수 있습니다. 브라우저에서 페이지 실패 화면을 직접 보면 이 문제가 더 명확해집니다.
테스트 실행 중 브라우저를 표시하려면 WEBDRIVER_HEADLESS=false를 설정하세요. 예를 들어:
cd gitlab/qa
WEBDRIVER_HEADLESS=false bundle exec bin/qa Test::Instance::All http://localhost:3000
로그 활성화#
테스트가 실패했을 때 실패 스택 트레이스만으로 원인을 파악하기 어려운 경우가 있습니다.
QA_LOG_LEVEL=debug를 설정하여 디버그 로그를 활성화하면 테스트 프레임워크가 시도하는 작업을 더 자세히 확인할 수 있습니다.
예를 들어:
cd gitlab/qa
QA_LOG_LEVEL=debug bundle exec bin/qa Test::Instance::All http://localhost:3000
그러면 테스트 프레임워크가 테스트 중 수행한 동작을 보여주는 많은 로그를 출력합니다:
[date=2022-03-31 23:19:47 from=QA Tests] INFO -- Starting test: Create Merge request creation from fork can merge feature branch fork to mainline
[date=2022-03-31 23:19:49 from=QA Tests] DEBUG -- has_element? :login_page (wait: 0) returned: true
[date=2022-03-31 23:19:52 from=QA Tests] DEBUG -- filling :login_field with "root"
[date=2022-03-31 23:19:52 from=QA Tests] DEBUG -- filling :password_field with "*****"
[date=2022-03-31 23:19:52 from=QA Tests] DEBUG -- clicking :sign_in_button
테스트가 전혀 실행되지 않는 경우#
이 섹션은 테스트를 로컬(예: GDK)에서 실행하며, gitlab-qa가 아닌 gitlab/qa/ 폴더에서 실행하는 경우를 가정합니다.
예를 들어 Net::ReadTimeout 오류가 발생한다면, 브라우저가 지정된 URL을 로드하지 못하는 것일 수 있습니다:
cd gitlab/qa
bundle exec bin/qa Test::Instance::All http://localhost:3000
bundler: failed to load command: bin/qa (bin/qa)
Net::ReadTimeout: Net::ReadTimeout with #
이 오류는 GitLab이 localhost로 해석되지 않는 주소에서 실행 중인 경우 발생할 수 있습니다.
예를 들어 GDK hostname을
특정 로컬 IP 주소로 설정한 경우,
명령어에서 localhost 대신 해당 IP 주소를 사용해야 합니다.
예를 들어, IP가 192.168.0.12인 경우:
bundle exec bin/qa Test::Instance::All http://192.168.0.12:3000
페이지 방문 시 테스트가 로그아웃되는 경우#
테스트 사용자로 성공적으로 로그인했지만 예기치 않게 로그아웃된다면, 테스트 실행에 잘못된 URL을 사용하고 있을 수 있습니다.
기본적으로 테스트는 http://127.0.0.1:3000 URL을 사용하지만, 인스턴스에 호스트명이 설정된 경우 해당 호스트명을 명시적으로 테스트에 전달해야 합니다.
테스트는 API가 반환하는 web_url을 사용하여 다른 페이지로 이동합니다.
http://127.0.0.1:3000이 아닌 설정된 호스트명으로 이동하기 때문에 테스트 사용자가 로그아웃된 것처럼 보입니다.
다음 예시는 http://127.0.0.1:3000을 대상으로 테스트를 실행하며, 호스트명이 설정된 경우 로그아웃됩니다:
bundle exec rspec qa/specs/features/ee/browser_ui/3_create/repository/code_owners_spec.rb
이를 방지하려면 QA_GITLAB_URL을 설정된 호스트명으로 명시적으로 지정하세요. 예를 들어:
QA_GITLAB_URL=http://gdk.test:3000 bundle exec rspec qa/specs/features/ee/browser_ui/3_create/repository/code_owners_spec.rb