赞
踩
airtest是网易开发的一款自动化测试工具,主要用于游戏自动化开发和测试,目前支持对windows应用、手机app等,同时支持录制操作,甚至达到无需代码编写即可完成测试,能够识别图中是否存在目标元素(其实是比较目标图片和截图,确定目标是否在截图中)。
它的操作相对appium来说更容易上手,进行移动端测试过程中,通常是利用其poco库来做自动化。
Windows 10操作系统
python 版本 3.7
airtest IDE,版本 1.2.1
adb工具,是手机操作自动化的基础。
对于手机app页面元素的分析,可以采用 airtest IDE自带的Android模块的 UI渲染树查看,或者使用 Android Studio 的SDK插件 uiautomatorviewer 来实现。
1、连接手机和电脑
使用USB数据线连接手机和电脑,启用手机的开发者选项,启用方法请自行百度,开启之后,将USB调试打开。
2、接通手机
这里有两种方式,一种是通过命令行执行adb命令,另外一种是通过airtest界面操作。
airtest界面操作,即打开airtest软件之后,点击右侧的 “刷新ADB”,正常情况下会出现手机设备信息,点击 connect 即可。
之后会出现手机画面:
对于出现的手机画面,使用鼠标进行点击和滑动,可以达到 操作手机的效果。
软件左下角处“Poco”栏的下拉菜单选择“Android”,即可出现手机页面的元素审查结果,可以对树形结构进行点击展开,也可以对画面进行锁定等操作。
命令行操作,只需执行:
adb devices
出现以下内容,则是正常的:
List of devices attached
CxsxsxsxE62w133 device
注意:那个device前面是手机序列号,而device这个是关键,如果是unauthorized就是连接失败的。
这里说一下关闭连接,需要确保adb.exe进程是关闭的,然后才能正常弹出设备。
对于airtest连接的断开操作,只需找到软件右上角的“Phone assist”(图标包含锤子的工具箱),点击之后选择“Disconnect current device”即可。
3、自动化脚本
自动化脚本分为两种,一种是python的py格式脚本,另一种是airtest支持的air格式脚本,此处以python脚本编写自动化代码。
需要说明的是,自动化操作手机过程中,系统的屏幕旋转会被开启,同时输入法被修改为Yosemite,所以完成自动化操作之后,需要使用adb将操作修改为原始值。
from airtest.core.api import * from poco.drivers.android.uiautomation import AndroidUiautomationPoco from PIL import Image import cv2 import time,os import base64,io auto_setup(__file__) # 关闭屏幕旋转 cmd1='adb shell content insert --uri content://settings/system --bind name:s:accelerometer_rotation --bind value:i:0' # 修改输入法到初始状态 cmd2='adb shell ime set com.baidu.input_huawei/.ImeService' def show_info(poco): try: desc=poco(name='com.tencent.weishi:id/feed_desc').get_text() author=poco(name='com.tencent.weishi:id/tv_feed_info_first_text').get_text().split()[0].replace('的视频原声','') shares=poco(name='com.tencent.weishi:id/feed_share_text').get_text() comments=poco(name='com.tencent.weishi:id/feed_comment_count_text').get_text() likes=poco(name='com.tencent.weishi:id/feed_like_count').get_text() print('desc:{0}\nauthor:{1}\tshares:{2}\tlikes:{3}\n'.format(desc,author,shares,likes)) except: pass def check_adb(cmd='adb devices'): f=os.popen(cmd) rst=f.read() f.close() if 'device\n' in rst: return True return False def close_adb(): cmds="wmic process where name='adb.exe' call terminate" zz=os.system(cmds) if zz==0: print('killed adb.') def remove_device(cmd='adb shell settings put global adb_enabled 0'): zz=os.system(cmd) if zz==0: print('device removed.') def main(package='com.tencent.weishi'): # 使用adb连接手机 xxx=check_adb() if not xxx: print('fail to start adb.exe') return dev1=connect_device("Android:///") devs=device() #start_app # 开启微视app start_app(package=package, activity=None) time.sleep(3) poco_1 = AndroidUiautomationPoco(dev1, use_airtest_input=True, screenshot_each_action=False) time.sleep(3) filename1='tt111.png' # 手机截屏 a,b=poco_1.snapshot() c=base64.b64decode(a) tmp1=Image.open(io.BytesIO(c)) filename2='tt222.png' tmp1.save(filename2) # 查看分辨率 x, y = tmp1.size print(x, y) while 1: try: time.sleep(1) # 查看当前视频的标题、分享等信息 show_info(poco_1) time.sleep(20) # 滑动屏幕,进入下一个视频 swipe([0.4*x,0.5*y],[0.7*x,0.3*y], duration=1) time.sleep(1) except KeyboardInterrupt: break # 关闭app stop_app(package=package) # 还原系统设置 os.system(cmd1) os.system(cmd2) time.sleep(3) # 结束adb进程 close_adb() time.sleep(2) # 结束连接 remove_device() if __name__=='__main__': main()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。