frameworks - 使用 Robotframework 与“nc”工具进行简单的测试连接?
问题描述
我正在尝试在同一网络中的两个 IP 地址之间在 Robotframework 中执行一个简单的测试连接测试。我想要实现的是:
- 一方面执行命令 echo Hello | 数控-l 51111
- 在另一个上捕捉“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 工具在命令行上进行的相同测试可以完美运行。
- SSH服务器1
- 回声你好 | 数控-l 51111
- SSH服务器2
- nc ip.server2 51111(见 Hello 消息)
在 ROBOT 框架上做这件事有什么问题?
先感谢您!
解决方案
您面临的问题是因为机器人框架执行是串行的,而您的目标意味着并行性 -netcat
在 Server1 上运行服务器之后,您希望从 Server2 并行连接到它。
这是您手动执行时所做的事情,但这不是在 RF 案例中发生的事情:在框架中,您已经运行了测试 1,它完成了它的步骤,并完成了(有一些通过/失败状态,但这现在并不重要)。完成后,服务没有运行;因此,当您在测试 2 中尝试连接到它时 - 它理所当然地失败了。
这是您可以做的 - 使两个步骤(启动服务并连接到它)并行执行。最简单的方法是在相同的情况下;对于要在后台运行的服务,您必须使用不是Execute Command
等待其目标完成的 - ,而是在后台启动它的Start Command立即返回。
它的用法有点不同,就获取输出和与之通信而言,您可以阅读文档中的操作方法。
推荐阅读
- spring-boot - 如何使用下划线变量解决 Spring Boot findBy 方法
- pandas - 与 Pandas 结果相比,数据框中的 Pyspark 唯一值数量不同
- html - 隐藏 Flexbox 溢出
- javafx - 无法将 GridView 从 ControlsFX 库拖到我在 SceneBuilder 中的项目中
- java - 从容器类访问属性
- javascript - React, Spring - 从 spring 后端提供两个 react 应用程序
- python - 从 Python 列表中删除最后一个和第一个字符的特定元素
- javascript - Ruby on Rails - 使用 Javascript 按键时表单字段更新值
- java - 工厂模式中的资源泄漏
- python - Python3.6 使用字体真棒图标