Глава 13. Комплект тестов
Содержание
CPython обладает устойчивым комплектом тестирования, охватывающим собственно ядро интерпретатора, его стандартную библиотеку , имеющиеся
инструменты и сам дистрибутив для Windows, Linux и macOS. Он располагается в
Lib/test
и написан в основном на Python. Весь комплект тестирования
является пакетом Python, а потому вы можете исполнить его применяя тот интерпретатор Python, который вы скомпилировали.
В Windows воспользуйтесь сценарием rt.bat
внутри папки
PCBuild
. Например, вот как запустить быстрый режим для конфигурации с отладкой в архитектуре x64:
> cd PCbuild
> rt.bat -q -d -x64
== CPython 3.9
== Windows-10-10.0.17134-SP0 little-endian
== cwd: C:\repos\cpython\build\test_python_2784
== CPU count: 2
== encodings: locale=cp1252, FS=utf-8
Run tests sequentially
0:00:00 [ 1/420] test_grammar
0:00:00 [ 2/420] test_opcodes
0:00:00 [ 3/420] test_dict
0:00:00 [ 4/420] test_builtin
Для запуска возвратного комплекса тестов для конфигурации выпуска (Release), удалите флаг -d
из
командной строки.
В Linux и macOS исполните цель test make
для компиляции и запустите тесты:
$ make test
== CPython 3.9
== macOS-10.14.3-x86_64-i386-64bit little-endian
== cwd: /Users/anthonyshaw/cpython/build/test_python_23399
== CPU count: 4
== encodings: locale=UTF-8, FS=utf-8
0:00:00 load avg: 2.14 [ 1/420] test_opcodes passed
0:00:00 load avg: 2.14 [ 2/420] test_grammar passed
В качестве альтернативы воспользуйтесь путём скомпилированного исполняемого файла python
или
python.exe
с пакетом python
:
$ ./python -m test
== CPython 3.9
== macOS-10.14.3-x86_64-i386-64bit little-endian
== cwd: /Users/anthonyshaw/cpython/build/test_python_23399
== CPU count: 4
== encodings: locale=UTF-8, FS=utf-8
0:00:00 load avg: 2.14 [ 1/420] test_opcodes passed
0:00:00 load avg: 2.14 [ 2/420] test_grammar passed
...
Вот дополнительные цели make
для тестов:
Цель | Назначение |
---|---|
|
Запустить базовый набор тестов возврата |
|
Выполнить полный комплект тестов дважды - один раз без файлов |
|
Исполнить более быстрое возвратное тестирование, исключая те тесты, которые занимают много времени |
|
Запуск комплекта тестов для osX для обеих архитектур в универсальной сборке |
|
Скомпилировать и запустить тесты с |
|
Создать отчёты HTML областей действия |
Некоторые тесты требуют определённые флаги, либо они будут пропущены. Например, многие из тестов IDLE требуют GUI.
Чтобы просмотреть список комплектов тестов в вашей конфигурации воспользуйтесь флагом --list-tests
:
./python -m test --list-tests
test_grammar
test_opcodes
test_dict
test_builtin
test_exceptions
...
Вы можете исполнять особые тесты предоставляя свой комплект тестов в качестве первого аргумента.
Вот некий пример для Linux и macOS:
$ ./python -m test test_webbrowser
Run tests sequentially
0:00:00 load avg: 2.74 [1/1] test_webbrowser
== Tests result: SUCCESS ==
1 test OK.
Total duration: 117 ms
Tests result: SUCCESS
Вот пример в Windows:
> rt.bat -q -d -x64 test_webbrowser
Вы также можете просмотреть подробный список исполненных тестов совместно с их результатами, воспользовавшись аргументом
-v
:
$ ./python -m test test_webbrowser -v
== CPython 3.9
== macOS-10.14.3-x86_64-i386-64bit little-endian
== cwd: /Users/anthonyshaw/cpython/build/test_python_24562
== CPU count: 4
== encodings: locale=UTF-8, FS=utf-8
Run tests sequentially
0:00:00 load avg: 2.36 [1/1] test_webbrowser
test_open (test.test_webbrowser.BackgroundBrowserCommandTest) ...ok
test_register (test.test_webbrowser.BrowserRegistrationTest) ...ok
test_register_default (test.test_webbrowser.BrowserRegistrationTest) ...ok
test_register_preferred (test.test_webbrowser.BrowserRegistrationTest) ...ok
test_open (test.test_webbrowser.ChromeCommandTest) ...ok
test_open_new (test.test_webbrowser.ChromeCommandTest) ...ok
...
test_open_with_autoraise_false (test.test_webbrowser.OperaCommandTest) ...ok
----------------------------------------------------------------------
Ran 34 tests in 0.056s
OK (skipped=2)
== Tests result: SUCCESS ==
1 test OK.
Total duration: 134 ms
Tests result: SUCCESS
Понимание того как применять свой комплект тестов и проверять полученное состояние той версии, которую вы скомпилировали является очень важным когда вы решили внести изменения в CPython. Прежде чем приступить к внесению изменений, вам надлежит провести тестирование полного комплекта и убедиться что всё прошло.
Для расширений C или модулей Python вы можете импортировать их и провести тестирование применяя модуль unittest
.
Тесты собираются по модулям или пакетам.
Например, тип строк Unicode Python обладает тестами в Lib.test.test_unicode.py
.
Пакет asyncio
имеет тесты в
Lib/test/test_asyncio
.
![]() | Смотри также |
---|---|
Если вы новичок в отношении модуля |
Вот некое извлечение из класса UnicodeTest
:
class UnicodeTest(string_tests.CommonTest,
string_tests.MixinStrUnicodeUserStringTest,
string_tests.MixinStrUnicodeTest,
unittest.TestCase):
...
def test_casefold(self):
self.assertEqual('hello'.casefold(), 'hello')
self.assertEqual('hELlo'.casefold(), 'hello')
self.assertEqual('ß'.casefold(), 'ss')
self.assertEqual('fi'.casefold(), 'fi')
Вы можете расширить свой оператор почти- равенства, который вы реализовали в более ранних главах для строк Unicode Python, добавив
новый метод тестирования внутри имеющегося класса UnicodeTest
:
def test_almost_equals(self):
self.assertTrue('hello' ~= 'hello')
self.assertTrue('hELlo' ~= 'hello')
self.assertFalse('hELlo!' ~= 'hello')
Вы можете исполнить конкретно этот модуль тестирования в Windows:
> rt.bat -q -d -x64 test_unicode
Или же вы можете запустить его в macOS или Linux:
$ ./python -m test test_unicode -v
Импортировав модуль test.support.script_helper
вы можете получить доступ к вспомогательным
функциям для тестирования Python времени исполнения:
-
assert_python_ok(*args, **env_vars)
исполняет некий процесс Python с предписанными аргументами и вернуть некий кортеж (код возврата,stdout
,stderr
). -
assert_python_failure(*args, **env_vars)
аналогиченassert_python_ok()
, но декларирует что он испытал неудачу. -
make_script(script_dir, script_basename, source)
изготовляет некий сценарий вscript_dir
сscript_basename
иsource
, затем возвращает значение пути этого сценария. Это полезно в сочетании сassert_python_ok()
илиassert_python_failure()
.
Если вы желаете создать некий тест, который будет пропускаться когда этот модуль не был собран, тогда вы можете воспользоваться функцией
утилиты test.support.import_module()
. Это возбудит SkipTest
и
выдаст сигнал исполнителю теста пропустить данный пакет тестов. Вот некий пример:
import test.support
_multiprocessing = test.support.import_module('_multiprocessing')
# Your tests...
Комплект возвратных тестов Python полон тестов на странные граничные тесты, исправления ошибок и новых функциональных возможностей за два десятилетия. Помимо этого ещё имеется большая часть стандартной библиотеки CPython, которая практически не тестируется. Если вы желаете принять участие в самом проекте CPython, тогда написание или расширение тестов элементов это отличное место для начала.
Если вы намерены изменять какую бы то ни было часть CPython или добавить дополнительную функциональность, тогда вам придётся написать или расширить тесты в качестве части вашей заплатки.
-
Сетевые протоколы для профессионалов безопасности, Йорам Орзач, Дипаншу Ханна, Packt Publishing, октябрь 2022
-
JavaScript для хакеров. Научитесь думать как хакер, Гарет Хейс, Leanpub, декабрь 2022
-
Как заниматься взломом словно легенда. Прорываемся в Windows, Спарк Флоу, No Starch Press, октябрь 2022
-
Управление оперативной памятью в реляционных системах баз данных, Педро Мехия Альварес, Марсело Леон Айяла, Сусана Ортега Сиснерос, Springer, август 2022
-
Атакующий код запуска оболочки с нуля, Ришалин Пиллэй, Packt Publishing, май 2022
-
Linux подсистема Windows (WSL) для профессионалов, Хайден Барнс, Apress, июнь 2021
-
Внутреннее устройство CPython, Энтони Шоу, Real Python, январь 2021
-
Контейнеры Linux и Виртуализация: с точки зрения ядра, Шашанк Мохан Джейн, Apress, октябрь 2020
-
Изучаем подсистемы Windows для Linux, Прэйтик Сингх, Apress, сентябрь 2020
-
Всё что требуется для RabbitMQ, 2е изд., Ловайса Йохансон, Дэйвид Доссо, Packt Publishing, август 2020
-
Практика загрузки. Изучение процесса загрузки Linux, Windows и Unix, Йогеш Бабар, Apress, июль 2020
-
Распределённые системы для практиков, Даймос Раптис, Leanpub, май 2020
-
Практическая автоматизация предприятия в Linux, Джеймс Фриман, Packt Publishing, январь 2020, Действенное выполнение крупномасштабной автоматизации инфраструктуры Linux с применением Ansible.
-
Внутреннее устройство баз данных, Алекс Петров, O`Reilly Media, Inc., октябрь 2019
-
Книга рецептов параллельного программирования Python. 2е изд., Джанкарло Закконе, Packt Publishing, сентябрь 2019
-
Полное руководство Ansible. 3е изд., Джеймс Фриман и Джесс Китинг, Packt Publishing, март 2019
-
Книга рецептов NGINX Дерек ДеДжонге, O’Reilly Media, Inc, ноябрь 2018
-
Полное руководство Ceph, 2е изд. Ник Фиск, Packt Publishing, февраль 2019
-
Docker для разработчиков Rails Роб Айзенберг, The Pragmatic Programmers, LLC., февраль 2019, с дополнениями по настройкам Django и 100Gb IB
-
Глава 11. SQL Server и контейнеры (включая Kubernetes) Боб Вордс, "Профессиональный SQL Server поверх Linux", Apress, октябрь 2018
-
Полное руководство параллельного программирования на Python Куан Нгуен, Packt Publishing, ноябрь 2018
-
Asyncio в Python 3 Цалеб Хаттингх, O’Reilly Media, Inc, март 2018
-
RabbitMQ для профессионалов Гайвин Рой, Manning Publications, сентябрь 2017
-
Proxmox. Полное руководство. 3е изд Васим Ахмед, Packt Publishing, ноябрь 2017
-
Книга рецептов Ceph, 2е изд Викхайят Умрао,Мишель Хаккет,Каран Сингх, Packt Publishing, ноябрь 2017
-
Изучаем Ceph, 2е изд., Энтони Д`Атри, Вайбхав Бхембре, Каран Сингх, Packt Publishing, октябрь 2017
-
Книга рецептов виртуализации KVM Константин Иванов, Packt Publishing, июнь 2017
-
Полное руководство работы с сетями на Python. Эрик Чоу, Июнь 2017
-
Контейнеризация при помощи LXC Константин Иванов, Packt Publishing, март 2017
-
Proxmox. Полное руководство. 2е изд., Васим Ахмед, Packt Publishing, май 2016
-
Книга рецептов Ceph Каран Сингх, Packt Publishing, февраль 2016
-
Полная виртуализация. Базовая коммерческая редакция: Proxmox-freeNAS-Zentyal-pfSense. Ли Р. Сюрбер, февраль 2016
-
Zabbix. Полное руководство. 2е изд., Андреа Далле Ваккье, сентябрь 2015
-
Книга рецептов Proxmox. Главы 1-6, Дополнения: Преобразование OpenVZ в LXC, Организация ограждения Васим Ахмед, Packt Publishing, август 2015
-
Изучаем Ceph Каран Сингх, Packt Publishing, январь 2015
Дополнительные ссылки:
Перевод: Copyright © 2016-2021 ![]() All rights reserved. Ссылки обязательны (Refs and links are obligatory). | http://www.mdl.ru портфолио SD DC |
HPE DL360 G10 since 4300$ |