重启类场景
对于重启类场景的用例需要解决的核心问题是,重启之后如何让用例能继续重启前的步骤继续执行,YouQu
集成了自研的 letmego 技术方案;
详细技术方案、实现细节、Demo可以看 letmego 官方在线文档;
使用方法
使用方法很简单,只需要给应用方法层的唯一出口类加一个装饰器(@letmego.mark
)即可:
python
import letmego
@letmego.mark
class DeepinMusicWidget(WindowWidget, TitleWidget, PopWidget):
"""音乐业务层"""
用例注意事项
这类用例相对特殊,这里主要介绍写用例的时候注意事项:
(1)用例的前置和后置要写在同一个用例文件里面;这点如果了解方案实现原理很容易理解;
(2)重启步骤前面的步骤,如果有对象实例化的,需要处理实例化存在异常;因为 YouQu
的对象实例化默认会检测应用是否启动,重启之后虽然重启步骤前面的步骤函数不会执行,但是方法类同样会进行实例化,所以需要处理这个问题;
python
# ignore import
class TestMusic(BaseCase):
"""
音乐用例
"""
def test_music_679537(self):
try:
music = DeepinMusicWidget()
music.click_singer_btn_in_music_by_ui()
music.click_icon_mode_in_music_by_ui()
except ApplicationStartError:
pass
# ========== reboot ==========
DeepinMusicWidget.reboot()
# ========== 重启之后继续执行 =========
DdeDockPublicWidget().open_music_in_dock_by_attr()
music = DeepinMusicWidget()
music.recovery_music_by_cmd()
music.first_add_music_by_ui()
music.click_singer_btn_in_music_by_ui()
music.click_icon_mode_in_music_by_ui()
self.assert_music_image_exist("music_679537")
(3)重启步骤最好是一个简单的reboot操作,不建议在组合步骤中间插入一个reboot;
python
@letmego.mark
class DeepinMusicWidget(WindowWidget, TitleWidget, PopWidget):
@staticmethod
def reboot():
"""letmego reboot"""
os.system("echo '1' | sudo -S reboot")
驱动执行
因为重启类场景需要注册自启服务以及对用例执行过程的处理,驱动执行的时候加 --autostart yes
:
shell
youqu manage.py run --autostart yes
执行环境
默认使用虚拟环境执行,也就是说如果您是部署自动化环境是用的 env_dev.sh
是无法使用此技术方案的,解决方法也很简单,执行一下:bash env.sh
,以此激活虚拟环境即可。