【问题标题】:A simple test connection with the "nc" tool using Robotframework?使用 Robotframework 与“nc”工具进行简单的测试连接?
【发布时间】:2019-03-26 17:33:21
【问题描述】:

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

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

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

提前谢谢你!

【问题讨论】:

    标签: frameworks robotframework netcat


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      ...我发现...

      在不改变原始脚本的情况下,如果两个命令周围的引号都被删除,并且在侦听器端使用Start Command 而不是Execute Command(正如 Todor 建议的那样,谢谢!),脚本将起作用事实上,给出正确的结果。

      【讨论】:

      • 它对你有用不是因为删除了引号,而是因为你切换到Start Command(这使它继续在后台运行)。顺便说一句,请确保在案例结束时停止服务(因此我说在案例中更容易做到这一点)/或套件 - 否则您可能会在很久之后仍然在服务器 1 上运行 netcat '已经完成了你的案件运行。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-21
      • 2023-03-08
      相关资源
      最近更新 更多