Rails 在 Docker 中使用水豚和 headless selenium 浏览器进行系统测试
Rails system test with capybara and headless selenium browser in Docker
TL;DR:关于如何正确配置 capybara 以便能够在具有默认 Rails minitest 系统测试的 docker 容器中驱动远程 selenium 浏览器的任何想法?
我 运行 Rails 在一个 docker 化的环境中..
现在我想开始一些 "system tests" 但是因为我在 Docker 里面 运行 我想出了一些问题。
我正在使用带有 capybara
和 selenium-webdriver
gem 的默认测试套件(minitest?)。
我已经使用以下方法在容器中安装了 chromedriver
数据包:
RUN apt-get install -y chromedriver \
&& ln -s /usr/lib/chromium-browser/chromedriver /usr/local/bin
但是运行rails test:system
输出如下错误Selenium::WebDriver::Error::WebDriverError: Unable to find chromedriver.
其实我不知道chrome本身有没有安装?
which chrome
什么都不输出。
which chromium
输出 /usr/bin/chromium
.
我也试过 xvfb
但没有成功。
所以(因为我不知道)我尝试更进一步,实际上也使用了 docker 化的系统测试环境。
我从 selenium 中找到了一些 Docker 图像。所以我 运行 在我的 rails 和数据库容器中有一个 selenium-standalone-chrome
容器(实际的 docker-compose.yml I'm using is here)
然后我发现了一些关于配置的有用信息,让水豚驱动 远程 selenium 浏览器。
我在互联网上找到的所有示例都使用 rspec,但由于我使用的是默认的 minispec,所以我尝试将 capybara 驱动程序调整为 minispec,但我对如何做以及在哪里做有一些疑问放上配置。
对于系统测试我猜最好的位置是文件application_system_test_case.rb
。我还发现并尝试了许多不同的水豚配置,最后得到以下似乎是最完整的 (available here)
在那一刻,测试似乎表现良好,因为我没有错误,但它总是失败。
无论在测试用例之前调用驱动程序配置(我定义服务器主机和端口的 setup_remote
方法),它都会失败。
不管有没有调用,我都收到了 "site can't be reached" 错误 (here is the screenshot)
这里是 the test file I used。 (测试一些反应动态显示)
但是我可以从主机的浏览器访问带有给定 URL 的 selenium 容器。两个容器都能看到对方。 我从容器 shell.
中进行了一些 ping
以下有用的 SO 问题对我不起作用:
关于如何正确配置水豚以能够在默认 Rails minitest 系统测试的 docker 容器中驱动远程 selenium 浏览器的任何想法?
非常感谢。
您必须覆盖主机方法,以便 Capybara 使用容器的 IP 地址。看看这个 post:https://medium.com/@pacuna/using-rails-5-1-system-tests-with-docker-a90c52ed0648
TL;DR:关于如何正确配置 capybara 以便能够在具有默认 Rails minitest 系统测试的 docker 容器中驱动远程 selenium 浏览器的任何想法?
我 运行 Rails 在一个 docker 化的环境中.. 现在我想开始一些 "system tests" 但是因为我在 Docker 里面 运行 我想出了一些问题。
我正在使用带有 capybara
和 selenium-webdriver
gem 的默认测试套件(minitest?)。
我已经使用以下方法在容器中安装了 chromedriver
数据包:
RUN apt-get install -y chromedriver \
&& ln -s /usr/lib/chromium-browser/chromedriver /usr/local/bin
但是运行rails test:system
输出如下错误Selenium::WebDriver::Error::WebDriverError: Unable to find chromedriver.
其实我不知道chrome本身有没有安装?
which chrome
什么都不输出。
which chromium
输出 /usr/bin/chromium
.
我也试过 xvfb
但没有成功。
所以(因为我不知道)我尝试更进一步,实际上也使用了 docker 化的系统测试环境。
我从 selenium 中找到了一些 Docker 图像。所以我 运行 在我的 rails 和数据库容器中有一个 selenium-standalone-chrome
容器(实际的 docker-compose.yml I'm using is here)
然后我发现了一些关于配置的有用信息,让水豚驱动 远程 selenium 浏览器。
我在互联网上找到的所有示例都使用 rspec,但由于我使用的是默认的 minispec,所以我尝试将 capybara 驱动程序调整为 minispec,但我对如何做以及在哪里做有一些疑问放上配置。
对于系统测试我猜最好的位置是文件application_system_test_case.rb
。我还发现并尝试了许多不同的水豚配置,最后得到以下似乎是最完整的 (available here)
在那一刻,测试似乎表现良好,因为我没有错误,但它总是失败。
无论在测试用例之前调用驱动程序配置(我定义服务器主机和端口的 setup_remote
方法),它都会失败。
不管有没有调用,我都收到了 "site can't be reached" 错误 (here is the screenshot)
这里是 the test file I used。 (测试一些反应动态显示)
但是我可以从主机的浏览器访问带有给定 URL 的 selenium 容器。两个容器都能看到对方。 我从容器 shell.
中进行了一些 ping以下有用的 SO 问题对我不起作用:
关于如何正确配置水豚以能够在默认 Rails minitest 系统测试的 docker 容器中驱动远程 selenium 浏览器的任何想法?
非常感谢。
您必须覆盖主机方法,以便 Capybara 使用容器的 IP 地址。看看这个 post:https://medium.com/@pacuna/using-rails-5-1-system-tests-with-docker-a90c52ed0648