模拟与CLI的交互

时间:2019-05-29 18:39:57

标签: bash shell terminal functional-testing end-to-end

我有一个CLI,可以启动进程,尤其是交互式外壳,并等待它们,可以使用相同的CLI关闭它们。我需要使用bash创建一些端到端测试,但是我看不到如何在终端中模拟执行情况。输出应在“前景”中发送到流程。

假设执行my-cli start启动一个python脚本,该脚本启动一个子进程(运行一个交互式shell)并等待它。 在测试脚本中,exec(my-cli start)会将当前进程替换为运行python脚本的进程,而不是交互式外壳程序,因此之后我将无法与交互式外壳程序进行交互。

我考虑过使用管道,但是我认为可以使用终端进行模拟的东西会更好,有什么想法吗?

示例:

假设我的CLI(cli.py)的代码是:

import subprocess


process = subprocess.Popen(['/bin/bash', '-i'], shell=False)
process.communicate()

我使用expect不知道是否可以与交互式外壳(/bin/bash -i)进行通信

#!/usr/bin/expect -f


spawn python3 cli.py

#expect eof

send -- "echo $$\r"

1 个答案:

答案 0 :(得分:0)

如本杰明的评论中所述。我和许多其他人在这种情况下使用了expect。只要您能说出将在终端中显示的文本,就可以使用以下网页作为创建期望脚本的指南。