【发布时间】:2019-05-29 18:39:56
【问题描述】:
我有一个可以启动进程的 CLI,尤其是交互式 shell 并等待它们,它们可以使用相同的 CLI 关闭。我需要使用 bash 为其创建一些端到端测试,但我看不到如何在终端中模拟执行;输出应发送到“前台”中的进程。
假设执行my-cli start 启动一个python 脚本,该脚本启动一个子进程(运行一个交互式shell)并等待它。
在测试脚本中,exec(my-cli start) 会将当前进程替换为运行 python 脚本的进程而不是交互式 shell,所以之后我无法与交互式 shell 交互。
我考虑过使用管道,但我认为可以使用终端模拟的东西会更好,有什么想法吗?
例子:
假设我的 CLI (cli.py) 的代码是:
import subprocess
process = subprocess.Popen(['/bin/bash', '-i'], shell=False)
process.communicate()
使用expect不知道能不能和交互式shell通信(/bin/bash -i)
#!/usr/bin/expect -f
spawn python3 cli.py
#expect eof
send -- "echo $$\r"
【问题讨论】:
-
Expect 是一个可用于测试交互式命令的工具。
-
至于
exec运行spawn my-cli start不会与生成的交互式shell交互,我认为它会与运行python代码的进程通信。
标签: bash shell terminal functional-testing end-to-end