【问题标题】:Django server inside docker is causing robot tests to give blank screens?docker内部的Django服务器导致机器人测试出现空白屏幕?
【发布时间】: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


【解决方案1】:

在此之前我没有集中精力,我用 8 个进程运行 pabot,而 django 应用程序是用 2 个 celery 工人启动的。一旦我将芹菜工人增加到 4 个,它就起作用了。不确定这是否是真正的原因,但它对我来说是有意义的,并且有效。

celery -A server -c ${CELERY_CONCURRENCY:-2} worker

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-01
    • 2020-03-29
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多