Сценарии
--expect-text отвечает на один вопрос: появлялась ли когда-нибудь эта строка? Сценарий отвечает на всё остальное. Это файл YAML со списком шагов, которые runner выполняет по порядку, на симулированных часах основной платы.
Имена полей взяты у 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| шаг | поля | что делает |
|---|---|---|
delay |
500ms, 2s, 100us; голое число — это миллисекунды |
ждёт, пока симулированные часы достигнут t0 + n |
wait-serial |
строка, не более 512 байт | поиск подстроки, побайтово точный, по serial, принятому с момента предыдущего wait-serial. Если бюджет исчерпается раньше, запуск завершается со статусом timeout |
write-serial |
строка UTF-8 или список байтов 0..255 |
пишет в UART основной платы |
expect-pin |
part-id, pin, expected (0/1, high/low, true/false; также принимается value) |
читает пин один раз, немедленно. Несовпадение проваливает запуск и сообщает уровень, который фактически был прочитан |
set-control |
part-id, control, value (число, строка или булево) |
pressed на кнопке нажимает или отпускает её; остальные элементы управления — это сенсорные элементы управления и атрибуты детали. Неизвестный элемент управления проваливает запуск и перечисляет те, что есть у этой детали |
take-screenshot |
part-id, save-to и/или compare-with, tolerance |
делает снимок PNG этой детали в этот момент запуска |
Любой шаг может нести name: рядом со своим ключом, исключительно для журнала.
Ограничения: 200 шагов и 20 снимков экрана на запуск.
Всё — симулированное время
Заголовок раздела «Всё — симулированное время»delay: 600ms — это 600 миллисекунд часов гостя, а не настенных часов. Один и тот же сценарий занимает одно и то же симулированное время на загруженном runner и на простаивающем, и именно это делает результат воспроизводимым — и именно за это вы платите.
Управление входами
Заголовок раздела «Управление входами»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 — это id из вашего diagram.json (или .vlx), никогда не внутренний. Шаг, называющий несуществующую деталь, отклоняется до начала запуска, с 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.pngPNG этой детали захватывается в этот момент запуска и записывается в save-to, с разрешением относительно каталога проекта. Запуск, единственное ожидание которого — снимок экрана, проходит, как только сделан последний снимок.
Флаги, которые становятся шагами
Заголовок раздела «Флаги, которые становятся шагами»Вы можете выразить простые случаи без файла, и они сочетаются с ним:
| флаг | эквивалент |
|---|---|
--expect-text X |
финальный wait-serial X |
--screenshot-part P --screenshot-time T |
delay T, затем take-screenshot P |
--fail-text Y |
не шаг: Y отслеживается на каждом фрагменте serial каждой платы в течение всего запуска и завершает его со статусом failed в тот момент, когда появляется |
Ввод с клавиатуры на плате
Заголовок раздела «Ввод с клавиатуры на плате»--interactive перенаправляет ваш stdin в последовательный порт основной платы, объединяя каждые 20 мс. Он работает вместе со сценарием: оба пишут в один и тот же UART, в порядке поступления. Закрытие stdin завершает ввод, а не запуск — это делают бюджет или сценарий.
Пока не поддерживается
Заголовок раздела «Пока не поддерживается»- Шаги касаний (
touch-press,touch-move,touch-release). CLI отклоняет их на этапе проверки, а не пропускает. - Сравнение снимков экрана, как указано выше.
- Пользовательские чипы в запуске CI:
[[chip]]в конфигурации отклоняется сfeature_unsupported.
См. Коды выхода, чтобы узнать, что каждый сбой возвращает вашей задаче, и velxio.toml, чтобы узнать, как сценарий привязывается к проекту по умолчанию.