#script-runner #command-line-interface #asciinema #automation #recording #testing #anticipate

app anticipate-cli

支持 asciinema 的脚本运行器

4 个版本 (破坏性更新)

0.6.0 2024年2月24日
0.5.0 2024年2月24日
0.4.0 2024年2月23日
0.3.0 2024年2月22日

#3 in #asciinema

MIT/Apache

47KB
1K SLoC

Anticipate

支持 asciinema 的基于脚本的自动化,类似于 expect(1)

非常适合演示和测试命令行界面。

安装

cargo install anticipate-cli

示例

创建一个目录,初始化服务器配置,打印配置文件,启动服务器,然后发送 SIGTERM 命令来关闭它。

mkdir -p target/server/accounts
#$ readline

server init target/config.toml --path server/accounts
#$ readline

cat target/config.toml
#$ expect path = "server/accounts"

server start target/config.toml
#$ sendcontrol ^C

查看 examplesfixtures 文件夹以获取更多示例。

用法

运行

要执行脚本,请使用 run 命令

anticipate \
  run \
  --parallel \
  --log \
  tests/examples/*.sh

录制

要使用 asciinema 录制,为每个输入文件在 target 目录中写入一个 .cast 文件,覆盖任何现有文件

anticipate \
  record \
  --parallel \
  --overwrite \
  --log \
  target \
  tests/examples/*.sh

查看程序帮助以获取更多选项。

语法

环境变量会在发送到伪终端的命令中进行替换,这使得在脚本间共享值变得更加容易。

export NAME=foo
anticipate rec -o target tests/examples/interpolate.sh
asciinema play target/interpolate.cast

预处理指令

使用预处理指令作为第一条指令来设置要执行的命令

#!/bin/bash

如果给定的是相对路径,则相对于脚本解析

#!../programs/script.sh

发送行

将原始文本作为一行发送到伪终端

ls -la

或者您可以使用sendline命令显式地发送

#$ sendline ls -la

发送控制字符

要发送控制字符,例如Ctrl+C

#$ sendcontrol ^C

期望

Expect等待字符串出现在程序输出中

#$ expect Documents

正则表达式

要等待模式出现在程序输出中,请使用regex

#$ regex [0-9]

读取行

读取程序输出的一行

#$ readline

睡眠

等待指定毫秒数

#$ sleep 500

发送

发送文本到程序而不刷新流

#$ send echo

刷新

刷新发送到伪终端的缓冲区

#$ flush

等待

等待提示符出现

#$ wait

清除

清除屏幕并重置光标位置

#$ clear

包含

包含脚本文件中的指令

#$ include ../shared.sh

路径相对于脚本文件的父目录解析。

参见

致谢

core 模块是 expectrl 的分支,语法受到 asciinema-automation 的启发。

许可

MIT或Apache-2.0

依赖

~13–46MB
~658K SLoC