Python 中的 Selenium Grid - 每次第一次测试后功能测试超时



所以我一直在尝试为我的 django 应用程序编写功能测试,但我似乎有一些奇怪的行为:每次我运行测试时,Selenium 在第一次测试后无限期挂起,只有当我重新启动集线器和节点容器时,它才允许我运行另一个测试,之后它再次永远挂起。我已经研究了这个线程,乍一看它似乎是相同的错误,但即使进行了这些更改,我也有同样的问题。

我的设置说明: 我正在使用docker-compose,有3个(主要(服务: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 分钟没有任何错误消息。

我想知道是否有人在 Selenium 中注意到或经历过类似的行为,在 docker 版本 18.06.1-ce 和 docker-compose 版本 1.22.0 上对所有图像使用:latest标签。

我最终自己解决了这个问题。这真的很简单,我只需要在我的TestCase类中有一个tearDown()函数,它退出Selenium以允许它继续下一个测试用例。

希望这对某人有所帮助!

相关内容

最新更新