Создание приложений CLI с Python (9 частью серии)
Это хорошая практика, как можно больше, пишите тесты для вашего кода. Если вы работаете с Python, pteest Делает процесс написания и прогонственными тестами намного более гладким. Я написал несколько сообщений некоторое время назад на начало работы с тестированием с Pтойцами, поэтому, если вы полностью новичны, вы можете взглянуть на них:
- Python TDD с Pтойцами – Начиная
- Утверждающие исключения с Pтойцами
- Захват операторы печати при отладке
- Пропуск тестов
Для тестирования приложений CLI нажмите предоставляет удобный модуль: Нажмите .testing
У кого есть некоторые полезные функции (особенно Clirunner ()
), чтобы помочь нам вызвать команды и проверять их поведение.
Мы пойдем вперед и проверим каждую часть Наше приложение – Создание, чтение, обновление и удаление.
Установка Pтойца и написание первого теста
Pтойцы могут быть установлены через PIP:
(env) $ pip install pytest
После установки Pтостастики создайте папку «Тесты» в корневом каталоге и добавьте первый тестовый файл:
(env) $ mkdir tests && cd tests (env) $ touch test_app.py
В файле Test_app добавьте следующий код для начала:
def test_add(): pass
Чтобы запустить тест, запустить pteest
На терминале:
(env) $ pytest ================== test session starts ==================== platform linux -- Python 3.7.3, pytest-5.1.0, py-1.8.0, pluggy-0.12.0 rootdir: /home/wangonya/code/contacts-cli collected 1 item tests/test_app.py . [100%] ================== 1 passed in 0.04s =======================
Тестирование команды add
Давайте отредактируем файл Test_app, чтобы добавить тест, чтобы увидеть, если Добавить
Команда добавляет новый контакт:
from click.testing import CliRunner from app import add runner = CliRunner() def test_add(): response = runner.invoke(add, ["test-user", "-m", "0"]) assert response.exit_code == 0 assert "Contact test-user added!" in response.output assert "{'mobile': '0'}" in response.output
Во-первых, мы призываем команду, поскольку мы будем на терминале, проходя в необходимых аргументах и вариантах: Ответ .invoke (Добавить, [«Тест-пользователь», «-M», «0»])
Отказ
Затем мы проверяем, что команда успешно выполняется: Assert Response.exit_Code
Отказ
Если команда успешно выполняется, мы ожидаем, что сообщение успеха должно быть возвращено в ответ со значениями, которые мы добавили:
assert "Contact test-user added!" in response.output assert "{'mobile': '0'}" in response.output
Остальные тесты в значительной степени следуют тому же формату.
Тестирование команды списка
def test_list(): response = runner.invoke(list) assert response.exit_code == 0 assert "Here\'s a list of all your contacts:" in response.output assert "'test-user': {'mobile': '0'}" in response.output
Команда списка не принимает аргументов или вариантов, поэтому мы просто называем его напрямую: Ответ .invoke (список)
.
Тестирование команды View
def test_view(): response = runner.invoke(view, "test-user") assert response.exit_code == 0 assert "{'mobile': '0'}" in response.output
Тестирование команды обновления
def test_update(): response = runner.invoke(update, ["test-user", "-m", "12345"]) assert response.exit_code == 0 assert "Contact updated!" in response.output assert "{'mobile': '12345'}" in response.output
Тестирование команды delete
def test_delete(): response = runner.invoke(delete, "test-user") assert response.exit_code == 0 assert "Contact deleted!" in response.output # call view on test-user to confirm it doesn't exist response = runner.invoke(view, "test-user") assert response.exit_code == 0 assert "The contact you searched for doesn't exist" in response.output
Улучшения
По мере роста вашего заявления вы можете рассмотреть вопрос об использовании Светильники и настроить такие вещи, как бегун
В оформлении Conftest.py файл. Мы сошли с ним здесь, потому что наши тесты были простыми и всеми в одном файле. После введения нескольких тестовых файлов после подхода, который мы использовали здесь, приведет к большому количеству излишне дублированного кода.
Также мы сделали прямые звонки на нашу API в тестах. Эта операция должна в идеале издеваться.
Создание приложений CLI с Python (9 частью серии)
Оригинал: “https://dev.to/wangonya/testing-click-applications-with-pytest-2o79”