端到端测试故障排除
查看浏览器的操作
如果端到端测试失败,查看浏览器中发生的情况会非常有帮助。例如,如果测试完全不运行,测试框架可能正在尝试打开一个在您的机器上无效的 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 解析,则可能发生此错误。例如,如果您将 GDK 的 hostname 设置为特定的本地 IP 地址,您必须在命令中使用该 IP 地址,而不是 localhost。例如,如果您的 IP 是 192.168.0.12:
bundle exec bin/qa Test::Instance::All http://192.168.0.12:3000访问页面时测试退出登录
如果测试以测试用户身份成功登录,但随后意外退出登录,您可能使用了错误的 URL 来执行测试。默认情况下,测试使用 URL http://127.0.0.1:3000,但如果已为实例配置了主机名,您必须将该主机名显式传递给测试。测试使用 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