使用Robotframework与“ nc”工具进行简单的测试连接?

时间:2018-10-22 15:23:41

标签: frameworks robotframework netcat

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

  1. 在一侧 执行命令echo nc -l 51111
  2. 在另一个上捕获“ Hello”消息: 执行命令'nc ip 51111'

,使用标准的netcat工具。

为此,我运行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工具在命令行上进行相同的测试非常有效。

  1. ssh Server1
  2. echo您好| nc -l 51111
  3. ssh Server2
  4. nc ip.server2 51111 (请参阅Hello消息)

通过ROBOT框架执行此操作有什么问题?

提前谢谢!

2 个答案:

答案 0 :(得分:1)

您面临的问题是因为robotframework的执行是串行的,而您的目标却是并行性-在Server1上并行运行netcat服务器后,您要 连接到它从Server2。

这是手动执行操作时要执行的操作,但这不是在RF情况下发生的操作:在框架中,您已经运行了测试1,执行了它的步骤,并完成了(通过了一些pass /失败状态,但现在不重要了)。完成后,该服务未运行;因此在测试2中,您尝试连接到它-理应失败。

这就是您可以做的-使两个步骤(启动服务并连接到它)并行执行。最简单的方法是在相同的情况下。并且要使服务在后台运行,您不必使用Execute Command-等待其目标完成,而是使用在后台启动服务的Start Command立即返回。
在获取输出并与之通信方面,它的用法有些不同,您可以阅读文档中的内容。

答案 1 :(得分:0)

...我发现... 在不更改原始脚本的情况下,如果删除了两个命令的引号,并且在侦听器侧使用了Start Command而不是Execute Command(如Todor所建议的,谢谢!),脚本将按原样工作是,给出正确的结果。