Skip to content
📔 阅读量:

重启类场景

对于重启类场景的用例需要解决的核心问题是,重启之后如何让用例能继续重启前的步骤继续执行,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,以此激活虚拟环境即可。