существовать Python середина,pytest
— это мощная среда тестирования для написания и выполнения тестовых случаев. Обычно мы запускаем существующую командную строку pytest
,Но иногда вам может потребоваться запустить программу из модуля или скрипта. pytest
,Например, для автоматизации тестирования или интеграции в рабочий процесс.
1. Предыстория проблемы Когда вы запускаете из модуля Pytest Когда, Пайтест Похоже, что тесты кэшируются. Любые изменения в модулях или тестах будут игнорироваться. В связи с существованием iPad написано на Python и поэтому его нельзя запустить из командной строки. Pytest, можно использовать только pytest.main() для запуска тестов. Этот вопрос тщательно искали, но удалось найти только один похожий вопрос, в котором предлагалось запустить его из командной строки. Pytest。
2. Решение Pytest Ничего не будет кэшироваться. каждый Python Экземпляр интерпретатора читает файл только один раз. Хотя есть встроенный перезагрузите компьютер, но он почти никогда не делает то, что вы хотите. Итак, если вы запустите следующий код:
import pytest
...
while True:
import my_nifty_app
my_nifty_app.be_nifty()
pytest.main()
Несмотря на то, что my_nifty_app.py существуют изменения на диске, он также будет прочитан только один раз. На самом деле нужен такой код:
exit_code = pytest.main()
sys.exit(exit_code)
Это завершит работу этого экземпляра интерпретатора и является единственным способом гарантировать, что исходный файл будет перечитан.
Пример кода:
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 Интерфейс, позволяющий запускать тесты программно.
pytest
: убеждатьсяуже Установить pytest
。если не Установить,Это можно сделать с помощью следующей команды:
pip установить pytestpytest.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
Такой же.pytest.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()pytest.main()
возвращаемое значение:
pytest.main()
Возвращает целое число, представляющее результат выполнения теста:
Вы можете выполнить дальнейшую обработку на основе этого возвращаемого значения: # 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
,И пользовательские параметры передачи:
# 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
,Для достижения потребностей в автоматизированном тестировании или интеграционном тестировании.