Написання тестів¶
Тести в MicroPython розташовані за шляхом tests/. Нижче наведено перелік ключових каталогів і скрипту запуску run-tests.py:
.
├── basics
├── extmod
├── float
├── micropython
├── run-tests.py
...
Існують підкаталоги для категоризації тестів. Щоб додати тест, створіть новий файл в одному з наявних каталогів або в новому каталозі. Також можна розміщувати власні тести поза цим каталогом тестів, що рекомендується для власного порту.
Наприклад, додайте наступний код у файл print.py у підкаталозі tests/unix/:
def print_one():
print(1)
print_one()
Якщо ви запустите тести, цей тест з’явиться у виводі:
$ cd ports/unix
$ make tests
skip unix/extra_coverage.py
pass unix/ffi_callback.py
pass unix/ffi_float.py
pass unix/ffi_float2.py
pass unix/print.py
pass unix/time.py
pass unix/time2.py
Тести виконуються шляхом порівняння виводу з тестового цільового об’єкта з виводом CPython. Тому будь-який тест має використовувати оператори print для відображення результатів.
Для тестів, які не можна порівняти з CPython (тобто специфічних для MicroPython), можна надати файл .py.exp, який використовуватиметься як еталон для порівняння.
Інший спосіб запуску тестів, що зручний при роботі з цільовими пристроями, відмінними від Unix-порту, такий:
$ cd tests
$ ./run-tests.py
Потім для запуску на платі:
$ ./run-tests.py -t /dev/ttyACM0
І для запуску лише певного набору тестів (наприклад, каталогу):
$ ./run-tests.py -d basics
$ ./run-tests.py float/builtin*.py
Використання run-tests.py¶
Скрипт run-tests.py підтримує кілька параметрів для налаштування виконання тестів:
Вибір цільового пристрою:
-t, --test-instance
Опція -t приймає такі значення для екземпляра тесту:
unix - використовує Unix-порт MicroPython, визначений змінною середовища MICROPY_MICROPYTHON (яка за замовчуванням вказує на стандартний варіант Unix- або Windows-порту залежно від платформи хоста)
webassembly - використовує WebAssembly-порт MicroPython, визначений змінною середовища MICROPY_MICROPYTHON_MJS (яка за замовчуванням вказує на стандартний варіант WebAssembly-порту)
port:<device> - підключається і використовує вказаний пристрій послідовного порту
a<n> - підключається і використовує /dev/ttyACM<n>
u<n> - підключається і використовує /dev/ttyUSB<n>
c<n> - підключається і використовує COM<n>
exec:<command> - виконує команду і приєднується до її stdin/stdout
execpty:<command> - виконує команду і приєднується до вказаного пристрою /dev/pts/<n>
<a>.<b>.<c>.<d> - підключається до вказаної IPv4-адреси
будь-що інше вказує на послідовний порт
Вибір тестів:
-d, --test-dirs- вказати один або більше каталогів тестів для запуску-i, --include REGEX- включити тести, що відповідають шаблону regex-e, --exclude REGEX- виключити тести, що відповідають шаблону regexfiles- конкретні файли тестів для запуску
Параметри виконання:
--emit <EMITTER>- емітер MicroPython; EMITTER може бути bytecode або native. За замовчуванням: bytecode--via-mpy- спочатку компілювати .py файли у .mpy--heapsize- задати розмір купи для тестів-j, --jobs N- кількість тестів, що запускаються одночасно
Задайте змінну середовища MICROPY_MPYCROSS для використання конкретної версії mpy-cross при використанні --via-mpy.
Управління результатами:
-r, --result-dir- каталог для результатів тестів. За замовчуванням: results/--print-failures- показати різницю невдалих тестів і вийти--clean-failures- видалити файли .exp та .out з попередньо невдалих тестів--run-failures- повторно запустити лише раніше невдалі тести
Приклади:
# Run only basic tests with native emitter
$ ./run-tests.py --emit native -d basics extmod
# Run tests excluding async functionality
$ ./run-tests.py -e async
# Run tests matching *_pep_*
$ ./run-tests.py -i *_pep_*
# Run specific test files in parallel
$ ./run-tests.py -j 4 basics/list*.py
# Test on a connected OpenMV Cam
$ ./run-tests.py -t /dev/ttyACM0
# or
$ ./run-tests.py -t a0
# Re-run only failed tests from previous run
$ ./run-tests.py --run-failures