Menulis pengujian¶
Pengujian dalam MicroPython terletak di jalur tests/. Berikut adalah daftar direktori utama dan skrip runner run-tests.py:
.
├── basics
├── extmod
├── float
├── micropython
├── run-tests.py
...
Ada subfolder yang dikelola untuk mengkategorikan pengujian. Tambahkan pengujian dengan membuat file baru di salah satu folder yang ada atau di folder baru. Anda juga dapat membuat pengujian kustom di luar folder tests ini, yang direkomendasikan untuk port kustom.
Misalnya, tambahkan kode berikut dalam file print.py di subdirektori tests/unix/:
def print_one():
print(1)
print_one()
Jika Anda menjalankan pengujian, pengujian ini seharusnya muncul dalam output pengujian:
$ 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
Pengujian dijalankan dengan membandingkan output dari target pengujian dengan output dari CPython. Jadi setiap pengujian harus menggunakan pernyataan print untuk menunjukkan hasil pengujian.
Untuk pengujian yang tidak dapat dibandingkan dengan CPython (yaitu fungsionalitas khusus micropython), Anda dapat menyediakan file .py.exp yang akan digunakan sebagai acuan untuk perbandingan.
Cara lain untuk menjalankan pengujian, yang berguna saat berjalan pada target selain port Unix, adalah:
$ cd tests
$ ./run-tests.py
Kemudian untuk berjalan pada sebuah board:
$ ./run-tests.py -t /dev/ttyACM0
Dan untuk hanya menjalankan kumpulan pengujian tertentu (misalnya sebuah direktori):
$ ./run-tests.py -d basics
$ ./run-tests.py float/builtin*.py
Menggunakan run-tests.py¶
Skrip run-tests.py mendukung beberapa parameter untuk menyesuaikan eksekusi pengujian:
Pemilihan Target dan Perangkat:
-t, --test-instance
Opsi -t menerima nilai berikut untuk instance pengujian:
unix - gunakan port unix MicroPython, ditentukan oleh variabel lingkungan MICROPY_MICROPYTHON (yang default-nya adalah varian standar dari port unix atau windows, tergantung pada platform host)
webassembly - gunakan port webassembly MicroPython, ditentukan oleh variabel lingkungan MICROPY_MICROPYTHON_MJS (yang default-nya adalah varian standar dari port webassembly)
port:<device> - hubungkan ke dan gunakan perangkat port serial yang diberikan
a<n> - hubungkan ke dan gunakan /dev/ttyACM<n>
u<n> - hubungkan ke dan gunakan /dev/ttyUSB<n>
c<n> - hubungkan ke dan gunakan COM<n>
exec:<command> - jalankan sebuah perintah dan hubungkan ke stdin/stdout-nya
execpty:<command> - jalankan sebuah perintah dan hubungkan ke perangkat /dev/pts/<n> yang dicetak
<a>.<b>.<c>.<d> - hubungkan ke alamat IPv4 yang diberikan
apa pun selain itu menentukan port serial
Pemilihan Pengujian:
-d, --test-dirs- Tentukan satu atau lebih direktori pengujian untuk dijalankan-i, --include REGEX- Sertakan pengujian yang cocok dengan pola regex-e, --exclude REGEX- Kecualikan pengujian yang cocok dengan pola regexfiles- File pengujian spesifik untuk dijalankan
Opsi Eksekusi:
--emit <EMITTER>- Emitter MicroPython, EMITTER bisa berupa bytecode atau native. Default: bytecode--via-mpy- Kompilasi file .py ke .mpy terlebih dahulu--heapsize- Atur ukuran heap untuk pengujian-j, --jobs N- Jumlah pengujian yang dijalankan secara bersamaan
Atur variabel lingkungan MICROPY_MPYCROSS untuk menggunakan versi mpy-cross tertentu saat menggunakan --via-mpy.
Manajemen Hasil:
-r, --result-dir- Direktori untuk hasil pengujian. Default: results/--print-failures- Tampilkan diff dari pengujian yang gagal dan keluar--clean-failures- Hapus file .exp dan .out dari pengujian yang sebelumnya gagal--run-failures- Jalankan ulang hanya pengujian yang sebelumnya gagal
Contoh:
# 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