Pisanie testów¶
Testy w MicroPython znajdują się w ścieżce tests/. Poniżej znajduje się lista kluczowych katalogów oraz skryptu uruchamiającego run-tests.py:
.
├── basics
├── extmod
├── float
├── micropython
├── run-tests.py
...
Istnieją podfoldery utrzymywane w celu kategoryzacji testów. Dodaj test, tworząc nowy plik w jednym z istniejących folderów lub w nowym folderze. Możliwe jest również tworzenie własnych testów poza tym folderem tests, co byłoby zalecane w przypadku własnego portu.
Na przykład dodaj następujący kod w pliku print.py w podkatalogu tests/unix/:
def print_one():
print(1)
print_one()
Jeśli uruchomisz swoje testy, ten test powinien pojawić się w wynikach testów:
$ 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
Testy są uruchamiane poprzez porównanie wyniku z celu testowego z wynikiem z CPython. Dlatego każdy test powinien używać instrukcji print do wskazania wyników testu.
Dla testów, których nie można porównać z CPython (tzn. funkcjonalności specyficznej dla micropython), możesz dostarczyć plik .py.exp, który zostanie użyty jako wzorzec do porównania.
Innym sposobem uruchamiania testów, który jest przydatny przy uruchamianiu na celach innych niż port Unix, jest:
$ cd tests
$ ./run-tests.py
Następnie aby uruchomić na płytce:
$ ./run-tests.py -t /dev/ttyACM0
Aby uruchomić tylko określony zestaw testów (np. katalog):
$ ./run-tests.py -d basics
$ ./run-tests.py float/builtin*.py
Korzystanie z run-tests.py¶
Skrypt run-tests.py obsługuje kilka parametrów umożliwiających dostosowanie wykonywania testów:
Wybór celu i urządzenia:
-t, --test-instance
Opcja -t akceptuje następujące wartości jako instancję testową:
unix - użyj portu unix MicroPython, określonego przez zmienną środowiskową MICROPY_MICROPYTHON (która domyślnie przyjmuje standardowy wariant portu unix lub windows, w zależności od platformy hosta)
webassembly - użyj portu webassembly MicroPython, określonego przez zmienną środowiskową MICROPY_MICROPYTHON_MJS (która domyślnie przyjmuje standardowy wariant portu webassembly)
port:<device> - połącz się z podanym urządzeniem portu szeregowego i użyj go
a<n> - połącz się z /dev/ttyACM<n> i użyj go
u<n> - połącz się z /dev/ttyUSB<n> i użyj go
c<n> - połącz się z COM<n> i użyj go
exec:<command> - wykonaj polecenie i dołącz do jego stdin/stdout
execpty:<command> - wykonaj polecenie i dołącz do wypisanego urządzenia /dev/pts/<n>
<a>.<b>.<c>.<d> - połącz się z podanym adresem IPv4
wszystko inne określa port szeregowy
Wybór testów:
-d, --test-dirs- Określ jeden lub więcej katalogów testów do uruchomienia-i, --include REGEX- Uwzględnij testy pasujące do wzorca regex-e, --exclude REGEX- Wyklucz testy pasujące do wzorca regexfiles- Konkretne pliki testów do uruchomienia
Opcje wykonywania:
--emit <EMITTER>- Emiter MicroPython, EMITTER może być bytecode lub native. Domyślnie: bytecode--via-mpy- Najpierw skompiluj pliki .py do .mpy--heapsize- Ustaw rozmiar sterty dla testów-j, --jobs N- Liczba testów uruchamianych jednocześnie
Ustaw zmienną środowiskową MICROPY_MPYCROSS, aby użyć konkretnej wersji mpy-cross podczas korzystania z --via-mpy.
Zarządzanie wynikami:
-r, --result-dir- Katalog na wyniki testów. Domyślnie: results/--print-failures- Pokaż diff testów zakończonych niepowodzeniem i zakończ--clean-failures- Usuń pliki .exp i .out z poprzednich testów zakończonych niepowodzeniem--run-failures- Uruchom ponownie tylko wcześniej nieudane testy
Przykłady:
# 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