有一个节点,我通过 Robot Framework(SSHLibrary.Start 命令或执行命令)远程启动脚本。这个远程脚本启动到另一个从外部隐藏的节点的 telnet 连接。这个 telnet 调用对 Robot 来说似乎是一个阻塞事件。我使用 RIDE 进行测试执行,它只是停止工作。我可以低效地发送停止信号。是否可以在 ssh 中生成 telnet?
3 回答
一切皆有可能。
让我们将您的场景描述为:Robot Framework 在机器 A 上运行。测试通过 ssh 将 A 连接到机器 B,通过 telnet 将 B 连接到机器 C。
从你的问题不清楚测试在哪一步卡住了。测试是否真的建立了 telnet 连接?telnet 进程实际上是否在 B 上启动?
在这里你应该考虑两个相关的问题。
首先是 Robot Framework 在单线程中执行测试。这意味着在关键字返回之前,测试不会进行。如果您希望在测试继续时打开 telnet 会话,则必须使用SSHLibrary.start 命令而不是执行命令。
第二点是以编程方式控制 telnet 会话。telnet 客户端必须支持某种批处理执行(例如不询问密码或刷新输入)。确保您能够通过测试在 C 上发出命令。您应该能够使用write关键字重定向 C 的命令。您可以通过 cat-ting 标准输入中的命令文件来检查 telnet 客户端是否正常工作。就像是
cat commands_for_c.txt | telnet ...to..c...
我们还没有完全使用 telnet 的方法,而是使用另一个 ssh 会话或其他我们无法访问的 shell...
打开到第一台机器的 ssh 连接。在此连接上,使用 SSHLibrary 关键字(如 Set Prompt、Write and Read 或 Read Until Prompt)手动打开到下一台计算机的 telnet 连接。Write 和 Read 关键字的使用有点像 expect 和 spawn...
嗨,我使用 ssh 连接在 Robot Framework 中发送 telnet 命令,如下所示:
SSHLibrary.Open Connection host=*** port=22 timeout=60 alias=ssh prompt=:~ >
SSHLibrary.Login username=*** password=*** delay=1s
SSHLibrary.Switch Connection index_or_alias=ssh
SSHLibrary.Write lxc-attach -n 0x1018
SSHLibrary.Read Until Prompt
SSHLibrary.Write telnet 1.2.3.4 2323
SSHLibrary.Read Until $
SSHLibrary.Write sendX 1115 1 0 0 0 0
SYSTEM Close SSH Connection