t.me/atinfo_chat Telegram группа по автоматизации тестирования

Ошибка при запуске UI-тестов (python + selenium + pytest) на gitlab-ci

Теги: #<Tag:0x00007f07fe791398> #<Tag:0x00007f07fe791190> #<Tag:0x00007f07fe790fd8> #<Tag:0x00007f07fe790dd0> #<Tag:0x00007f07fe790bf0> #<Tag:0x00007f07fe790b00>

Привет! Пытаюсь запустить тесты на gitlab-ci, но падает ошибка из следующего кода (в этой джобе):
driver = EventFiringWebDriver(webdriver.Remote(command_executor="http://selenium__standalone-chrome:4444/wd/hub"), MyListener(get_logger()))


Правильно ли я описал инициализацию драйвера?
MyListener(get_logger()) служит для создания логгера
Код используется в этой фикстуре
Подскажите, как поправить ошибку?
Спасибо!

вы где запускаете тесты? где у вас хаб, он запущен? вы уверены, что выполнятель тестов может достучаться до хаба?

Тесты запускаю на gitlab-ci
Судя по всему, ошибок с загрузкой образа selenium/standalone нет


Зависимости на стенд так же установились и тесты стартанули.
(судя по всему) при попытке подключения к селениум-серверу выскакивает 500 ошибка
Потестил без обертки EventFiringWebDriver - ошибка остается, значит проблема именно где-то здесь:
webdriver.Remote(command_executor="http://selenium__standalone-chrome:4444/wd/hub")
но адрес тоже должен быть верным

мне кажется, что урл неправильный

Запустил из контейнера и попробовал урл http://localhost:9515/wd/hub
Получил в ответ
{"value":{"error":"unknown command","message":"unknown command: unknown command: wd/hub","stacktrace":"#0 0x55bc870d32b9 \u003Cunknown>\n"}}
Код состояния 404
И вообще, к какому бы разделу не обратился по localhost:9515 возвращает одно и тоже. Но тут хоть какой-то возврат, в случае если искать по другим адресам/портам, то просто не находит
UPD: ошибся, 9515 слушает chromedriver. Если url и правда неправильный, то не знаю по какому обращаться. По умолчанию, селениум-сервер должен работать на localhost:4444, но у меня там пусто

у меня работает, правда использую хром. попробуйте фукстуру браузера исправить https://www.screencast.com/t/GYc03BgOh ну или попробовать работоспособность локально при вьізове не remote а wd = webdriver.Firefox
ну и как вариан headless mode еще добавить
по сути могу вам свой рабочий конфтест прикрепить, попробуйте как вариант
https://www.screencast.com/t/YzDTcgcbe

Подскажите, а что именно для моей фикстуры браузера можно поправить?
Было бы здорово, если сможете так же поделиться содержимым .gitlab-ci.yml
Не совсем представляю, как Вам удается инициализировать драйвер с помощью webdriver.Firefox на селениум сервере. Или, может, я не совсем правильно понял…

у вас сначала wd = webdriver.Remote(command_executor=“http://selenium__standalone-firefox:4444/wd/hub”)
но возвращаете вьі не wd а driver. откуда он взялся?
что бьі не бьіло таких ошибок я назьіваю фикстуру browser а в ней уже работаю с driver
если вам не принципиально, то используйте chrome вместо firefox

stages:    #Each stage is a separate job that the runner will execute.
  - testing # Running tests
  - history_copy # Copy test results from previous runs tests
  - reports # Report generation
  - deploy # Publish the report to gitlab pages


chrome_job:    # Job name
  stage: testing    # The first stage to run
  services:
    - selenium/standalone-chrome
  image: python:3.9    # You need to specify the image that will be used to run the tests.
  tags:
    - docker    # With this tag, gitlab will figure out which runner to run. It will launch the docker container from the image that we specified in step 6 of registering the runner.
  before_script:
    - pip install -r requirements.txt    # Install packages in a raised container before running the tests themselves
  script:
    - pytest --alluredir=./allure-results tests/    # Run tests  specifying the folder with test results via --alluredir =
  allow_failure: true    # This will allow us to continue executing the pipeline in case the tests fail.
  artifacts:    # The entity with which we will save the test result.
    when: always    #Save always
    paths:
      - ./allure-results    # The report will be saved here
    expire_in: 1 day    # Report retention period

history_job:    # Job name
  stage: history_copy    # The second stage to run
  tags:
    - docker    # With this tag, gitlab will figure out which runner to run.
  image: storytel/alpine-bash-curl    # The runner will use a different image to download the test results from the previous pipeline.
  script:
    - 'curl --location --output artifacts.zip "https://gitlab.com/api/v4/projects/xxxxxxxx/jobs/artifacts/master/download?job=pages&job_token=$CI_JOB_TOKEN"'    # Using the gitlab api, download files from the job, which will be listed below. Please note: xxxxxxxx is your repository number
    - apk add unzip    # The image used in this step does not have the unzip utility by default, for this reason we add it to the container
    - unzip artifacts.zip    # Unpack the files
    - chmod -R 777 public    # We give the rights to any manipulations with the content
    - cp -r ./public/history ./allure-results    # Copy history to the folder with test results
  allow_failure: true    # Since there is no history at the first start of the pipeline, this will allow us to avoid the fall of the pipeline. In the future, this line can be safely deleted.
  artifacts:
    paths:
      - ./allure-results    # Save data
    expire_in: 1 day    # Report retention period
  rules:
    - when: always    #Save always

allure_job:    # Job name
  stage: reports    # The third stage to run
  tags:
    - docker    # Using the same runner
  image: frankescobar/allure-docker-service    # Tell the runner to use the allure image. In it we will generate a report.
  script:
     - allure generate -c ./allure-results -o ./allure-report    # Generate a report from ./allure-results inside the folder ./allure-report
  artifacts:
    paths:
      - ./allure-results    # Let's mount these two directories to get test results and generate reports, respectively
      - ./allure-report    # Let's mount these two directories to get test results and generate reports, respectively
    expire_in: 1 day    # Report retention period
  rules:
    - when: always    #Save always

pages:    # By the name of this job we tell gitlab to host the result in our pages
  stage: deploy    # The fourth stage to run
  script:
    - mkdir public    # Create a public folder. By default, gitlab hosts in gitlab pages only from the public folder
    - mv ./allure-report/* public    # Move the generated report to the public folder.
  artifacts:
    paths:
      - public
  rules:
    - when: always

Не совсем представляю, как Вам удается инициализировать драйвер с помощью webdriver.Firefox на селениум сервере. Или, может, я не совсем правильно понял

я имел ввиду запустить тест сначала локально если все ок то тогда уже менять вебрайвер на Remote, потому что мне кажется у вас ошибка в конфтесте и тест незапустится не локально не удаленно. у меня даже когда локально бьіло все ок - удаленно тестьі падали из за плохих селекторов

wd передаю в обертку EventFiringWebDriver, которым инициализирую driver. Так что там все ок.
Локально запускаться нечему, сейчас сделал просто пустые тесты. Падает на этапе попытки получить объект драйвера, значит ошибка либо в conftest (что маловероятно, только если ссылку на селениум сервер неправильно указываю), либо в .gitlab-ci.yml. Сейчас гляну, как у Вас все выстроено, попробую по образу и подобию повторить) Спасибо!
UPD: посмотрел, делал по этому же шаблону. Так же падают тесты. Буду искать дальше