一、Airtest的介绍
1)Airtest的简介
Airtest是网易出品的一款基于图像识别和poco控件识别的一款UI自动化测试工具。
Airtest的框架是网易团队自己开发的一个图像识别框架,这个框架的祖宗就是一种新颖的图形脚本语言Sikuli。
Sikuli这个框架的原理是这样的,计算机用户不需要一行行的去写代码,而是用屏幕截屏的方式,用截出来的图形摆列组合成神器的程序,这是Airtest的一部分。
Airtest也基于poco这个U控件搜索框架,这个框架也是网易自家的跨平台U测试框架,原理类似于appium,通过控件的名称,id之类的来定位目标控件,
然后调用函数方法,例如click(),swip()之类的方法来对目标控件进行点击或者是操作。
2)关于自动化测试,Airtest更多的用作自动化测试
概念:自动化测试,就是把繁杂的人工测试用例利用自动化测试工具编写成代码,让机器代替人工自动跑用例的过程。实际上就是把以人为驱动的测试行为转化为机器执行的一种过程。
意义:节省人力、物力、时间、硬件资源等,提升测试效率,特别对于繁琐重复的测试用例,可以使测试人员更专注于新的测试模块的建立和开发,从而提高测试覆盖率。
3)配置手机连接
[Airtest简介] 网易出品的一个自动化测试工具 * 可以基于图像识别来完成自动化测试 * 可以基于poco控件来完成自动化测试 [安装] 官网下载:https://airtest.netease.com/changelog.html 解压即用 [配置手机] 1. 打开 AirtestIDE 2. 将手机打开开发者模式 3. USB链接手机 4. 在右上角点击connect 5. 出现界面即可
二、python语言操作手机
1)左下标选择安卓,生成初始化代码
# -*- encoding=utf8 -*- __author__ = "hp" from airtest.core.api import * auto_setup(__file__) from poco.drivers.android.uiautomation import AndroidUiautomationPoco poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
2)打开微信
2.1)第一种方式,通过 应用名字打开
# 打开微信 poco(text='微信').click() # click 点击事件
2.2)打开应用app的名称
第一步获取应用app的名称
# 查看当前手机上的app的包,有哪些,找到需要打开的包 dev = device() print(dev.list_app(third_only=True)) # 获取所以的应用的包名 # com.tencent.mm 为微信的包名
第二步,打开微信。如果知道了包名,第一步可省略,直接使用
# 打开app start_app('com.tencent.mm')
3)根据标签选择需要的信息
# 晒选对话框 items_elements = poco(name='com.tencent.mm:id/b9g').offspring(name='com.tencent.mm:id/b9i') # offspring 为子孙节点 # 选择出所有的名字 for item in items_elements: name = item.get_text() print(name)
4)抢红包代码
# -*- encoding=utf8 -*- __author__ = "hp" from airtest.core.api import * auto_setup(__file__) from poco.drivers.android.uiautomation import AndroidUiautomationPoco poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False) # 打开app start_app('com.tencent.mm') # 晒选对话框 items_elements = poco(name='com.tencent.mm:id/b9g').offspring(name='com.tencent.mm:id/b9i') # offspring 为子孙节点 # 选择出所有的名字 names = [] for item in items_elements: name = item.get_text() names.append(name) print(names) def get_red_pakets(): # 实现抢红包,选择历史消息,进行反转poco("com.tencent.mm:id/ae").child("android.widget.RelativeLayout")[5] msg_elements_list = poco(name="android.widget.RelativeLayout").children() # 获取别人发的消息 # 反转消息 msg_lists = [] for item in msg_elements_list: msg_lists.insert(0,item) for msg in msg_lists: # 第一次循环出来的就是最后一个元素,也是最新的元素 # 判断红包是否存在 red_key_element = msg.offsping(name='com.tencent.mm:id/asn') # 已领取元素定位 not_red_key = msg.offsping(name='com.tencent.mm:id/aso') if red_key_element: # 说明有红包,别管有没有抢过 # 判断抢没有抢过 if not_red_key.exists() and not_red_key.get_text() == '以领取': print('已经抢过了') continue else: print('有新红包了') msg.click() # 点红包 # 开红包 kai_elements = poco(name='com.tencent.mm:id/czt') if kai_elements.exists(): kai_elements.click() # 返回对话框 keyevent('BACK') else: print('没有红包!') continue # 进入对话框 target = 'myfriend' if target in names: index = names.index(target) # 计算出列表的索引 items_elements[index].click() # 进入该对话框 while True: get_red_pakets() sleep(1) # 每一秒检查一次
5)归纳总结
[Airtest简介] 网易出品的一个自动化测试工具 * 可以基于图像识别来完成自动化测试 * 可以基于poco控件来完成自动化测试 [安装] 官网下载:https://airtest.netease.com/changelog.html 解压即用 [配置手机] 1. 打开 AirtestIDE 2. 将手机打开开发者模式 3. USB链接手机 4. 在右上角点击connect 5. 出现界面即可 6.自动生成代码 在poco辅助款左下角选择 安卓 [打开微信] 先找到包名 device() dev.list_app() 指定包名打开 start_app(包名) [选择对话框] poco来定位元素的位置 offspring是选择子孙节点,包括儿子,孙子,重孙子 补充 --> children 是选择子节点,只包括儿子 get_text() 选择节点上对应的文本 [选择对话列表] FILO --> First In First Out LIFO --> Last In First Out Proprietary [总结] 注意空间元素的选取 children 和 offspring的使用 Airtest可以实现手机app的爬虫 可以直接使用 Airtest运行多个手机 --> 群控 结合 MitmProxy来实现爬虫,MitmProxy抓包工具,可以过滤请求与响应