0

我是机器人框架的新手。

我正在编写一个预期的测试程序

连接到另一台机器 执行映像更新(这会导致设备关闭所有服务并自行重启) 重新连接到设备 运行返回已知字符串的命令。

这一切都应该发生在__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 .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”

4

2 回答 2

1

这应该工作:

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

于 2022-01-15T23:25:30.783 回答
0

您可以使用“运行关键字并忽略错误”来忽略失败。或者在这里,如果您不关心执行结果,我认为您应该使用 write 命令。

于 2022-01-15T14:03:43.723 回答