Viết kiểm thử

Các kiểm thử trong MicroPython nằm ở đường dẫn tests/. Sau đây là danh sách các thư mục chính và tập lệnh chạy run-tests.py:

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

Có các thư mục con được duy trì để phân loại các kiểm thử. Thêm một kiểm thử bằng cách tạo một tệp mới trong một trong các thư mục hiện có hoặc trong một thư mục mới. Cũng có thể tạo các kiểm thử tùy chỉnh bên ngoài thư mục tests này, điều này được khuyến nghị cho một cổng tùy chỉnh.

Ví dụ, thêm đoạn mã sau vào một tệp print.py trong thư mục con tests/unix/:

def print_one():
    print(1)

print_one()

Nếu bạn chạy các kiểm thử của mình, kiểm thử này sẽ xuất hiện trong kết quả kiểm thử:

$ 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

Các kiểm thử được chạy bằng cách so sánh đầu ra từ đích kiểm thử với đầu ra từ CPython. Vì vậy, bất kỳ kiểm thử nào cũng nên sử dụng lệnh print để chỉ ra kết quả kiểm thử.

Đối với các kiểm thử không thể so sánh với CPython (tức là chức năng đặc thù của micropython), bạn có thể cung cấp một tệp .py.exp sẽ được dùng làm chuẩn để so sánh.

Cách khác để chạy kiểm thử, hữu ích khi chạy trên các đích khác ngoài cổng Unix, là:

$ cd tests
$ ./run-tests.py

Sau đó để chạy trên một board:

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

Và để chỉ chạy một tập hợp kiểm thử nhất định (ví dụ một thư mục):

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

Sử dụng run-tests.py

Script run-tests.py hỗ trợ nhiều tham số để tùy chỉnh việc thực thi kiểm thử:

Lựa chọn đích và thiết bị:

  • -t, --test-instance

Tùy chọn -t chấp nhận các giá trị sau cho instance kiểm thử:

  • unix - sử dụng cổng unix của MicroPython, được chỉ định bởi biến môi trường MICROPY_MICROPYTHON (mặc định là biến thể chuẩn của cổng unix hoặc windows, tùy thuộc vào nền tảng máy chủ)

  • webassembly - sử dụng cổng webassembly của MicroPython, được chỉ định bởi biến môi trường MICROPY_MICROPYTHON_MJS (mặc định là biến thể chuẩn của cổng webassembly)

  • port:<device> - kết nối đến và sử dụng thiết bị cổng nối tiếp đã cho

  • a<n> - kết nối đến và sử dụng /dev/ttyACM<n>

  • u<n> - kết nối đến và sử dụng /dev/ttyUSB<n>

  • c<n> - kết nối đến và sử dụng COM<n>

  • exec:<command> - thực thi một lệnh và gắn vào stdin/stdout của nó

  • execpty:<command> - thực thi một lệnh và gắn vào thiết bị /dev/pts/<n> được in ra

  • <a>.<b>.<c>.<d> - kết nối đến địa chỉ IPv4 đã cho

  • bất kỳ thứ gì khác đều chỉ định một cổng nối tiếp

Lựa chọn kiểm thử:

  • -d, --test-dirs - Chỉ định một hoặc nhiều thư mục kiểm thử để chạy

  • -i, --include REGEX - Bao gồm các kiểm thử khớp với mẫu regex

  • -e, --exclude REGEX - Loại trừ các kiểm thử khớp với mẫu regex

  • files - Các tệp kiểm thử cụ thể để chạy

Tùy chọn thực thi:

  • --emit <EMITTER> - Bộ phát MicroPython, EMITTER có thể là bytecode hoặc native. Mặc định: bytecode

  • --via-mpy - Biên dịch các tệp .py thành .mpy trước

  • --heapsize - Đặt kích thước heap cho các kiểm thử

  • -j, --jobs N - Số lượng kiểm thử chạy đồng thời

Đặt biến môi trường MICROPY_MPYCROSS để sử dụng phiên bản cụ thể của mpy-cross khi dùng --via-mpy.

Quản lý kết quả:

  • -r, --result-dir - Thư mục cho kết quả kiểm thử. Mặc định: results/

  • --print-failures - Hiển thị diff của các kiểm thử thất bại và thoát

  • --clean-failures - Xóa các tệp .exp và .out từ các kiểm thử thất bại trước đó

  • --run-failures - Chỉ chạy lại các kiểm thử đã thất bại trước đó

Ví dụ:

# 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