4 метода тестирования приложений Python для командной строки (CLI)
Вы только что закончили сборку своего первого приложения командной строки Python. Или, может быть, ваш второй или третий. Вы изучали Python некоторое время, и теперь вы готовы построить something, больше и сложнее , но все еще работает в командной строке. Или вы привыкли к building and test веб-приложениям или настольным приложениям с графическим интерфейсом, но сейчас начинаете создавать приложения CLI.
Во всех этих и других ситуациях вам необходимо изучить и освоить различные методы тестирования приложения Python CLI.
Хотя выбор инструментов может быть пугающим, главное помнить, что вы просто сравниваете выходные данные, которые генерирует ваш код, с ожидаемыми результатами. Все следует из этого.
*В этом руководстве вы узнаете четыре практических метода тестирования приложений командной строки Python:*
- Отладка «Lo-Fi» с помощью + print () +
- Использование визуального отладчика Python
- Юнит тестирование с помощью pytest и mocks
- Интеграционное тестирование
*Бесплатный бонус:* ссылка: # [Нажмите здесь, чтобы получить наш шпаргалку по тестированию Python], в которой кратко описаны методы, продемонстрированные в этом руководстве.
Все будет структурировано вокруг базового приложения Python CLI, которое передает данные в виде многоуровневого словаря двум функциям, которые каким-то образом преобразуют их, а затем печатает их для пользователя.
Python. Проверка на четность/нечетность
Настройка модульного тестирования для кода Python
Область применения:Visual Studio
Visual Studio для Mac
Visual Studio Code
Модульные тесты — это сегменты кода, которые проверяют работу других частей кода в приложении, например изолированных функций, классов и т. д. Если приложение успешно проходит все модульные тесты, то вы по меньшей мере уверены, что все низкоуровневые функции работают правильно.
В Python модульное тестирование широко используется для проверки скриптов в процессе разработки. Поддержка Python в Visual Studio включает обнаружение, выполнение и отладку модульных тестов непосредственно в контексте процесса разработки, а значит, вам не потребуется выполнять эти тесты отдельно.
Эта статья содержит краткий обзор модульного тестирования в Visual Studio для Python. Общие сведения о модульном тестировании см. в статье о модульном тестировании кода.
Выбор платформы тестирования для проекта Python
Visual Studio поддерживает две платформы тестирования для Python — unittest и pytest (доступна в Visual Studio 2019, начиная с версии 16.3). По умолчанию при создании проекта Python платформа не выбрана. Чтобы указать платформу, щелкните правой кнопкой мыши имя проекта в обозреватель решений и выберите параметр Свойства. Открывается конструктор проектов, позволяющий настраивать тесты с помощью вкладки Тест. На этой вкладке можно выбрать платформу тестирования, используемую для вашего проекта.
Вычисляем по IP с помощью Python | Как определить местоположение по IP
- Для платформы unittest корневой каталог проекта используется для обнаружения тестов. На вкладке Тест это расположение, а также текстовый шаблон для идентификации тестов можно изменить на значения, заданные пользователем.
- Для платформы pytest параметры тестирования, такие как расположение тестов и шаблоны имен файлов, указываются с помощью стандартного INI-файла конфигурации pytest. Дополнительные сведения см. в справочной документации для pytest.
После сохранения выбранных параметров и платформы в обозревателе тестов инициируется обнаружение тестов. Если окно обозревателя тестов еще не открыто, перейдите на панель инструментов и выберите Тест>Обозреватель тестов.
Настройка тестирования для Python без проекта
Visual Studio позволяет запускать и тестировать существующий код Python без проекта, открыв папку с кодом Python. В этих случаях для настройки тестирования потребуется файл PythonSettings.json.
- Откройте существующий код Python с помощью параметра Открыть локальную папку.
- В окне обозревателя решений щелкните значок Показать все файлы, чтобы отобразить все файлы в текущей папке.
- Перейдите к файлу PythonSettings.json в папке Локальные параметры. Если этот файл отсутствует в папке Локальные параметры, создайте его вручную.
- Добавьте поле TestFramework в файл параметров и задайте для него значение pytest или unittest в зависимости от требуемой платформы тестирования.
Примечание Если для платформы unittest в файле PythonSettings.json не указаны поля UnitTestRootDirectory and UnitTestPattern, они добавляются и получают значения по умолчанию «.» и «test*.py», соответственно.
Примечание Если окно обозревателя тестов уже открыто нажатие клавиш CTRL + R,A также активирует обнаружение.
Обнаружение и просмотр тестов
По умолчанию Visual Studio определяет тесты unittest и pytest как методы, имена которых начинаются с test . Чтобы просмотреть обнаружение тестов, сделайте следующее:
- Откройте проект Python.
- После загрузки проекта в Visual Studio щелкните проект правой кнопкой мыши в обозревателе решений и выберите платформу unittest или pytest на вкладке Тест в области свойств.
Примечание При использовании платформы pytest можно указать расположение тестов и шаблоны имен файлов с помощью стандартного INI-файла конфигурации pytest. По умолчанию используется папка рабочей области или проекта с шаблоном test_*py и *_test.py . Дополнительные сведения см. в справочной документации для pytest.
import unittest class Test_test1(unittest.TestCase): def test_A(self): self.fail(«Not implemented») if __name__ == ‘__main__’: unittest.main()


Дополнительные сведения о модуле unittest и создании тестов можно получить в документации по Python 3.10.
Выполнить тесты
В обозревателе тестов можно запустить тесты несколькими способами:
- Команда Запустить все явно выполняет все тесты из списка (с учетом фильтров).
- Команда меню Запуск позволяет одновременно выполнить все тесты, которые завершились успешно, завершились неудачно или еще не выполнялись.
- Также можно выбрать один или несколько тестов, щелкнуть их правой кнопкой мыши и выбрать команду Запустить выбранные тесты.
Тесты выполняются в фоновом режиме, а обозреватель тестов обновляет их состояние по мере завершения:
- Успешно выполненные тесты обозначаются зеленым флажком, и для них указывается затраченное время:
- Неудачные тесты обозначаются красным крестом и дополняются ссылкой Output (Вывод), которая позволяет изучить выходные данные на консоли и выходные данные unittest , полученные по результатам этого теста:
Отладка тестов
Модульные тесты являются частью кода проекта, и в них могут встречаться ошибки, как и в любом другом коде. Периодически тест следует запускать в отладчике, где можно установить точки останова, просмотреть переменные или выполнить код пошагово. Также Visual Studio предоставляет средства диагностики для модульных тестов.
При тестовой отладке по умолчанию используется отладчик ptvsd 4 для Visual Studio 2017 (версии 15.8 и последующих) и debugpy для Visual Studio 2019 (версии 16.5 и последующих). Если вы хотите использовать вместо него ptvsd 3, можно выбрать параметр Использовать устаревший отладчик в меню Сервис>Параметры>Python>Отладка.
Чтобы начать отладку, установите в коде начальную точку останова, а затем щелкните в обозревателе тестов правой кнопкой мыши этот тест (или выделенный набор тестов) и выберите Отладить выбранные тесты. Visual Studio запускает отладчик Python, как для обычного кода приложения.
Вы также можете использовать команду Анализ покрытия кода для выбранных тестов. Дополнительные сведения см. в разделе Использование покрытия кода для определения объема протестированного кода.
Источник: learn.microsoft.com
Анализ кода в Python
Анализ кода в Python может быть трудной темой, но очень полезной в тех случаях, когда вам нужно повысить производительность вашей программы. Существует несколько анализаторов кода для Python, которые вы можете использовать для проверки своего кода и выяснить, соответствует ли он стандартам. Самым популярным можно назвать pylint.
Он очень удобен в настойках и подключениях. Он также проверяет ваш код на соответствие с PEP8, официальным руководством по стилю ядра Python, а также ищет программные ошибки. Обратите внимание на то, что pylint проверяет ваш код на большую часть стандартов PEP8, но не на все. Также мы уделим наше внимание тому, чтобы научиться работать с другим анализатором кода, а именно pyflakes.
Начнем с pylint
Пакет pylint не входит в Python, так что вам нужно будет посетить PyPI (Python Package Index), или непосредственно сайт пакета для загрузки. Вы можете использовать следующую команду, которая сделает всю работу за вас:
pip install pylint
Если все идет по плану, то pylint установится, и мы сможем пойти дальше.
Анализ вашего кода
После установки pylint вы можете запустить его в командной строке, без каких либо аргументов, что бы увидеть, какие опции он принимает. Если это не сработало, можете прописать полный путь, вот так:
c : Python34 Scripts pylint
Теперь нам нужен какой-нибудь код для анализа. Вот часть кода, которая содержит четыре ошибки. Сохраните её в файле под названием crummy_code.py:
crummy_code.py
import sys
class CarClass :
def __init__ ( self , color , make , model , year ) :
«»»Constructor»»»
self . color = color
self . make = make
self . model = model
self . year = year
if «Windows» in platform . platform ( ) :
print ( «You’re using Windows!» )
self . weight = self . getWeight ( 1 , 2 , 3 )
def getWeight ( this ) :
return «2000 lbs»
Можете увидеть ошибки не запуская код? Давайте посмотрим, может ли pylint найти их!
pylint crummy_code . py
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Telegram Чат c:Python34Scriptspylint crummy_code.py
No config file found, using default configuration
************* Module crummy_code
C: 2, 0: Trailing whitespace (trailing-whitespace)
C: 5, 0: Trailing whitespace (trailing-whitespace)
C: 12, 0: Trailing whitespace (trailing-whitespace)
C: 15, 0: Trailing whitespace (trailing-whitespace)
C: 17, 0: Trailing whitespace (trailing-whitespace)
C: 1, 0: Missing module docstring (missing-docstring)
C: 3, 0: Empty class docstring (empty-docstring)
C: 3, 0: Old-style class defined. (old-style-class)
E: 13,24: Undefined variable ‘platform’ (undefined-variable)
E: 16,36: Too many positional arguments for function call (too-many-function-args)
C: 18, 4: Invalid method name «getWeight» (invalid-name)
C: 18, 4: Empty method docstring (empty-docstring)
E: 18, 4: Method should have «self» as first argument (no-self-argument)
R: 18, 4: Method could be a function (no-self-use)
R: 3, 0: Too few public methods (1/2) (too-few-public-methods)
W: 1, 0: Unused import sys (unused-import)
Давайте немного притормозим и разберемся. Сначала нам нужно понять, что означают буквы:
- С – конвенция (convention)
- R – рефакторинг (refactor)
- W – предупреждение (warning)
- E – ошибка (error)
Наш pylint нашел 3 ошибки, 4 проблемы с конвенцией, 2 строки, которые нуждаются в рефакторинге и одно предупреждение. Предупреждение и 3 ошибки – это как раз то, что я искал. Мы попытаемся исправить этот код и устранить ряд проблем. Для начала мы наведем порядок в импортах, и изменить функцию getWeight на get_weight, в связи с тем, что camelCase не используется в названиях методов. Нам также нужно исправить вызов get_weight, чтобы он передавал правильное количество аргументов и исправить его, чтобы “self” выступал в качестве первого аргумента. Взглянем на новый код:
# crummy_code_fixed.py
import platform
class CarClass :
def __init__ ( self , color , make , model , year ) :
«»»Constructor»»»
self . color = color
self . make = make
self . model = model
self . year = year
if «Windows» in platform . platform ( ) :
print ( «You’re using Windows!» )
self . weight = self . get_weight ( 3 )
def get_weight ( self , this ) :
return «2000 lbs»
Давайте запустим новый код с pylint и посмотрим, насколько успешно мы провели работу. Для краткости, мы еще раз рассмотрим первую часть:
c : py101 > c : Python34 Scripts pylint crummy_code_fixed . py
No config file found , using default configuration
* * * * * * * * * * * * * Module crummy_code _ fixed
C : 1 , 0 : Missing docstring
C : 4 , 0 : CarClass : Empty docstring
C : 21 , 4 : CarClass . get_weight : Empty docstring
W : 21 , 25 : CarClass . get_weight : Unused argument ‘this’
R : 21 , 4 : CarClass . get_weight : Method could be a function
R : 4 , 0 : CarClass : Too few public methods ( 1 / 2 )
Как мы видим, это очень помогло. Если мы добавим docstrings, мы можем снизить количество ошибок вдвое. Теперь мы готовы перейти к pyflakes!
Работаем с pyflakes
Проект pyflakes это часть чего-то, что называется Divmod Project. Pyflakes на самом деле не выполняет проверяемый код также, как и pylint. Вы можете установить pyflakes при помощи pip, easy_install, или из другого источника.
Данный сервис может предложить Вам персональные условия при заказе классов на посты и фото в Одноклассники. Приобретайте необходимый ресурс не только со скидками, но и с возможностью подобрать наилучшее качество и скорость поступления.