テストの作成

MicroPython のテストは tests/ のパスに配置されています。以下は主要なディレクトリと run-tests.py ランナースクリプトの一覧です:

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

テストを分類するために、いくつかのサブフォルダが維持されています。既存のフォルダまたは新しいフォルダに新しいファイルを作成することでテストを追加します。この tests フォルダの外にカスタムテストを作成することも可能であり、カスタムポートにはこれが推奨されます。

例えば、tests/unix/ サブディレクトリ内の print.py というファイルに以下のコードを追加します:

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 ファイルを提供できます。

テストを実行するもう 1 つの方法は、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 - MICROPY_MICROPYTHON 環境変数で指定される MicroPython の unix ポートを使用します (デフォルトはホストプラットフォームに応じて unix または windows ポートのいずれかの標準バリアントになります)

  • webassembly - MICROPY_MICROPYTHON_MJS 環境変数で指定される MicroPython の webassembly ポートを使用します (デフォルトは 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 - 実行する 1 つ以上のテストディレクトリを指定します

  • -i, --include REGEX - 正規表現パターンに一致するテストを含めます

  • -e, --exclude REGEX - 正規表現パターンに一致するテストを除外します

  • files - 実行する特定のテストファイル

実行オプション:

  • --emit <EMITTER> - MicroPython エミッター。EMITTER は bytecode または native を指定できます。デフォルト: bytecode

  • --via-mpy - 最初に .py ファイルを .mpy にコンパイルします

  • --heapsize - テスト用のヒープサイズを設定します

  • -j, --jobs N - 同時に実行するテストの数

--via-mpy の使用時に特定のバージョンの mpy-cross を使用するには、MICROPY_MPYCROSS 環境変数を設定します。

結果の管理:

  • -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