コンテンツにスキップ

シナリオ

--expect-text は1つの問いに答えます。この行はこれまでに出現したか? シナリオは残りの問いに答えます。これはランナーが順番に実行するステップを列挙したYAMLファイルで、プライマリボードのシミュレートされたクロック上で動作します。

フィールド名はWokwiのものなので、既存のWokwiシナリオはそのまま動作します。

scenario.yaml
name: uno-ready boots and blinks
version: 1
steps:
- wait-serial: READY
- delay: 600ms
- expect-pin:
part-id: uno
pin: 13
expected: 1
ターミナルウィンドウ
velxio-cli run --scenario scenario.yaml .

最後のステップが成功すると実行は成功し、最初に失敗したステップで失敗します。各ステップは実行されるたびに報告されます:

ok wait-serial "READY" at 0.004 s
ok delay 600 ms at 0.604 s
ok expect-pin uno:13 expected 1 at 0.604 s
PASS 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ミリ秒であり、ウォールクロックではありません。同じシナリオは、負荷の高いランナーでもアイドル状態のランナーでも同じシミュレート時間を要し、これが結果を再現可能にします - そして、これが課金対象です。

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"
- take-screenshot:
part-id: oled1
save-to: shots/oled.png

そのパーツのPNGは実行のその時点でキャプチャされ、プロジェクトディレクトリを基準に解決された save-to に書き込まれます。唯一の期待がスクリーンショットである実行は、最後のスクリーンショットが撮影されると成功します。

ファイルなしで単純なケースを表現でき、ファイルと組み合わせることもできます:

flag 相当するもの
--expect-text X 最後の wait-serial X
--screenshot-part P --screenshot-time T delay T の後に take-screenshot P
--fail-text Y ステップではない: Y は実行全体を通してすべてのボードのすべてのシリアルチャンクで監視され、出現した瞬間に実行を failed で終了させる

--interactive は標準入力をプライマリボードのシリアルポートに転送し、20ミリ秒ごとに合体させます。これはシナリオと併用でき、両方が同じUARTに到着順で書き込みます。標準入力を閉じると入力が終了するのであって、実行が終了するのではありません - それは予算またはシナリオが行います。

まだサポートされていないもの

Section titled “まだサポートされていないもの”
  • タッチステップ (touch-press、touch-move、touch-release)。CLIはこれらをスキップするのではなく、リント時に拒否します。
  • スクリーンショット比較、上記のとおり。
  • CI実行におけるカスタムチップ: 設定内の [[chip]] は feature_unsupported で拒否されます。

各失敗がジョブに何を返すかについては終了コードを、シナリオがデフォルトでプロジェクトにどのように添付されるかについてはvelxio.tomlを参照してください。