Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Внутри CPython гид по интерпретатору Python.pdf
Скачиваний:
6
Добавлен:
07.04.2024
Размер:
8.59 Mб
Скачать

Набор тестов

CPython содержит надежный набор тестов для базового интерпретатора, инструментов, стандартной библиотеки и дистрибутивов для Windows, Linux и macOS. Они находятся в каталоге Lib test и написаны большей частью на Python.

Полный набор тестов находится в пакете Python, и его можно запустить с помощью только что скомпилированного интерпретатора Python.

ЗАПУСК НАБОРА ТЕСТОВ В WINDOWS

В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

...

Чтобы выполнить набор регрессионных тестов для рабочей конфигурации, удалите флаг -d из командной строки.

Книги для программистов: https://t.me/booksforits

294    Набор тестов

ЗАПУСК НАБОРА ТЕСТОВ В LINUX ИЛИ MACOS

В Linux и macOS выполните команду make test, чтобы скомпилировать и запустить тесты:

$ 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 с пакетом test:

$ ./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-цели для тестирования:

ЦЕЛЬ

НАЗНАЧЕНИЕ

test

Выполнение основного набора регрессионных тестов

testall

Двукратное выполнение полного набора тестов: один раз без

 

файлов .pyc и один — с ними

quicktest

Выполнение набора более быстрых регрессионных тестов с ис-

 

ключением тестов, занимающих много времени

testuniversal

Выполнение набора тестов для обеих архитектур в универсаль-

 

ной сборке для OSX

coverage

Компиляция и запуск тестов с gcov

coverage-lcov

Создание HTML-отчетов о покрытии

Книги для программистов: https://t.me/booksforits

Запуск конкретных тестов    295

ФЛАГИ ТЕСТИРОВАНИЯ

Для некоторых тестов нужно установить специальные флаги, иначе тесты пропускаются. Например, многим тестам 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

Книги для программистов: https://t.me/booksforits

296    Набор тестов

==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. Тесты группируются по модулям или пакетам.

Например, тесты для типа строки Юникода в Python находятся в файле

Lib test test_unicode.py, а для пакета asyncio — в Lib test test_asyncio.

СМ. ТАКЖЕ

Если увас еще нет опыта работы сunittest или тестированием вPython,об­ ратитеськстатье«GettingStartedWithTestinginPython»1 насайтеRealPython.

1 https://realpython.com/python-testing/.

Книги для программистов: https://t.me/booksforits