エンドツーエンド・テストのトラブルシューティング

ブラウザの動作を確認

エンドツーエンドのテストが失敗した場合、失敗したときにブラウザで何が起きているのかを確認することはとても役に立ちます。たとえば、テストがまったく実行されない場合、テストフレームワークがあなたのマシンで有効でない 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 #<TCPSocket:(closed)>

このエラーは、GitLabがlocalhost から解決されないアドレスで実行されている場合に発生する可能性があります。例えば、GDKhostname特定の内部 IP アドレスに設定した場合、コマンドではlocalhost の代わりにその IP アドレスを使う必要があります。例えば、あなたのIPが192.168.0.12

bundle exec bin/qa Test::Instance::All http://192.168.0.12:3000