【问题标题】:About expected timeouts in RobotFramework SSHLibrary关于 RobotFramework SSHLibrary 中的预期超时
【发布时间】: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


    【解决方案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

    【讨论】:

    • 你好 nek,谢谢你,解决了!事实证明,您的解决方案更出色,因为与其总是等待一段合理的时间让操作结束,不如等待指示操作实际成功的响应更为优化。
    • 嗨!我很高兴它有帮助 :) 如果您还想检查是否出现另一条消息/提示,您可以这样做:${output} SSHLibrary.Read 直到 expectedResult (--next机器人中的行--) 应该包含 ${output} expectedMessage 也不要忘记在“关闭所有连接”之后将客户端配置超时重置为原始值
    【解决方案2】:

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

    【讨论】:

    • 我对此仍然很不满意,但不要运行关键字和忽略错误捕获错误但不捕获超时?文档似乎就是这么说的。
    猜你喜欢
    • 1970-01-01
    • 2020-06-21
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 2020-12-16
    • 2015-05-22
    相关资源
    最近更新 更多