Robotframework 基于robot框架的机器重启
作为测试的一部分,我需要重新启动linux机器,但在重新启动之后,ssh连接关闭,测试失败 我正在使用SSHLibrary将所有linux虚拟机连接到我的机器, 我可以切换到这台机器的连接,然后发送重新启动命令。 问题是当我在重新启动后尝试连接机器时,因为ssh连接已关闭Robotframework 基于robot框架的机器重启,robotframework,Robotframework,作为测试的一部分,我需要重新启动linux机器,但在重新启动之后,ssh连接关闭,测试失败 我正在使用SSHLibrary将所有linux虚拟机连接到我的机器, 我可以切换到这台机器的连接,然后发送重新启动命令。 问题是当我在重新启动后尝试连接机器时,因为ssh连接已关闭 RebootMachine Log To Console Rebooting machine Switch Connection ${MACHINE_ALIAS} Start Command
RebootMachine
Log To Console Rebooting machine
Switch Connection ${MACHINE_ALIAS}
Start Command reboot true
Sleep 45s
Switch Connection ${MACHINE_ALIAS}
Start Command echo check
在关键字的最后一行,我得到:SSHException:SSH session not active
我试图关闭连接并按如下方式重新打开:
RebootMachine
Log To Console Rebooting machine
Switch Connection ${MACHINE_ALIAS}
Start Command reboot true
Sleep 45s
Switch Connection ${MACHINE_ALIAS}
Close Connection
Open Connection ${MACHINE_IP} ${MACHINE_ALIAS}
Switch Connection ${MACHINE_ALIAS}
Start Command echo check
但它会从我的连接切换到其他机器。echo命令在另一台机器上执行
我需要一种方法在测试期间重新启动并再次连接到重新启动的计算机,是否可行?重新启动计算机后,会话将变为非活动状态,稍后再次启动后,您必须再次打开连接,但在重新启动后,您似乎确实切换了连接 尝试更改脚本的顺序,如下所示&我添加了几行代码以登录到此服务器:
Switch Connection ${MACHINE_ALIAS}
Start Command reboot true
Sleep 45s
Open Connection ${MACHINE_IP} alias=${MACHINE_ALIAS} prompt=$
${std_output}= Login ${username} ${password}
Should Contain ${std_output} $
${stdout}= Execute Command echo 'check'
Should Contain ${stdout} check
机器重新启动后,会话将变为非活动状态,稍后再次启动后,您必须再次打开连接,但似乎您在重新启动后切换了连接 尝试更改脚本的顺序,如下所示&我添加了几行代码以登录到此服务器:
Switch Connection ${MACHINE_ALIAS}
Start Command reboot true
Sleep 45s
Open Connection ${MACHINE_IP} alias=${MACHINE_ALIAS} prompt=$
${std_output}= Login ${username} ${password}
Should Contain ${std_output} $
${stdout}= Execute Command echo 'check'
Should Contain ${stdout} check
除了另一个答案,我建议从代码中删除sleep45。重新启动可能需要更长的时间才能完成,在这种情况下,您打开的连接将失败。在类似的场景中,我使用了内置库中的关键字“摆脱睡眠” 此示例最多会等待三分钟,并尝试每15秒打开一次SSH连接 等待关键字成功3分钟15秒打开连接${MACHINE\u IP}别名=${MACHINE\u alias}提示=$ 因此,如果重新启动需要45秒,它将等待大约相当长的时间,但如果出于某种原因,它在可接受的时间间隔内需要更长的时间,它仍然可以工作
如果45秒是最长重新启动时间的要求,我仍然会使用此解决方案,那么3分钟应该替换为45秒,重试间隔15秒可能是10秒左右。除了其他答案,我建议从代码中删除睡眠45秒。重新启动可能需要更长的时间才能完成,在这种情况下,您打开的连接将失败。在类似的场景中,我使用了内置库中的关键字“摆脱睡眠” 此示例最多会等待三分钟,并尝试每15秒打开一次SSH连接 等待关键字成功3分钟15秒打开连接${MACHINE\u IP}别名=${MACHINE\u alias}提示=$ 因此,如果重新启动需要45秒,它将等待大约相当长的时间,但如果出于某种原因,它在可接受的时间间隔内需要更长的时间,它仍然可以工作
如果45秒是最长重新启动时间的要求,我仍然会使用此解决方案,那么3分钟应该被替换为45秒,重试间隔15秒可能是10秒左右。但是根据文档关键字timeout没有被捕获,如果机器仍然没有启动,由于以下原因,打开的连接失败:timeout@Ofir也就是说,当您的计算机重新启动时,打开的连接将失败几次,但您不希望这些超时被视为失败,因为计算机正在重新启动。如果Wait to关键字Successful的3分钟超时时间用完,则此行和测试将失败,这意味着您的计算机无法在3分钟内重新启动。但根据文档,关键字timeout未被捕获,并且如果计算机仍然未启动,则打开的连接会因以下原因而失败:timeout@Ofir这就是重点,当计算机重新启动时,打开的连接将失败几次,但您不希望这些超时被视为失败,因为计算机正在重新启动。如果Wait-Until关键字successfuls的3分钟超时时间用完,则此行和测试将失败,这意味着您的计算机无法在3分钟内重新启动。