摘要:框架是网易团队开发的图像识别框架。这个框架的前身是一种新颖的图形脚本语言。基本的操作方式除了跨平台之外都是平台特有的,比如安卓平台和苹果平台。下面就来详细说说这几个模块。
文章目录简介airtest关于自动化测试市面上常见的UI自动化测试工具及优缺点环境的构建,Android真机连接Android真机USB连接远程连接无线连接记录一个简单的。空气脚本分析什么是。Air脚本初始化环境设备连接模拟点击安装包Airtest基本操作方法多个手机交互案例举例参考其他air文件。
Airtest简介Airtest是网易出品的基于图像识别和poco控件识别的自动化UI测试工具。Airtest的框架是网易团队开发的图像识别框架。这个框架的祖先是一种新颖的图形脚本语言Sikuli。Sikuli的原理是,计算机用户不需要一行一行地写代码,而是使用截屏将裁剪出来的图形组合成一个神器程序,这是Airtest的一部分。
此外,Airtest还基于poco,这是一个U控搜索框架,也是网易自己的跨平台U测试框架。原理类似appium,通过控件的名称和id定位目标控件,然后调用函数方法,如click()和swip(),对目标控件进行点击或操作。
关于自动化测试的概念:自动化测试是利用自动化测试工具将复杂的手工测试用例编写成代码,让机器自动运行测试用例而不是手工运行测试用例的过程。实际上是将人类驱动的测试行为转化为机器执行的过程。
意义:节省人力、物力、时间、硬件资源等。,提高测试效率,尤其是对于繁琐重复的测试用例,可以让测试人员更加关注新测试模块的建立和开发,从而提高测试覆盖率。
市场上常见的UI自动化测试工具及其优缺点。
以上主流工具的优缺点:
与上述工具相比,Airtest有以下优点和缺点:
所以其实基于图像识别的Airtest更适合游戏测试。
环境建设。下载AirtestIDE AirtestIDE已经帮助你集成了所有的环境,有自己的录音脚本栏,自动脚本生成,自己的编辑器和自己的模拟器。使用AirtestIDE,您可以轻松录制脚本。Airtest官方网站下载地址:
http://airtest.netease.com/
AirtestIDE的使用教程和文档也在以下链接中:
https://airtest.doc.io.netease.com/
Android真机连接使用AirtestIDE自动测试Android应用时,第一步是连接Android设备。
安卓真机连接准备:
请先安装手机相应品牌的官方驱动,确保可以用电脑通过USB调试手机。确保手机中的“开发者选项”已经开启,开启“开发者选项”中的“允许USB调试”部分。手机需要开机,“允许通过USB安装应用”,关闭电脑上已安装的手机助手软件,可以安卓大部分问题。请确保在任务管理器中手动结束手机助手进程。
请用USB线连接手机。在弹出的允许手机USB调试的窗口中点击确定。点击连接面板中的刷新ADB,设备列表将被刷新。单击列表中相应设备的连接,完成连接。如果设备没有刷出,点击刷新ADB。如果遇到连接问题,请参考安卓连接常见问题:https://airtest.doc.io.netease.com/idedocs/FAQ/1 _常见% 20问题/
将手机连接到Airtest后,将在手机中安装两个应用程序,如下所示:
Pocoservice是支持poco操作的app,yosemite是airtest的输入法。安装后,手机默认的输入法就会变成这个输入法。如果需要改回原来的输入法,需要在手机设置中手动修改。
远程连接已知IP和端口ip:port,AirtestIDE的远程设备可以直接连接。点击设备窗口中的远程设备连接按钮,在填充框中填充adb connect ip:port字段,点击连接按钮,远程设备将出现在设备列表中,点击连接按钮。无线连接参考:用adb无线连接手机。
当手机和电脑在同一个wifi下,可以尝试无线连接手机,但是这种方法受限于网络连接的稳定性,连接可能会不稳定。具体连接操作步骤如下:
确保手机开启了USB调试选项,先用USB线连接手机和电脑在电脑端执行命令adb tcpip 5555,其中5555是端口号,可以根据自己的需要指定,5555是默认值获取手机的ip地址,可以在手机设置-关于手机-状态信息-IP地址中找到。也可以执行adb ifconfig,看看USB线以后能不能拔掉。在AirtestIDE的远程设备连接处输入adb connect的手机ip:刚刚填写的端口号5555,点击连接,刷新adb后会在设备列表中看到连接的设备。如果由于网络波动、重启ADB等原因导致连接断开。,只需再次执行adb connect ip:port。
记录
点击记录按钮,选择要记录的事件,可以用鼠标操作。
介绍记录过程中各参数的作用。
Touch():点击操作,录制脚本时根据抓取的图像点击等待()。可以等着画面中的一张图出现。如果在指定的时间范围内匹配到图片,就会回到图片的焦点。否则抛出TargetNotFoundError的异常swipe():可以从一个位置滑动到另一个位置exists():判断图片中是否有图片,如果匹配则返回图片所在位置的焦点。否则返回Falsetext():输入文本sleep (): thread挂起Assert _ exists():Assert _ not _ exists():Assert _ not _ equal():Assert _ not _ equal():Assert _ exists():Assert _ not _ equal。与assert_equal()的区别在于,assert_exists断言的对象是图片,assert_equal断言的对象是数值,可以根据需要的参数进行配置。
一个简单的。air脚本分析。空气脚本是。下载解压Airtest脚本的专属IDE——AirtestIDE后,点击“新建脚本”按钮,一个后缀为的脚本文件。默认情况下,air是Airtest脚本的专有后缀。
让我们打开新创建的脚本的文件夹,我们可以看到。air script文件实际上是一个普通的文件夹,附加了一个同名的. py文件。当AirtestIDE执行脚本时,它实际上执行的是。py文件在里面。也就是说,虽然Airtest脚本自带了后缀,但本质上还是Python脚本,遵循Python语法,我们可以根据实际需要自由导入其他Python第三方库。
值得注意的是,在。air文件夹,否则在命令行执行airtest run test.air等运行指令时会导致失败。
初始化环境首先,就像普通的Python脚本一样,我们需要在代码文件的开头从Airtest.core.api import *开始编写,导入Airtest的所有主要api,以便在后续脚本中使用这些API。
Auto_setup是一个用于初始化环境的接口。界面文档在这里。它接受四个参数。我们可以设置当前脚本所在的路径,指定运行脚本的设备,设置默认日志路径,设置脚本父路径。
如果auto_setup没有传入任何参数,Airtest将读取从运行时命令行传入的参数来初始化环境。AirtestIDE创建脚本时,默认生成的代码是最简单的初始化代码auto_setup(__file__),也就是说脚本文件作为脚本路径传入,其他参数默认会从正在运行的命令行读取。运行命令行的脚本有两种形式。命令行中的参数包括设备、日志等。
在命令行上运行Airtest脚本的示例:> airtest run untitled。air --devicedandroid://手机设备号--log log/。有关使用命令行运行脚本的更多信息,请参考文档。当使用AirtestIDE运行脚本时,会在“日志视图窗口”中自动生成一个可用的命令行供您参考。" D:/AirtestIDE -path/AirtestIDE " runner " D:/script -path/untitled . air " --device Android://127 . 0 . 0 . 1:5037/5pztqwqoges 8 rwug --log " C:/Users/Username/appdata/local/temp/airtest ide/scripts/aa 8 C 71 ADC fa 70 C 3068 b 862 CB 42 FB 8 DC "设备连接如果设备参数如-Device如果设备在初始化期间没有连接,可以使用脚本代码中的connect_device接口来连接设备。Airtest支持在一个脚本中同时连接多个设备,可以使用set_current接口在多个设备之间进行切换,device()接口可以获取当前使用的设备。单击Airtest作为模拟人工操作的自动化测试框架。常见的界面有:
触摸点击某个位置,可以设置点击位置、次数、保持时间等参数。将幻灯片从一个位置滑动到另一个位置。text调用输入法输入指定内容。keyevent输入一个按键响应。例如,Enter键和Delete键等待指定的图片元素来拍摄当前图片的快照。其他核心API请参考本文档。本文档页面中出现的API都是跨平台API。由于我们在代码的第一行导入了airtest.core.api中的所有接口,所以可以在代码中直接调用这些api,就像这样:
来自airtest。core.apiimport * touch ((x,y))在很多界面中,模板图像对象是作为参数支持的,运行时会点击图像在屏幕中的位置,像这样:
#相当于touch((x,y)),(x,y)),(x,y)是图片的中心点(Template(r " TPL 1556019871196 . png ",record _ pos = (0.204,-0.153),resolution = (1280,720)。Airtest会首先尝试在当前图片中找到一个可以匹配这个图片的位置。如果找到了,它会点击这个坐标。如果没有找到,它将抛出一个识别异常。我们将在后面更详细地介绍模板图像类。
安装包1)安装Airtest框架pip使用PIP安装Airtest。
2)如果运行代码时在cv2模块中找不到指定模块的错误,请使用低于3.7的python版本直接运行:
Pip卸载opencv -contrib-python #如果下面的安装语句运行失败,可以尝试将PIP更新到最新版本,重试PIP安装opencv -contrib -python = = 3.2.0.7 3)POCO安装。
安装poco框架pip使用PIP安装pocoui。请注意库名是POCOUI,不要填错。
除了跨平台API之外,Airtest的基本操作方法还有特定于平台的API,比如:
Airtest.core.android # Android平台airtest.core.ios #苹果平台airtest.core.win #Windows平台在这里我们就来详细说说这些模块。
跨平台API模块
这里我们要介绍的第一个是跨平台模块:
从airtest.core.api导入* #导入所有方法1)。初始化设备。
我们也有两个方案来初始化这里的设备。请看下文:
根据设备的UUID进行初始化。
语法格式:
Init _ device (platform = "Android ",uuid = ",cap _ method = javacap for Android)# Platform–Android,IOS或Windows # uuid–目标设备的uuid,例如,serialno for Android,Handle for Windows,UUID # kwargs for IOS–可选的特定于平台的关键字args,例如cap _ method = Java cap for Android。让我们列举一些例子如下:
Init _ device (platform = "Android ",uuid = "127.0.0.1: 62001 ",cap _ method = "javacap ")根据设备的URL进行初始化。
语法格式如下:
Android:///连接当前Android设备Android://ad host:ADB port/serial no。?cap _ method = Java cap & touch _ method = ADB Windows://连接本地桌面程序IOS://连接IOS设备。这里主要通过传入连接的梦魇模拟器的ADB地址、端口、序列号来连接。具体例子如下:
connect _ device(" Android://127 . 0 . 0 . 1:5037/127 . 0 . 0 . 1:62001?cap _ method = Java cap & touch _ method = ADB ")2)。返回当前活动的设备。
设备()
3).设置当前活动的设备。
有时候如果我们连接多个设备,需要切换,就用这个功能来达到目的。您可以使用设备索引或设备的序列号进行切换。
set _ current(0)set _ current(" 127 . 0 . 0 . 1:62001 ")4)。运行环境的配置。
Auto_setup(basedir = None,devices = None,logdir = None,project_root = None,compress = 0 )basedir设置当前脚本的位置,__file__也是可以接受的。Devices指定当logdir设置脚本以列表形式运行时,运行脚本的设备存在于日志保存路径中。默认值为None,设置为True保存project_root设置api的项目根目录。5).打开并执行远程Shell命令。
Shell(cmd) #ls/data/local/tmp 6)。在设备上启动程序。
Start_app("启动的应用包名称")7)。停止设备上的程序。
Stop_app("已启动的应用包名称")8)。清除设备上的应用程序数据。
Clear_app("已启动的应用包名称")9)。在设备上安装应用程序。
Install(filepath= "要在目标设备上安装的文件的路径")10)。卸载设备上的应用程序。
卸载(“应用程序包名称”)11)。截图保存到文件。
Snapshot (filename = "1.jpg ",msg = "hello ",quality = 3) filename:图片名称msg:截图质量的简短描述:图像质量,在[1,99]范围内的整数12)。唤醒并解锁设备。
唤醒(“设备”)13)。返回目标设备的主屏幕。
家庭(“设备”)14)。在设备屏幕上点击、滑动、挤压、按键和输入。
Click(v=Template(x,y),times=2) # Click V:触摸目标,可以是模板的实例,也可以是绝对坐标(x,y)times:触摸多少次double_click() #双击swipe(v1,v2)#滑动起点和终点Swipe (v1,vector = (x,y) Vector可以是坐标或屏幕百分比#返回值:原点位置和目标位置pinch()# Pinch操作,相当于缩放。参数如下:in_or_out:放大或缩小中心:默认值为None,表示屏幕中心的屏幕百分比;默认值为0.5 key event(keyname = " Home ")# key operation text(" text ")# In。
Sleep(2)#睡眠两秒,延时两秒wait (v,timeout,intervalfunc) #等待匹配设备屏幕上的模板v:等待目标对象time out:time out interval:interval func:每次尝试寻找对应匹配不成功后调用返回值:匹配目标的坐标16)。检查给定的。
Exists(v)v:如果对象找不到目标,则为False,否则返回目标的坐标。17).找到出现在设备屏幕上的所有目标,并返回它们的坐标。
Find_all(v)v:找到目标,返回坐标列表18)。断言操作
Assert_exists(v,msg) # assert_not_exists(v,msg) #断言目标在设备屏幕上不存在v:要检查的目标msg:断言的简短描述assert_equal(v1,v2,msg) #断言两个值相等_ not _ equal (v1,v2,msg) #断言两个值不相等v1:第一个值v2:第二个值msg:断言的简短描述。基本上,我们已经使用完了这里的方法。来做实际操作吧,下一篇文章很快就会呈现。
使用from airtest.core.api import *#连接本地Android设备connect _ device ("Android://") #安装待测软件,以及路径信息。Install("path/to/your/apk")#开始运行AppStart _ App(" com . Pingan . certina App ")#点击一张图片,图片是根据Airtest中的图像识别语法自行提供的。touch(Template(" image _ of _ a _ button . png ")#滑动语音,用开头图片和结尾图片滑动(template ("slide _ start.png ")、Template ("slide _ end.png") #添加断言图片assert _ exists(Template(" success . png "))#点击返回键#keyevent("BACK")#点击Android上的Home键返回# Home()# Uninstall(" package _ name _ of _ your _ apk ")poco sample # -* -encoding = utf 8-* -_ _ author _)从poco . drivers . Android . ui automation导入AndroidUiautomationPoco = AndroidUiautomationPoco(use _ air test _ input = True,screen shot _ each _ action = false)poco(" com . miui . home:id/workspace ")。后代(“计算器”)。后代(" com.miui.home: id/icon _ icon ")。点击()poco(" com . miui . calculator:id/BTN _ c _ s ")。单击()poco(" com . miui . calculator:id/digit _ 7 ")。点击()poco(" com . miui . calculator:id/op _ add ")。单击()Poco(" com . miui . calculator:ID/digit _ 5 ")。点击()Poco(" com . miui . calculator:ID/BTN _ equal _ s ")。Click () Poco辅助窗口通过元素自身的属性定位元素。常用的API如下:Attr ('type '):提取指定元素属性的值为type get_text():提取指定元素的文本内容Attr ('text '):通过给定的属性名检索ui元素的属性。如果属性不存在,返回none(属性包括可视、文本、类型、位置、大小、名称等。)exists():判断当前屏幕上是否存在指定元素,是否存在trueclick():点击事件,假点击([0.5,0.5]),焦点([0.5,0.5])。click()点击控制中心位置rclick():右击double_click():双击操作long_click():长按操作swipe:滑动事件,如:swipe ([0.2,-0.2),持续时间。持续1秒的拖动:拖动事件,如POCO (text = '要拖动的位置')。Drag _ to (POCO (text = '目标位置'))focus(本地定位):本地定位,比如POCO('控制地址')。焦点(“中心”)。点击(。
多部手机交互如果案例中涉及两部手机,您可以在中连接多部手机。py文件。如果需要在哪个手机上操作,需要使用脚本中的set_cerrent()借口切换到对应的手机上。
device 1 = " c 17 a4 CB 4 " # device 1 device 2 = " rkk 0217 c 15003363 " # device 2 device 1 = connect _ device(" Android://127 . 0 . 0 . 1:5037/"+device 1)#连接设备1 device 2 = connect _ device(" Android://127 . 0 . 0 . 1:5037/"+device 2)#连接设备2 poco 1 = androiduiautomationpoco(dev 1)#初始化设备1poco2 =例如,在切换到移动电话2的情况之后,可以执行相关设备的poco操作。例如:
这个例子是打开微信,点击聊天消息中的一个好友,然后清除好友聊天的例子;
来自poco。drivers.android.uiAutomation导入androiduiautomotiononcodedevice 1 = " c 17 a4 CB 4 " # de v1 = Connect _ device(" Android://127 . 0 . 0 . 1:5037/"+device 1)#连接主人的手机poco 1 = androiduiautomotionpoco(de v1)#实例化手机auto _ setup (_ _ file _ _) def clear _微信(poco): #清除微信start_app("com.tencent.mm ")的聊天记录#启动微信睡眠(点击()#点击好友“三星”的聊天poco 1(“Android . support . V7 . widget . linearrayoutcompat”)。点击()#点击更多poco1(text= "空聊天记录")。点击()#点击清空聊天记录poco1(text= "清空聊天记录")。Click()# Click empty stop _ app(" com . Tencent . mm ")#关闭微信引用其他air文件的方法。如果有很多重复的操作,可以把这些重复的操作写入一个通用的air文件。
比如有一个名为gongyou.air的文件,里面包含了一个clear_wechat方法。这个clear_wechat方法是清除微信聊天记录的用例。如果你需要在用例中使用这个clear_wechat,你需要在用例中引用这个文件,然后把它倒入这个引用文件中的clear_wechat方法,如下:
# -* -encoding = utf8 -* -_ _ author _ _ = " xhong " from air test . core . API import * from poco . drivers . Android . ui automation import androiduiautomationpoco from poco . exceptions import poco . exceptions import poco Otargettimeoutst。project _ root = " d:/code/air test case " # Path using(" gongyou . air ")来自公友importclear _微信参考:https://www.jianshu.com/p/. 32d 08455 e86f https://blog . csdn . net/sunxi Tao 970324/article/details/105731046 http://testerhome.com/topics/20704 https://cloud.tencent.com/developer/ article/1819833 https://zhuanlan.zhihu.com/p/165527546 https://blog.csdn.net/chqj_163/article/details/109242399
AirtestIDE连接安卓真机及常见问题:https://www.cnblogs.com/songzhenhua/p/14716116.html AirTest连接设备黑屏或运行minicap超时:https://blog.csdn.net/qq_32394351/article/details/112512540
评论前必须登录!
注册