我正在尝试在同一网络中的两个IP地址之间在Robotframework中执行一个简单的测试连接测试。我想要实现的是:
- 在一侧 执行命令回显你好 |NC -L 51111
- 要捕获另一条"您好"消息: 执行命令 'nc ip 51111'
,使用标准网猫工具。
为此,我运行Test Script.robot:
Library Process
Library SSHLibrary
Suite Setup Open Connection And Log In
Suite Teardown Close All Connections
*** Variables ***
${HOST} ip.my.dev.vm
${USERNAME} user
${PASSWORD} password
${HOST_PDG} ip.server1
${HOST_IDPF} ip.server2
*** Test Cases ***
Step 1 Connect Server1 and send Hello to space
Open Connection And Log In Server1
${output}= Execute Command 'echo Hello | nc -l 51111'
Should Not Be Equal ${output} Hello
Step 2 Connect to Server2 and retrieve Hello
Open Connection And Log In Server2
${output}= Execute Command 'nc ip.server2 51111'
Should Be Equal ${output} Hello
*** Keywords ***
Open Connection And Log In
Open Connection ${HOST}
Login ${USERNAME} ${PASSWORD}
Open Connection And Log In Server1
Open Connection ${HOST_PDG}
Login ${USERNAME} ${PASSWORD}
Open Connection And Log In Server2
Open Connection ${HOST_IDPF}
Login ${USERNAME} ${PASSWORD}
此脚本在第一个通过的测试步骤后停止,并且从Server2中我永远无法捕获此Hello消息。
使用 nc 工具在命令行上进行相同的测试可以完美运行。
- ssh 服务器1
- 回声 你好 | nc -l 51111
- ssh 服务器2
- NC IP服务器2 51111 (请参阅您好消息(
在机器人框架上做这件事有什么问题?
提前谢谢你!
您面临的问题是因为机器人框架执行是串行的,而您的目标意味着并行性 - 在 Server1 上运行netcat
服务器后,您希望从 Server2 并行连接到它。
这是您手动执行此操作时正在执行的操作,但这不是在RF情况下发生的情况:在框架中,您已经运行了测试1,它完成了步骤,并完成了(有一些通过/失败状态,但现在这并不重要(。完成后,服务未运行;因此,当您在测试 2 中尝试连接到它时 - 它理所当然地失败了。
以下是您可以执行的操作 - 并行执行两个步骤(启动服务和连接到它(。最简单的方法是在相同的情况下;为了使服务在后台运行,您不必使用Execute Command
- 它等待其目标完成,而是立即返回在后台启动它的启动命令。
它的用法略有不同,在获取输出和与之通信方面,您可以在文档中阅读方法。
...我发现...
在不对原始脚本进行太多更改的情况下,如果删除两个命令周围的引号,并且在侦听器端使用Start Command
而不是Execute Command
(正如 Todor 建议的那样,谢谢!(,脚本将按原样工作,给出正确的结果。