首页 > 解决方案 > 使用 Robotframework 与“nc”工具进行简单的测试连接?

问题描述

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

  1. 一方面执行命令 echo Hello | 数控-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服务器1
  2. 回声你好 | 数控-l 51111
  3. SSH服务器2
  4. nc ip.server2 51111(见 Hello 消息)

在 ROBOT 框架上做这件事有什么问题?

先感谢您!

标签: frameworksrobotframeworknetcat

解决方案


您面临的问题是因为机器人框架执行是串行的,而您的目标意味着并行性 -netcat在 Server1 上运行服务器之后,您希望从 Server2 并行连接到它。

这是您手动执行时所做的事情,但这不是在 RF 案例中发生的事情:在框架中,您已经运行了测试 1,它完成了它的步骤,并完成了(有一些通过/失败状态,但这现在并不重要)。完成后,服务没有运行;因此,当您在测试 2 中尝试连接到它时 - 它理所当然地失败了。

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


推荐阅读