因此,我一直在尝试为django应用程序编写功能测试,而且我似乎有一些奇怪的行为:每次运行测试时,Selenium都会在第一次测试后无限期挂起,只有当我重新启动集线器并节点容器确实让我运行了另一个测试,之后它再次永久挂起。我对this thread进行了研究,乍看之下似乎是相同的错误,但是即使进行了这些更改,我仍然遇到相同的问题。
我的设置说明: 我正在使用带有3个(主要)服务的docker-compose:django,selenium_hub和selenium_firefox。在下面找到我的docker-compose.yml:
version: '3'
services:
web:
build:
context: django
dockerfile: Dockerfile
stdin_open: true
tty: true
volumes:
- ./django/my_web:/src/my_web/
ports:
- "8000:8000"
networks: ["my-net"]
nginx:
image: nginx
volumes:
- ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro
- ./nginx/static:/usr/share/nginx/djangodocker/static
- ./nginx/certs/:/etc/nginx/conf.d/certs:ro
ports:
- "80:80"
- "443:443"
depends_on:
- web
networks: ["my-net"]
selenium_hub:
container_name: selenium_hub
image: selenium/hub
volumes:
- /dev/shm:/dev/shm
environment:
- DBUS_SESSION_BUS_ADDRESS=/dev/null
shm_size: 512MB
ports:
- "4444:4444"
networks: ["my-net"]
selenium_firefox:
container_name: selenium_firefox
image: selenium/node-firefox-debug
volumes:
- /dev/shm:/dev/shm
shm_size: 512MB
environment:
- DBUS_SESSION_BUS_ADDRESS=/dev/null
- HUB_PORT_4444_TCP_ADDR=selenium_hub
- HUB_PORT_4444_TCP_PORT=4444
ports:
- "5901:5900"
depends_on:
- selenium_hub
networks: ["my-net"]
networks:
my-net:
您可以看到我已经尝试挂载/ dev / shm,设置shm_size并设置环境变量:DBUS_SESSION_BUS_ADDRESS = / dev / null无效。
我认为问题的原因可能在于测试本身,因此我包含了以下代码:
from django.test import TestCase
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
class SeleniumTest(TestCase):
def setUp(self):
print('Setting up...')
self.firefox = webdriver.Remote(
command_executor='http://selenium_hub:4444/wd/hub',
desired_capabilities=DesiredCapabilities.FIREFOX
)
print('Done; connected')
def test_visit_site_with_firefox(self):
selenium = self.firefox
selenium.get('http://web:8000')
assert "Home" in selenium.title
self.firefox.quit()
.... more tests below...
但是,每当我运行manage.py test --verbosity=2
时,我都会得到第一个测试的结果,然后它在print("Setting up...")
行之后挂起,并且我已经等待了40分钟,没有任何错误消息。
我想知道是否有人在docker版本18.06.1-ce和docker-compose版本1.22.0上对所有图像使用了:latest
标签,从而在Selenium中注意到或经历了类似的行为。
答案 0 :(得分:0)
我最终自己解决了这个问题。真的很简单,我只需要在我的abstract
类中使用一个tearDown()
函数,该函数退出Selenium即可继续进行下一个测试用例。
希望这对某人有帮助!