为了执行测试,我通常运行一个单独的容器:
docker-compose run --rm web /bin/bash
其中web是django的容器。我不时从 shell 执行 py.test 。
为了能够使用 django 从容器访问 selenium 并允许浏览器从 selenium 容器访问 django 的 liveserver,我决定使用“net”参数,该参数允许容器共享网络。所以我将它添加到 yml 中:
selenium:
image: selenium/standalone-firefox
net: "container:web"
不幸的是这不起作用。我在 django 容器中没有看到 4444 端口。
它只有在以下情况下才有效net:"container:web"
我指定自动生成的容器的名称,例如net:"container:project_web_run_1"
.
我也尝试过docker-compose run --rm ....
use docker-compose up --no-deps
改变command
参数为py.test functional_tests
但这也不起作用。
这是在容器中使用 selenium 的权利吗?
我是这样做的。基本问题是 docker-compose run 将生成不同的主机名(project_container_run_x),其中 x 很难确定。我最终只是离开了IP地址。我还确保 DEBUG 为 False,否则我会收到错误的请求。
我正在使用 StaticLiveServerTestCase,如下所示:
import os
import socket
os.environ['DJANGO_LIVE_TEST_SERVER_ADDRESS'] = '0.0.0.0:8000'
class IntegrationTests(StaticLiveServerTestCase):
live_server_url = 'http://{}:8000'.format(
socket.gethostbyname(socket.gethostname())
)
def setUp(self):
settings.DEBUG = True
self.browser = webdriver.Remote(
command_executor="http://selenium:4444/wd/hub",
desired_capabilities=DesiredCapabilities.CHROME
)
def tearDown(self):
self.browser.quit()
super().tearDown()
def test_home(self):
self.browser.get(self.live_server_url)
我的 docker-compose 文件包含 selenium 的这个文件并扩展了 Web 容器(django 正在运行的地方)。端口 5900 对 VNC 开放。我喜欢将其隔离在 docker-compose.selenium.yml 之类的东西中
version: '2'
services:
web:
environment:
SELENIUM_HOST: http://selenium:4444/wd/hub
TEST_SELENIUM: 'yes'
depends_on:
- selenium
selenium:
image: selenium/standalone-chrome-debug
ports:
- "5900:5900"
我可以运行类似的测试
docker-compose run --rm web ./manage.py test
所以我的网络容器通过“selenium”主机访问selenium。然后,Selenium 通过动态确定的 IP 地址访问 Web 容器。
另一个问题是,人们很容易只使用“web”作为主机名。如果您的 docker-compose run 命令启动了一个单独的 Web 容器 - 这似乎可以工作。但是,它不会使用您的测试数据库,因此这不是一个很好的测试。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)