簡體   English   中英

在 gitlab CI 中運行 plotly dash selenium 測試

[英]Running plotly dash selenium tests in gitlab CI

所以我試圖在 GitLab ci 管道中實施 selenium 測試。 目前,我已經在我的本地系統上運行這些測試,以反映將在管道內發生的測試方法,即我在我的本地系統上構建我的測試,然后嘗試連接到 selenium/standalone-chrome 實例以運行測試這個命令

python3 -m pytest --junitxml=report.xml --log-cli-level DEBUG --webdriver Chrome --headless --remote-url http://localhost:4444/wd/hub testing/

這在我的本地機器上正常運行。 嘗試使用 gitlab-ci.yml 時

stages:
  - test

image: "python"

services:
  - selenium/standalone-chrome

test:
  stage: test
  tags:
    - docker
  services:
    - selenium/standalone-chrome:latest
  script:
    # Set environmental variables
    - DEV_DASHBOARD_CFG='./app/config.json'
    - apt-get update -qy
    - apt-get install -y xvfb zip wget ca-certificates
    - apt-get install -y libnss3-dev libasound2 libxss1 libappindicator3-1 libindicator7 gconf-service libgconf-2-4 libpango1.0-0 xdg-utils fonts-liberation libgbm1
    # Setup the application to run
    - apt-get install -y python-dev python-pip
    - pip install -r requirements.txt
    - cd app/
    - pwd
    - python3 -m pytest --junitxml=report.xml --log-cli-level DEBUG --webdriver Chrome -headless --remote-url http://selenium__standalone-chrome:4444/wd/hub testing/
  artifacts:
    when: always
    reports:
      junit: report.xml

我面臨的這個問題是 chromium web 驅動程序似乎有錯誤。

---------------------------- Captured stdout call -----------------------------
 Dash is running on http://127.0.0.1:8050/
 Dash is running on http://127.0.0.1:8050/
 Dash is running on http://127.0.0.1:8050/
 Dash is running on http://127.0.0.1:8050/
 Dash is running on http://127.0.0.1:8050/
 Dash is running on http://127.0.0.1:8050/
 2021-04-23 14:27:21,034 | dash - INFO: Dash is running on http://127.0.0.1:8050/
  * Serving Flask app "app.app" (lazy loading)
  * Environment: production
    WARNING: This is a development server. Do not use it in a production deployment.
    Use a production WSGI server instead.
  * Debug mode: off
 2021-04-23 14:27:21,051 | _internal - INFO:  * Running on http://127.0.0.1:8050/ (Press CTRL+C to quit)
 2021-04-23 14:27:21,164 | dashboard - INFO: Serving layout...
 2021-04-23 14:27:21,166 | app_cache - DEBUG: retrieving from cache: select distinct country from results
 2021-04-23 14:27:21,183 | _internal - INFO: 127.0.0.1 - - [23/Apr/2021 14:27:21] "GET / HTTP/1.1" 200 -
 ------------------------------ Captured log call -------------------------------
 INFO     app.app:dash.py:1714 Dash is running on http://127.0.0.1:8050/
 INFO     werkzeug:_internal.py:113  * Running on http://127.0.0.1:8050/ (Press CTRL+C to quit)
 INFO     werkzeug:_internal.py:113 127.0.0.1 - - [23/Apr/2021 14:27:21] "GET / HTTP/1.1" 200 -
 --------------------------- Captured stdout teardown ---------------------------
 2021-04-23 14:27:23,110 | _internal - INFO: 127.0.0.1 - - [23/Apr/2021 14:27:23] "GET /_stop-adc0916c7cdb4b169e4eeb4c3f3f532e HTTP/1.1" 200 -
 ---------------------------- Captured log teardown -----------------------------
 INFO     werkzeug:_internal.py:113 127.0.0.1 - - [23/Apr/2021 14:27:23] "GET /_stop-adc0916c7cdb4b169e4eeb4c3f3f532e HTTP/1.1" 200 -
 _______________________________ test_tab_styles ________________________________
 dash_duo = <dash.testing.composite.DashComposite object at 0x7f14d260f610>
     def test_tab_styles(dash_duo):
 >       dash_duo.start_server(app)
 testing/test_db_tabs.py:28: 
 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
 /usr/local/lib/python3.9/site-packages/dash/testing/composite.py:16: in start_server
     self.server_url = self.server.url
 /usr/local/lib/python3.9/site-packages/dash/testing/browser.py:601: in server_url
     self.wait_for_page()
 /usr/local/lib/python3.9/site-packages/dash/testing/browser.py:341: in wait_for_page
     self.driver.get(self.server_url if url is None else url)
 /usr/local/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py:333: in get
     self.execute(Command.GET, {'url': url})
 /usr/local/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py:321: in execute
     self.error_handler.check_response(response)
 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
 self = <selenium.webdriver.remote.errorhandler.ErrorHandler object at 0x7f14d260fdc0>
 response = {'status': 500, 'value': '{"value":{"error":"unknown error","message":"unknown error: net::ERR_CONNECTION_REFUSED\\n  (Session info: chrome=90.0.4430.85)","stacktrace":"#0 0x563f07a8ee89 \\u003Cunknown>\\n"}}'}

在嘗試在 gitlab CI 中實施一些 plotly 破折號測試時,我遇到了與上述完全相同的問題和錯誤消息。 終於讓它工作了,與 OP 的主要區別是使用 docker 與這些容器組合,而不是直接在 gitlab.ci.yml 中編寫腳本:

  • dash-test 容器, entrypoint: pytest -v --remote --log-cli-level DEBUGnetwork_mode: host
  • selenium-grid 容器,帶有image: selenium/standalone-chromenetwork_mode: host

在上述設置之前,我創建了一個 docker.network 並在 dash-test 容器上公開了端口 8050,在 selenium-grid 容器上公開了端口 4444。 那是我收到ERR_CONNECTION_REFUSED錯誤的時候。 我懷疑此設置的問題(可能是 gitlab ci 中發生的問題)是這樣的:

  • dash-test 容器可以使用--remote-url http://selenium-grid:4444/wd/hub訪問 selenium-grid,因此 selenium 測試開始運行
  • 但是,dash 測試庫有http://localhost:8050/硬編碼(ps dash 維護者,這應該明確更改並使其可配置),當測試運行時,selenium-grid 容器無法訪問它。 在修改 docker-compose 文件以使用network_mode: host時,這使得它可以訪問,因為容器現在正在使用主機的 .network。

docker-compose.yaml:

version: '3.7'
services:
    dash-test:
        image: "dash-test"
        build:
            context: ..
            dockerfile: docker/Dockerfile
            target: test
        entrypoint: pytest -v --remote --log-cli-level DEBUG -k bsly001
        network_mode: host
        depends_on:
            selenium-grid:
                condition: service_healthy
        mem_limit: 4096m
        volumes:
            - ../config:/app/config
            - ../dash_playground:/app/dash_playground
            - ../qa_reports:/app/qa_reports
    selenium-grid:
        image: selenium/standalone-chrome
        shm_size: 2gb
        network_mode: host
        healthcheck:
            test: /opt/bin/check-grid.sh --host 0.0.0.0 --port 4444
            interval: 5s
            timeout: 30s
            retries: 30

您的 Gitlab 運行程序應該可以訪問您嘗試從 Gitlab CI 運行的應用程序。 根據錯誤,很明顯 Gitlab 運行程序無法連接到應用程序 url。

所以請檢查並確認Gitlab runner是否可以訪問宿主機。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM