我是Robot Framework的新手。
我正在编写一个测试程序,期望
连接到另一台计算机执行映像更新(这将导致单元关闭所有服务并重新启动自身(重新连接到设备运行一个返回已知字符串的命令。
这一切都应该发生在__init__.机器人模块内
我注意到,我必须以同步或阻塞的方式调用升级过程,就像一样
Execute Command sysupgrade upgrade.img
这成功地升级了单元,但robotframework脚本在执行命令时挂起。我怀疑这是有效的,因为它使ssh会话保持足够长的时间,以便升级到达一个关键节点,在该节点,会话被远程主机关闭,主机预期会这样,升级会继续,并且这不会导致升级失败。
但是远程主机似乎关闭了ssh会话,使得robotframework脚本无法检测到它,并且脚本无限期挂起。
为了解决这个问题,我试着调用远程命令,比如
Execute Command sysupgrade upgrade.img &
但随后更新失败,因为连接似乎已断开,导致升级过程未完成。
如果我像这样执行
Execute Command sysupgrade upgrade.img &
Sleep 600
然后这也失败了,由于某种原因我无法推断。
但是,如果我像这样调用
Execute Command sysupgrade upgrade.img timeout=600
该命令成功更新了单元,在设置的超时时间后,robotframework脚本确实恢复了,但由于它已经到达超时时间,测试失败了(从robotframeworks的角度来看(。
但这实际上是一个预期的失败,应该被忽略。然后,脚本的其余部分将重新连接到主机,并继续进行剩余的测试
有没有一种方法可以将超时情况视为非致命情况?
这是如上所述的代码,__init__.robot初始化模块预计将执行升级,然后重新连接,剩下其他xyz.robot文件将运行并继续测试应用程序。
__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”
这应该有效:
Comment Change ssh client timeout configuration set client configuration timeout=600 Comment "Launch upgrade on unit" SSHLibrary.Write sysupgrade upgrade.img SSHLibrary.Read Until expectedResult Close All Connections
您可以使用"Run Keyword And Ignore Error"来忽略故障图。或者,如果您不关心执行结果,我认为您应该使用write命令。