airtest-状态机自动做任务

前言

最近一个月忙着公司的事情,没能抽空来写写博客,这次来实践一下那状态机结合airtest帮我自动做新手,过程不注重,目的是帮我跑完新手,新手能跑通就可以了,这个项目基本是自动做任务的,如果碰到和我类型一样的可以试试,仅供参考,练练手。

环境

1、airtest,安装这些就不重复写了,看我前面写的或者自动百度
2、状态机可以参考我前面写的状态机结合测试用例

正文

一、定义任务状态

我这里的任务过程分为4个,如有差别自行修改

class TaskState(Enum):
    '''接受任务,进行任务,完成任务,交付任务'''
    FREE = 0
    ACCEPT = 1
    UNDERWAY = 2
    FINISH = 3
    DELIVERY = 4

二、定义任务状态机

1、初始化

主要是绑定进入和退出状态的执行方法
airtest_api指向 …python3.6/site-packages/airtest/core/api.py

class TaskMachine:
    def __init__(self):
        self.machine = Machine(model=self, states=TaskState, initial=TaskState.FREE)
        self.airtest = airtest_api # 这里是airtest的api文件
        self.airtest.img_path = Path(__file__).parent / 'imgFolder'
        # 进入与退出状态要执行的方法
        self.machine.on_enter_ACCEPT('accept_task')
        self.machine.on_enter_UNDERWAY('underway_task')
        self.machine.on_exit_UNDERWAY('find_back')
        self.machine.on_enter_FINISH('finish_task')
        self.machine.on_enter_DELIVERY('delivery_task')

2、接任务

self.airtest.img_assert_mothod: 是我自定义的方法,可以直接换成api提供的方法,比如assert_exists 换成 assert_exists(‘taskLine.png’, msg=‘接任务’) 即可
to_UNDERWAY(): 转到进行任务转态

    def accept_task(self):
        task_icon = self.airtest.img_assert_mothod(assert_exists, 'taskLine.png', case_msg='接任务')
        if task_icon:
            touch(task_icon)
            self.to_UNDERWAY()

3、进行任务

我这里的新手任务,每一步都会有个指引"手指头",所以我每一次只要找到这个手指头进行点击即可

    def underway_task(self):
        guide_list = ['guide1.png','guide2.png']
        for guide_img in guide_list:
            for _ in range(4):
                guide_icon = self.airtest.img_assert_mothod(assert_exists, guide_img, case_msg='进行任务')
                if guide_icon:
                    touch(guide_icon1)
                    continue
        else:
            self.to_FINISH()

4、任务完成

我这里的任务完成了,主页面的主线会有一个完成标记,出现标记责表示完成了任务

    def finish_task(self):
        # 等待那个完成的标记出现
        flag_list = ['finishFlag1.png','finish.png']
        for flag_img in flag_list:
            finish_flag = wait(Template(self.call_airtest.img_path + flag_img), 10)
            if finish_flag:
                self.to_DELIVERY()
                break

5、交付任务

转到这个状态就点下完成任务

    def delivery_task(self):
        finish_task_icon = self.airtest.img_assert_mothod(assert_exists, 'finish.png', case_msg='完成任务')
        if finish_task_icon:
            touch(finish_task_icon)
            # 要内循环要控制次数,否则超出递归深度
            # self.to_ACCEPT()
        # else:
            #self.to_UNDERWAY()

6、运行

运行100次任务

if __name__ == '__main__':
    task = TaskMachine()
    for _ in range(100):
        task.to_ACCEPT()
    time_str = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
    simple_report(__file__, output=REPORTPATH / f'TEST{time_str}.html', logpath=str(LOGPATH))

结语

任务状态转换关系需要梳理一下,我这里没有完成都会转到进行任务,还有我并没有绑定转态转换关系,随意都可转;执行方法我的操作也比较简单,基本是点一下按钮,需要的操作不多,第一次这样结合用,先试试水。

最后的最后,各位的关注、点赞、收藏、是对我最大的支持!
欢迎小伙伴关注微信公众号ID:gameTesterGz
微信二维码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

游戏测试-AJian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值