【发布时间】:2022-01-16 07:25:30
【问题描述】:
我是 Robot Framework 的新手。
我正在编写一个预期的测试程序
连接到另一台机器 执行映像更新(这会导致设备关闭所有服务并自行重启) 重新连接到设备 运行返回已知字符串的命令。
这一切都应该发生在 __init__.robot 模块中
我注意到我必须以同步或阻塞方式调用升级过程,就像这样
Execute Command sysupgrade upgrade.img
升级单元成功,但机器人框架脚本在执行命令时挂起。我怀疑这是可行的,因为它使 ssh 会话保持足够长的时间,以使升级到达一个关键连接点,在该连接点,远程主机关闭会话,主机期望这一点,升级继续,这不会导致升级失败。
但是远程主机似乎以某种方式关闭了 ssh 会话,以至于机器人框架脚本没有检测到它,并且脚本无限期挂起。
为了解决这个问题,我尝试像这样调用远程命令
Execute Command sysupgrade upgrade.img &
但随后更新失败,因为连接似乎断开并且升级过程不完整。
如果我这样执行它
Execute Command sysupgrade upgrade.img &
Sleep 600
那么这也失败了,由于某种原因我无法推断。
但是,如果我这样调用它
Execute Command sysupgrade upgrade.img timeout=600
命令成功更新单元,并且在设置的超时时间之后,robotframework脚本确实恢复了,但是由于它已经到了超时,所以测试(从robotframework的角度来看)失败了。
但这实际上是一个预期的失败,应该被忽略。然后脚本的其余部分将重新连接到主机并继续剩余的测试
有没有办法将超时条件视为非致命的?
这里是代码,如上所述,__init__.robot初始化模块预计会执行升级然后重新连接,留下另一个xyz。要运行的机器人文件并继续测试应用程序。
__init__.robot 文件:
*** Settings ***
| Library | OperatingSystem |
| Library | SSHLibrary |
Suite Setup ValidationInit
Suite Teardown ValidationTeardown
*** Keywords ***
ValidationInit
Enable SSH Logging validation.log
Open Connection ${host}
Login ${username} ${password}
# Upload the firmware to the unit.
Put File ${firmware} upgrade.img scp=ALL
# Perform firmware upgrade on the unit.
log "Launch upgrade on unit"
Execute Command sysupgrade upgrade.img timeout=600
log "Restart comms"
Close All Connections
Open Connection ${host}
Login ${username} ${password}
ValidationTeardown
Close All Connections
log “End tests”
【问题讨论】:
标签: robotframework robotframework-sshlibrary