# pytest-qt

pytest-qt is a pytest plugin that allows programmers to write tests for PyQt5, PyQt6, PySide2 and PySide6 applications.

The main usage is to use the `qtbot` fixture, responsible for handling `qApp` creation as needed and provides methods to simulate user interaction, like key presses and mouse clicks:

    def test_hello(qtbot):
        widget = HelloWidget()
        qtbot.addWidget(widget)

        # click in the Greet button and make sure it updates the appropriate label
        qtbot.mouseClick(widget.button_greet, QtCore.Qt.LeftButton)

        assert widget.greet_label.text() == "Hello!"

This allows you to test and make sure your view layer is behaving the way you expect after each code change.

Supported Python versions conda-forge ci `test coverage<https://coveralls.io/r/pytest-dev/pytest-qt>`_ docs

## Features

- qtbot fixture to simulate user interaction with `Qt` widgets.

- Automatic capture of `qDebug`, `qWarning` and `qCritical` messages;

- waitSignal and waitSignals functions to block test execution until specific signals are emitted.

- Exceptions in virtual methods and slots are automatically captured and fail tests accordingly.

## Requirements

Since version 4.0.0, `pytest-qt` requires Python 3.6+.

Works with either PySide6, PySide2, PyQt6 or PyQt5, picking whichever is available on the system, giving preference to the first one installed in this order:

- `PySide6`

- `PySide2`

- `PyQt6`

- `PyQt5`

To force a particular API, set the configuration variable `qt_api` in your `pytest.ini` file to `pyqt6`, `pyside2`, `pyqt6` or ``pyqt5`:

    [pytest]
    qt_api=pyqt5

Alternatively, you can set the `PYTEST_QT_API` environment variable to the same values described above (the environment variable wins over the configuration if both are set).