Как правильно организовать последовательность тестов в pytest?

Как исправить ордеринг тестов при добавлении дополнительной вложенности директорий с использованием pytest-order?
Изображение к вопросу
  • 17 сентября 2023 г. 14:58
Ответы на вопрос 1
В pytest можно задавать последовательность выполнения тестов с помощью функционала pytest-order. Вот несколько способов организации последовательности тестов:

1. Использование декоратора `pytest.mark.run(order=n)`:
   - Добавьте `pytest-order` в зависимости вашего проекта (`pip install pytest-order`).
   - Импортируйте декоратор `pytest.mark.run` в ваш файл с тестами.
   - Добавьте декоратор перед каждым тестовым методом с определенным значением `n`, чтобы указать их порядок выполнения.
   
   ```python
   import pytest
   
   @pytest.mark.run(order=1)
   def test_one():
       assert True
   
   @pytest.mark.run(order=2)
   def test_two():
       assert True
   ```

2. Использование декоратора `pytest.mark.order(n)`:
   - Добавьте `pytest-order` в зависимости вашего проекта (`pip install pytest-order`).
   - Импортируйте декоратор `pytest.mark.order` в ваш файл с тестами.
   - Добавьте декоратор перед каждым тестовым методом с определенным значением `n`, чтобы указать их порядок выполнения.
   
   ```python
   import pytest
   
   @pytest.mark.order(1)
   def test_one():
       assert True
   
   @pytest.mark.order(2)
   def test_two():
       assert True
   ```

3. Использование pytest.ini:
   - Создайте файл `pytest.ini` в корневом каталоге вашего проекта (если его еще нет).
   - В файле `pytest.ini` добавьте следующую секцию:
   
   ```ini
   [pytest]
   console_output_style = classic
   testpaths =
       tests
   python_classes = *Tests
   python_functions = test_*
   env =
       YOUR_ENVIRONMENT_VARIABLE=your_value
   ```

4. Использование именованных тестовых классов:
   - Создайте тестовый класс и назовите его в соответствии с желаемой последовательностью выполняемых тестов.
   
   ```python
   class TestOne():
       def test_one():
           assert True
   
   class TestTwo():
       def test_two():
           assert True
   ```

Когда используется pytest-order, все тесты выполняются по умолчанию в порядке возрастания значений `n`.
Похожие вопросы