使用 Robotframework 与 "nc" 工具的简单测试连接?

A simple test connection with the "nc" tool using Robotframework?

我正在尝试在同一网络中的两个 IP 地址之间在 Robotframework 中执行一个简单的测试连接测试。我想要实现的是:

  1. 一侧 执行命令 echo 你好 | nc -l 51111
  2. 在另一端接收 "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 工具对命令行进行的相同测试完美无缺。

  1. ssh 服务器 1
  2. echo 你好| nc -l 51111
  3. ssh 服务器 2
  4. 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 所建议的,谢谢! ),脚本将按原样运行,给出正确的结果。