使用 Robotframework 与 "nc" 工具的简单测试连接?
A simple test connection with the "nc" tool using Robotframework?
我正在尝试在同一网络中的两个 IP 地址之间在 Robotframework 中执行一个简单的测试连接测试。我想要实现的是:
- 一侧
执行命令 echo 你好 | nc -l 51111
- 在另一端接收 "Hello" 消息:
执行命令 'nc ip 51111'
,使用标准的 netcat 工具。
为此,我 运行 测试 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
- echo 你好| nc -l 51111
- ssh 服务器 2
- nc ip.server2 51111
(见问候语)
在 ROBOT Framework 上做有什么问题?
提前致谢!
您面临的问题是因为 robotframework 执行是串行的,而您的目标意味着并行性 - 在 运行 服务器 1 上的 netcat
服务器之后, 并行 你想从 Server2 连接到它。
这是您手动执行时所做的,但这不是 RF 案例中发生的情况:在框架中,您已经 运行 测试 1,它执行了它的步骤,并且完成(有一些 pass/fail 状态,但现在这并不重要)。当它完成时,服务不是运行;所以当你在测试 2 中尝试连接它时 - 它理所当然地失败了。
您可以执行以下操作 - 并行执行这两个步骤(启动服务并连接到服务)。最简单的方法是在同一个案例中;并且要使服务在后台 运行,您不必使用 Execute Command
- 等待其目标完成,而是 Start Command 立即在后台启动它 returns.
它的用法有点不同,在获取输出和与之通信方面,您可以阅读文档中的方法。
...我发现...
在不改变原始脚本的情况下,如果删除两个命令周围的引号,并且在侦听器端使用 Start Command
代替 Execute Command
(如 Todor 所建议的,谢谢! ),脚本将按原样运行,给出正确的结果。
我正在尝试在同一网络中的两个 IP 地址之间在 Robotframework 中执行一个简单的测试连接测试。我想要实现的是:
- 一侧 执行命令 echo 你好 | nc -l 51111
- 在另一端接收 "Hello" 消息: 执行命令 'nc ip 51111'
,使用标准的 netcat 工具。
为此,我 运行 测试 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
- echo 你好| nc -l 51111
- ssh 服务器 2
- nc ip.server2 51111 (见问候语)
在 ROBOT Framework 上做有什么问题?
提前致谢!
您面临的问题是因为 robotframework 执行是串行的,而您的目标意味着并行性 - 在 运行 服务器 1 上的 netcat
服务器之后, 并行 你想从 Server2 连接到它。
这是您手动执行时所做的,但这不是 RF 案例中发生的情况:在框架中,您已经 运行 测试 1,它执行了它的步骤,并且完成(有一些 pass/fail 状态,但现在这并不重要)。当它完成时,服务不是运行;所以当你在测试 2 中尝试连接它时 - 它理所当然地失败了。
您可以执行以下操作 - 并行执行这两个步骤(启动服务并连接到服务)。最简单的方法是在同一个案例中;并且要使服务在后台 运行,您不必使用 Execute Command
- 等待其目标完成,而是 Start Command 立即在后台启动它 returns.
它的用法有点不同,在获取输出和与之通信方面,您可以阅读文档中的方法。
...我发现...
在不改变原始脚本的情况下,如果删除两个命令周围的引号,并且在侦听器端使用 Start Command
代替 Execute Command
(如 Todor 所建议的,谢谢! ),脚本将按原样运行,给出正确的结果。