pytest — Начало работы | Месяц темы Python

задняя часть Python

Эта статья участвует в "Месяце тем Python", подробнее см.Ссылка на мероприятие

Поиск по общедоступным номерам WeChat [Chengyuan Xiaozhuang] - Напрасных действий не бывает, важен каждый шаг

предисловие

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

Введение в pytest

Цитата здесьpytestофициальная документацияСодержание в:pytest is a mature full-featured Python testing tool that helps you write better programs.

Getting start

установка pytest

pytestОперационная среда:python3.6 3.7 3.8 3.9 pypy3.Выполните следующую команду в командной строке, чтобы установитьpytest:

pip install pytest

После завершения установки выполните следующую команду, чтобы проверить, прошла ли установка успешно:

pytest --version
pytest 6.2.4

первый тест

Простой тест для функции можно создать в четырех строках кода.

# test.py
def func(x):
    return x+1


def test_answer():
    assert func(5) == 7

Можно выполнить следующееpytestКоманда для проверки работоспособности.

image-20210726105047982

100%Относится к общему прогрессу выполнения всех тестовых случаев после завершения,pytestОтображается отчет об ошибке с указанием точной причины ошибки.pytestМожно указать файлы для тестирования, чащеpytestзапустит все файлы в текущем каталоге и подкаталогахtest_*.pyили*_test.pyфайл формы.

Несколько тестов в классе

Если вы написали несколько тестовых случаев, вы можете поместить несколько тестовых случаев в один и тот же класс, но вам нужно убедиться, что тип имеет префиксTest, иначе будетpytestперепрыгни.

class TestDemo:

    def test_one(self):
        x = 'this'
        assert 'h' in x

    def test_two(self):
        x = 'hello'
        assert hasattr(x, 'check')

Ниже приведено использованиеpytestВ результате выполнения теста при написании теста в классе необходимо учитывать два момента: во-первых, имя класса должно иметьTestпрефикс, а во-вторых, вам не нужно создавать экземпляр объекта при использовании класса для тестирования,pytestавтоматически найдетtest_Выполнение префиксного метода.

image-20210726111914887

Usage and Invocations

Exit codes

Я не знаю, есть ли какие-нибудь осторожные друзья, которые обнаружили, что после использования pycharm для запуска программы она будет отображатьProcess finished with exit code 0, указывая на то, что программа завершила работу в обычном режиме и работаетpytestтакже появляются, когдаexit code, а может быть около 6 различныхexit code:

exit code 0: Все тесты собраны и успешно пройдены

exit code 1: собрал и запустил тесты, но некоторые тесты провалились

exit code 2: Прервано во время выполнения теста

exit code 3: Произошла внутренняя ошибка при выполнении теста

exit code 4: ошибка использования команды pytest

exit code 5: без проверки коллекции

Завершить тест

существуетpytestВо время выполнения тест может быть остановлен при появлении одного или N сообщений об ошибках через управление командами.

pytest -x           # stop after first failure
pytest --maxfail=2  # stop after two failures

Указать/выбрать тестовые случаи

pytestПоддерживает многосторонний запуск и выбор тестовых случаев.

Протестировать указанный файл py:pytest test_mod.py

Проверить указанный каталог:pytest /usr/local/testing/

Укажите тест по идентификатору узла: Каждому собранному тесту будет присвоен уникальный идентификатор узла, который состоит из имени модуля, имени класса, имени функции и т. д., каждая часть использует::разделены.

运行模块中的指定的测试用例:pytest test_mod.py::test_func
运行类中的某个测试方法:pytest test_mod.py::TestClass::test_method

параметры pytest

-rОпция может использоваться для отображения более короткой сводной информации о тесте в конце сеанса тестирования, в больших тестовых случаях все сбои, пропуски и т. Д. Информация может быть получена очень четко.-rПараметры можно комбинировать с другими параметрами, указанными ниже, для вывода различной информации о результатах.

f:失败的
E:错误的
s:跳过的
x:失败的
p:通过的

Чтобы просмотреть только неудачные и пропущенные тесты, вы можете сделать:pytest -rfs.

Эпилог

Статья была впервые опубликована в публичном аккаунте WeChat.Ченг Юань Сяочжуан, синхронизировано сНаггетс.

Кодировать слова непросто, объясните, пожалуйста, источник перепечатки, а маленькие друзья, которые проходят мимо, протягивают свои милые пальчики и ставят лайк перед уходом (╹▽╹)

image.png