Как запустить pytest изнутри модуля
Как запустить pytest изнутри модуля

существовать Python середина,pytest — это мощная среда тестирования для написания и выполнения тестовых случаев. Обычно мы запускаем существующую командную строку pytest,Но иногда вам может потребоваться запустить программу из модуля или скрипта. pytest,Например, для автоматизации тестирования или интеграции в рабочий процесс.

1. Предыстория проблемы Когда вы запускаете из модуля Pytest Когда, Пайтест Похоже, что тесты кэшируются. Любые изменения в модулях или тестах будут игнорироваться. В связи с существованием iPad написано на Python и поэтому его нельзя запустить из командной строки. Pytest, можно использовать только pytest.main() для запуска тестов. Этот вопрос тщательно искали, но удалось найти только один похожий вопрос, в котором предлагалось запустить его из командной строки. Pytest。

2. Решение Pytest Ничего не будет кэшироваться. каждый Python Экземпляр интерпретатора читает файл только один раз. Хотя есть встроенный перезагрузите компьютер, но он почти никогда не делает то, что вы хотите. Итак, если вы запустите следующий код:

Язык кода:javascript
копировать
import pytest
...
while True:
    import my_nifty_app
    my_nifty_app.be_nifty()
    pytest.main()

Несмотря на то, что my_nifty_app.py существуют изменения на диске, он также будет прочитан только один раз. На самом деле нужен такой код:

Язык кода:javascript
копировать
exit_code = pytest.main()
sys.exit(exit_code)

Это завершит работу этого экземпляра интерпретатора и является единственным способом гарантировать, что исходный файл будет перечитан.

Пример кода:

Язык кода:javascript
копировать
import pytest
​
# Определить тестовую функцию
def test_function():
    assert True
​
# Определите модуль, содержащий тестовые функции
module = """
def test_function():
    assert True
"""
​
# запускать изнутри модуля Pytest
exec(module)
pytest.main()
​
# Внести изменения в модуль
module = """
def test_function():
    assert False
"""
​
# сновазапускать изнутри модуля Pytest
exec(module)
pytest.main()
​
# Теперь существуют, тест должен провалиться

Запуск из модуля pytest,Можно использовать pytest.main() метод. это Python Интерфейс, позволяющий запускать тесты программно.

шаг:

  1. Установить pytest: убеждатьсяуже Установить pytest。если не Установить,Это можно сделать с помощью следующей команды: pip установить pytest
  2. Вызывается из модуля pytest.main(): Позвонив pytest.main(),ты можешь начать с Python Запустите тест в скрипте. Вы можете передать параметры командной строки pytest.main() Для управления тестовыми файлами или параметрами, которые выполняются. Пример 1: Запуск изнутри модуля pytest Создайте простой тестовый файл test_sample.py,и напишите тестовые примеры: # test_sample.py ​ def test_addition(): assert 1 + 1 == 2 ​ def test_subtraction(): assert 2 - 1 == 1 Затем запустите другой модуль или скрипт. pytest.main() Чтобы выполнить тест: # run_tests.py ​ import pytest ​ def run_tests(): # Запустить все тесты pytest.main() ​ if __name__ == "__main__": run_tests() Когда ты бежишь run_tests.py , он будет выполнен изнутри pytest,и автоматически запускать все тестовые файлы в текущем каталоге (начиная с test_ Начинается с или начинается с _test файл в конце). python run_tests.py В выводе будут показаны результаты теста, как если бы вы запускали его из командной строки. pytest Такой же.
  3. Укажите тестовый файл или каталог: Вы можете указать тестовый файл или каталог для запуска, передав параметры. Например, чтобы указать конкретный тестовый файл для запуска: # run_tests.py ​ import pytest ​ def run_tests(): # Запускать только указанные тестовые файлы pytest.main(["test_sample.py"]) ​ if __name__ == "__main__": run_tests()
  4. Передать параметры pytestpytest.main() Поддерживает принятие командной строки Параметрыкак параметр。Например,если ты хочешь Включить подробный режим(-v)Или просто показать информацию об ошибке(--maxfail=1),Параметр, который может быть передан. # run_tests.py import pytest def run_tests(): # Запускайте тесты, используя параметры командной строки: включите подробный режим и установите максимальное количество ошибок. pytest.main(["-v", "--maxfail=1", "test_sample.py"]) if __name__ == "__main__": run_tests()
  5. иметь дело с pytest.main() возвращаемое значениеpytest.main() Возвращает целое число, представляющее результат выполнения теста:
    • 0:Все тесты пройдены。
    • 1:Тест не пройден。
    • 2:Выполнение тестасерединаперерыв。
    • 3:Внутренняя ошибка。
    • 4:Ошибка использования командной строки。

    Вы можете выполнить дальнейшую обработку на основе этого возвращаемого значения: # run_tests.py import pytest def run_tests(): result = pytest.main(["-v", "test_sample.py"]) if result == 0: print("Все тесты пройдены.") else: print(f «Тест не пройден с кодом {result}»), если __name__ == «__main__»: run_tests()

Полный пример

Вот полный пример, показывающий, как запустить его изнутри модуля. pytest,И пользовательские параметры передачи:

Язык кода:javascript
копировать
# run_tests.py

import pytest

def run_tests():
    # Запустите тест, включите подробный режим и укажите «только для выполнения». test_sample.py
    result = pytest.main(["-v", "test_sample.py"])
    if result == 0:
        print("All tests passed.")
    else:
        print(f"Tests failed with code {result}")

if __name__ == "__main__":
    run_tests()

Другие вещи, на которые стоит обратить внимание

  • Избегайте рекурсивных вызовов:когдазапускать изнутри модуля pytest При этом избегайте вызова его непосредственно в тестовом файле. pytest.main(),В противном случае это может привести к рекурсивным вызовам.,потому что pytest Тестовые файлы также загружаются во время выполнения.
  • Виртуальная среда и управление зависимостями:убеждатьсясуществовать Правильная виртуальная средасерединабегать pytest,чтобы избежать конфликтов зависимостей.

С помощью этих шагов вы сможете существовать Python Удобно вызывать и управлять в скриптах pytest,Для достижения потребностей в автоматизированном тестировании или интеграционном тестировании.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose