【发布时间】:2020-08-17 14:46:16
【问题描述】:
我在 docker compose 中构建了一个环境来运行机器人测试。该环境由 django web app、postgres 和机器人框架容器组成。我遇到的问题是我在不同的测试中得到了很多空白屏幕,而使用安装在虚拟机上的外部 Django Web 应用程序实例没有这个问题。 空白屏幕导致找不到元素,因此失败了很多:
JavascriptException: Message: javascript error: Cannot read property 'get' of undefined
(Session info: headless chrome=84.0.4147.89)
我确信问题出在 Django 应用容器本身而不是机器人容器,因为如上所述,我已经使用相同的环境进行了测试,但针对安装在 Docker 外部的不同 Web 应用进行了测试,并且它工作正常。
docker-compose.yml:
version: "3.6"
services:
redis:
image: redis:3.2
ports:
- 6379
networks:
local:
ipv4_address: 10.0.0.20
smtpd:
image: mysmtpd:1.0.5
ports:
- 25
networks:
- local
postgres:
image: mypostgres
build:
context: ../dias-postgres/
args:
VERSION: ${POSTGRES_TAG:-12}
hostname: "postgres"
environment:
POSTGRES_DB: ${POSTGRES_USER}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
networks:
local:
ipv4_address: 10.0.0.100
ports:
- 5432
volumes:
- my-postgres:/var/lib/postgresql/data
app:
image: mypyenv:${PYENV_TAG:-1.1}
tty: true
stdin_open: true
user: ${MY_USER:-jenkins}
networks:
local:
ipv4_address: 10.0.0.50
hostname: "app"
ports:
- 8000
volumes:
- ${WORKSPACE}:/app
environment:
ALLOW_HOST: "*"
PGHOST: postgres
PGUSER: ${POSTGRES_USER}
PGDATABASE: ${POSTGRES_USER}
PGPASSWORD: ${POSTGRES_PASSWORD}
ANONYMIZE: "false"
REDIS_HOST: redis
REDIS_DB: 2
APP_PATH: ${APP_PATH}
APP: ${MANDANT}
TIMER: ${TIMER:-20}
EMAIL_BACKEND: "dias.core.log.mail.SmtpEmailBackend"
EMAIL_HOST: "smtpd"
EMAIL_PORT: "25"
robot:
image: myrobot:${ROBOT_TAG:-1.0.9}
user: ${ROBOT_USER:-jenkins}
networks:
local:
ipv4_address: 10.0.0.70
volumes:
- ${WORKSPACE}:/app
- ${ROBOT_REPORTS_PATH}:/APP_Robot_Reports
environment:
APP_ROBOT: ${APP_ROBOT}
TIMER: ${TIMER:-20}
PGHOST: postgres
PGUSER: ${POSTGRES_USER}
PGDATABASE: ${POSTGRES_USER}
PGPASSWORD: ${POSTGRES_PASSWORD}
THREADS: ${THREADS:-4}
tty: true
stdin_open: true
entrypoint: start-robot
networks:
local:
driver: bridge
ipam:
config:
- subnet: 10.0.0.0/24
volumes:
my-postgres:
external: true
name: my-postgres
我已经监控了应用的统计数据,在测试过程中没有任何异常。此外,在浏览器中手动测试了该应用程序,它看起来不错,没有任何问题。 注意:chromedriver 和 google chrome 版本之间没有不匹配(无论如何这无关紧要,因为同一个机器人容器已经与没有 Docker 用于 Django 应用程序的其他实例一起工作)
有人有想法吗?
【问题讨论】:
-
我猜你可以为
robot服务添加depends_on子句。我不确定它应该依赖什么,但你可以说它依赖于所有其他服务。更多信息在这里:docs.docker.com/compose/compose-file/#depends_on. -
@MarkoE 感谢您的建议,但服务状态完全没有问题。我使用特殊脚本作为入口点,在运行之前检查依赖关系。
标签: python django docker docker-compose robotframework