Test yazma

MicroPython’daki testler tests/ yolunda bulunur. Aşağıda anahtar dizinlerin ve run-tests.py çalıştırıcı betiğinin bir listesi verilmiştir:

.
 ├── basics
 ├── extmod
 ├── float
 ├── micropython
 ├── run-tests.py
 ...

Testleri kategorilere ayırmak için bakımı yapılan alt klasörler vardır. Mevcut klasörlerden birinde ya da yeni bir klasörde yeni bir dosya oluşturarak bir test ekleyin. Bu tests klasörünün dışında özel testler yapmak da mümkündür; bu, özel bir port için önerilir.

Örneğin, tests/unix/ alt dizininde bir print.py dosyasına aşağıdaki kodu ekleyin:

def print_one():
    print(1)

print_one()

Testlerinizi çalıştırırsanız, bu test, test çıktısında görünmelidir:

$ 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

Testler, test hedefinden gelen çıktı ile CPython’dan gelen çıktının karşılaştırılmasıyla çalıştırılır. Bu nedenle herhangi bir test, test sonuçlarını belirtmek için print ifadeleri kullanmalıdır.

CPython ile karşılaştırılamayan testler için (yani micropython’a özgü işlevsellik), karşılaştırma için referans olarak kullanılacak bir .py.exp dosyası sağlayabilirsiniz.

Testleri çalıştırmanın, Unix port’u dışındaki hedeflerde çalıştırırken kullanışlı olan diğer yolu şudur:

$ cd tests
$ ./run-tests.py

Ardından bir kart üzerinde çalıştırmak için:

$ ./run-tests.py -t /dev/ttyACM0

Ve yalnızca belirli bir test kümesini (örneğin bir dizini) çalıştırmak için:

$ ./run-tests.py -d basics
$ ./run-tests.py float/builtin*.py

run-tests.py kullanımı

run-tests.py betiği, test yürütmesini özelleştirmek için çeşitli parametreleri destekler:

Hedef ve Cihaz Seçimi:

  • -t, --test-instance

-t seçeneği, test örneği için aşağıdakileri kabul eder:

  • unix - MICROPY_MICROPYTHON ortam değişkeniyle belirtilen MicroPython’un unix port’unu kullanır (varsayılan olarak, ana platforma bağlı olarak unix veya windows portlarından birinin standart varyantıdır)

  • webassembly - MICROPY_MICROPYTHON_MJS ortam değişkeniyle belirtilen MicroPython’un webassembly port’unu kullanır (varsayılan olarak webassembly port’unun standart varyantıdır)

  • port:<device> - verilen seri port cihazına bağlanır ve onu kullanır

  • a<n> - /dev/ttyACM<n> cihazına bağlanır ve onu kullanır

  • u<n> - /dev/ttyUSB<n> cihazına bağlanır ve onu kullanır

  • c<n> - COM<n> cihazına bağlanır ve onu kullanır

  • exec:<command> - bir komut çalıştırır ve onun stdin/stdout’una bağlanır

  • execpty:<command> - bir komut çalıştırır ve yazdırılan /dev/pts/<n> cihazına bağlanır

  • <a>.<b>.<c>.<d> - verilen IPv4 adresine bağlanır

  • başka herhangi bir şey bir seri port belirtir

Test Seçimi:

  • -d, --test-dirs - Çalıştırılacak bir veya daha fazla test dizini belirtir

  • -i, --include REGEX - Regex desenine uyan testleri dahil eder

  • -e, --exclude REGEX - Regex desenine uyan testleri hariç tutar

  • files - Çalıştırılacak belirli test dosyaları

Yürütme Seçenekleri:

  • --emit <EMITTER> - MicroPython yayıcısı (emitter), EMITTER bytecode veya native olabilir. Varsayılan: bytecode

  • --via-mpy - .py dosyalarını önce .mpy biçimine derler

  • --heapsize - Testler için yığın (heap) boyutunu ayarlar

  • -j, --jobs N - Eşzamanlı çalıştırılacak test sayısı

--via-mpy kullanırken mpy-cross‘un belirli bir sürümünü kullanmak için MICROPY_MPYCROSS ortam değişkenini ayarlayın.

Sonuç Yönetimi:

  • -r, --result-dir - Test sonuçları için dizin. Varsayılan: results/

  • --print-failures - Başarısız testlerin farkını (diff) gösterir ve çıkar

  • --clean-failures - Önceki başarısız testlerden kalan .exp ve .out dosyalarını siler

  • --run-failures - Yalnızca önceden başarısız olan testleri yeniden çalıştırır

Örnekler:

# 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