シナリオ
--expect-text は1つの問いに答えます。この行はこれまでに出現したか? シナリオは残りの問いに答えます。これはランナーが順番に実行するステップを列挙したYAMLファイルで、プライマリボードのシミュレートされたクロック上で動作します。
フィールド名はWokwiのものなので、既存のWokwiシナリオはそのまま動作します。
name: uno-ready boots and blinksversion: 1steps: - wait-serial: READY - delay: 600ms - expect-pin: part-id: uno pin: 13 expected: 1velxio-cli run --scenario scenario.yaml .最後のステップが成功すると実行は成功し、最初に失敗したステップで失敗します。各ステップは実行されるたびに報告されます:
ok wait-serial "READY" at 0.004 sok delay 600 ms at 0.604 sok expect-pin uno:13 expected 1 at 0.604 sPASS in 0.60 s simulated (2.9 s wall) · billed 1 s · exit 0| step | fields | 動作 |
|---|---|---|
delay |
500ms、2s、100us; 数値のみの場合はミリ秒 |
シミュレートされたクロックが t0 + n に達するまで待機する |
wait-serial |
文字列、最大512バイト | 前回の wait-serial 以降に受信したシリアルデータに対する、バイト完全一致の部分文字列マッチ。先に予算が尽きた場合、実行は timeout で終了する |
write-serial |
UTF-8文字列、またはバイトのリスト 0..255 |
プライマリボードのUARTに書き込む |
expect-pin |
part-id、pin、expected (0/1、high/low、true/false; value も受け付ける) |
ピンを即座に1回読み取る。不一致の場合は実行が失敗し、実際に読み取ったレベルを報告する |
set-control |
part-id、control、value (数値、文字列、または真偽値) |
ボタンの pressed はボタンを押すか離す。その他のコントロールはパーツのセンサーコントロールと属性。不明なコントロールは実行を失敗させ、そのパーツが持つコントロールを一覧表示する |
take-screenshot |
part-id、save-to および/または compare-with、tolerance |
実行のその時点でそのパーツのPNGをキャプチャする |
どのステップも、そのキーと並べて name: を持つことができ、これは純粋にログ用です。
制限: 1回の実行につき200ステップ、20スクリーンショットまで。
すべてがシミュレートされた時間
Section titled “すべてがシミュレートされた時間”delay: 600ms はゲストのクロックの600ミリ秒であり、ウォールクロックではありません。同じシナリオは、負荷の高いランナーでもアイドル状態のランナーでも同じシミュレート時間を要し、これが結果を再現可能にします - そして、これが課金対象です。
入力を駆動する
Section titled “入力を駆動する”steps: - wait-serial: READY - set-control: part-id: btn1 control: pressed value: 1 - delay: 50ms - set-control: part-id: btn1 control: pressed value: 0 - wait-serial: "pressed"part-id は diagram.json (または .vlx) のidであり、内部のものではありません。存在しないパーツを指定したステップは、実行開始前に scenario_part_missing と終了コード2で拒否されます - 課金はありません。
バイトは write-serial で逆方向に送られ、0x7f を超える値も含めてバイト完全一致で返ってきます:
steps: - wait-serial: ECHO READY - write-serial: "hi\n" - wait-serial: "hi"スクリーンショット
Section titled “スクリーンショット”- take-screenshot: part-id: oled1 save-to: shots/oled.pngそのパーツのPNGは実行のその時点でキャプチャされ、プロジェクトディレクトリを基準に解決された save-to に書き込まれます。唯一の期待がスクリーンショットである実行は、最後のスクリーンショットが撮影されると成功します。
ステップになるフラグ
Section titled “ステップになるフラグ”ファイルなしで単純なケースを表現でき、ファイルと組み合わせることもできます:
| flag | 相当するもの |
|---|---|
--expect-text X |
最後の wait-serial X |
--screenshot-part P --screenshot-time T |
delay T の後に take-screenshot P |
--fail-text Y |
ステップではない: Y は実行全体を通してすべてのボードのすべてのシリアルチャンクで監視され、出現した瞬間に実行を failed で終了させる |
ボードへの入力
Section titled “ボードへの入力”--interactive は標準入力をプライマリボードのシリアルポートに転送し、20ミリ秒ごとに合体させます。これはシナリオと併用でき、両方が同じUARTに到着順で書き込みます。標準入力を閉じると入力が終了するのであって、実行が終了するのではありません - それは予算またはシナリオが行います。
まだサポートされていないもの
Section titled “まだサポートされていないもの”- タッチステップ (
touch-press、touch-move、touch-release)。CLIはこれらをスキップするのではなく、リント時に拒否します。 - スクリーンショット比較、上記のとおり。
- CI実行におけるカスタムチップ: 設定内の
[[chip]]はfeature_unsupportedで拒否されます。
各失敗がジョブに何を返すかについては終了コードを、シナリオがデフォルトでプロジェクトにどのように添付されるかについてはvelxio.tomlを参照してください。