Запуск pytest-qt на CircleCI - PullRequest
1 голос
/ 30 июня 2019

Я пытаюсь запустить тесты, которые требуют pytest-qt (для тестирования диалогов PySide2) на CircleCI. Я получаю следующую ошибку:

xdpyinfo was not found, X start can not be checked! Please install xdpyinfo!
============================= test session starts ==============================
platform linux -- Python 3.6.8, pytest-5.0.0, py-1.8.0, pluggy-0.12.0 -- /home/circleci/project-caveman/venv/bin/python3
cachedir: .pytest_cache
PySide2 5.13.0 -- Qt runtime 5.13.0 -- Qt compiled 5.13.0
rootdir: /home/circleci/project-caveman
plugins: cov-2.7.1, xvfb-1.2.0, qt-3.2.2
collected 1 item                                                               

tests/test_main.py::test_label_change_on_button_press Fatal Python error: Aborted

Aborted (core dumped)
Exited with code 134

И я использую этот файл конфигурации:

version: 2
jobs:
  build:
    working_directory: ~/project-caveman
    docker:
      - image: circleci/python:3.6.8-stretch
    steps:
      - checkout

      # Dependencies
      - restore_cache:
          keys:
            - venv-{{ .Branch }}-{{ checksum "setup.py" }}
            - venv-{{ .Branch }}-
            - venv-
      - run:
          name: Install dependencies
          command: |
            python3 -m venv venv
            . venv/bin/activate
            pip install -e .[test] --progress-bar off
      - save_cache:
          key: venv-{{ .Branch }}-{{ checksum "setup.py" }}
          paths:
            - "venv"

      # Tests
      - run:
          name: Pytest
          command: |
            mkdir test-reports
            . venv/bin/activate
            xvfb-run -a pytest -s -v --doctest-modules --junitxml test-reports/junit.xml --cov=coveralls --cov-report term-missing
      - store_test_results:
          path: test-reports
      - run:
          name: Coveralls
          command: coveralls

Любая помощь очень ценится, заранее спасибо.

1 Ответ

1 голос
/ 01 июля 2019

Я вытащил контейнер circleci/python:3.6.8-stretch локально, клонировал ваш репозиторий и попытался выполнить тесты, в то время как я мог воспроизвести ошибку.

Первое, что нужно сделать, это включить режим отладки для среды выполнения Qt, такон печатает некоторую информацию об ошибках.Это можно сделать, установив переменную среды QT_DEBUG_PLUGINS:

$ QT_DEBUG_PLUGINS=1 pytest -sv

Теперь сразу понятно, чего не хватает в контейнере для запуска тестов.Фрагмент из выходных данных вышеупомянутой команды:

Got keys from plugin meta data ("xcb")
QFactoryLoader::QFactoryLoader() checking directory path "/usr/local/bin/platforms" ...
<b>Cannot load library /home/circleci/.local/lib/python3.6/site-packages/PySide2/Qt/plugins/platforms/libqxcb.so: (libxkbcommon-x11.so.0: cannot open shared object file: No such file or directory)</b>
QLibraryPrivate::loadPlugin failed on "/home/circleci/.local/lib/python3.6/site-packages/PySide2/Qt/plugins/platforms/libqxcb.so" : "Cannot load library /home/circleci/.local/lib/python3.6/site-packages/PySide2/Qt/plugins/platforms/libqxcb.so: (libxkbcommon-x11.so.0: cannot open shared object file: No such file or directory)"
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, webgl, xcb.

Aborted (core dumped)

Исправить это легко - установите пакет libxkbcommon-x11-0:

$ sudo apt update && sudo apt install -y libxkbcommon-x11-0

Добавьте эту строку в конфигурацию CircleCI (где-то перед заданием тестирования, например, в задании, в котором вы устанавливаете зависимости пакетов), и тест должен работать нормально.

Помимо этого, имеет смысл установить QT_DEBUG_PLUGINS=1 глобально, чтобы вы могли реагировать на возможный Qtошибки времени выполнения в будущем.

xdpyinfo не найден, запуск X не может быть проверен!Пожалуйста, установите xdpyinfo!

Если вы хотите избавиться от этого предупреждения, установите x11-utils:

$ sudo apt install x11-utils
...