http://t.csdn.cn/mBLPj

airtest自动化测试框架

  • 01airtest基础及安装
    • 1.1airtest简介
    • 1.2 airtest安装方式
      • 1.2.1 python方式
      • 1.2.2 AirTestIDE
    • 1.3 环境依赖(真机/模拟器/windows应用)
      • 1.3.1 模拟器连接(采用mumu)
      • 1.3.2 android 真机连接
        • abd连接
        • airtestIDE 连接真机
      • 1.3.3 ios真机连接
        • 环境依赖
        • 连接步骤
      • 1.3.4 windows应用连接
      • 1.3.5 windows应用连接
    • 1.4 airtest布局
    • 1.5 快速使用
    • 1.6 常用api
      • 1.6.1 touch
      • 1.6.2 swipe
      • 1.6.3 text
      • 1.6.4 keyevent
      • 1.6.5 snapshot
      • 1.6.6 wait
      • 1.6.7 exists
      • 1.6.8 sleep
    • 1.7 断言
    • 1.8 综合demo(同花顺登陆)
  • 02 web应用程序自动化(酷狗音乐播放)
  • 03 微信小程序(平安证券为例)
  • 04 微信公众号(平安证券)

01airtest基础及安装

1.1airtest简介

官网文档:https://airtest.readthedocs.io/en/latest/
Airtest Project:是由网易游戏推出的一整套UI自动化项目,其包含3个部分:Airtest、Poco、AirtestIDE。
Airtest框架:是一个跨平台的、基于图像识别的UI自动化测试框架,适用于游戏和App,支持Windows、Android和iOS平台。是Python的一个第三方包,和Selenium、requests包一样。
Poco框架:是一款基于UI控件识别的自动化测试框架,目前支持Unity3D/cocos2dx-*/Android原生app/iOS原生app/微信小程序,也可以在其他引擎中自行接入poco-sdk来使用(游戏必须接入Poco-SDK)。是Python的一个第三方包,和Selenium、Requests包一样。
AirtestIDE:集成开发环境(IDE,Integrated Development Environment)是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。所以AirtestIDE就是用来编写airtest、Poco自动化代码的编辑器,其功能包含:编写代码、调试、截图、查看App控件、录制、报告等。

1.2 airtest安装方式

1.2.1 python方式

  • 命令:
pip3 install -U airtest -i https://pypi.douban.com/simple/
  • 说明︰安装python的AirTest库,通过python代码直接调用AirTest库的Api方法
  • 提示︰此种方式,需要一定python代码基础


1.2.2 AirTestIDE

  • 说明:AirTestIDE工具自带python环境,无需单独安装。
  • 提示:使用工具可以录制操作,也可以手动编写调用api

1. 官网下载

  • 下载链接:https://airtest.netease.com/changelog.html

2. 解压

3. IED启动方式

  • 右键以管理员身份运行 AirtestIDE.exe 启动
  • 右键以管理员身份运行兼容模式启动.bat启动

1.3 环境依赖(真机/模拟器/windows应用)

1.3.1 模拟器连接(采用mumu)

1. 官网下载

  • 地址:https://mumu.163.com/


    2. 双击安装(为了速度,本次装在固态硬盘)

3. 启动

4. 配置



5.打开开发者模式:多次点击版本号,即可开启开发者模式


6. 打开usb调式模式


7. 连接模拟器


1.3.2 android 真机连接

参考来源:https://blog.csdn.net/chengyq116/article/details/108296042

abd连接

1. 数据线连接手机
2. 打开开发者模式

  • “设置”–>“关于手机”–>连续点击“版本号”,即可以打开

3. 选择usb配置模式

  • “系统和更新”–>“开发人员选项” -->进入“选择USB配置” --> 选择"RNDIS(USB以太网)"


4. “系统和更新”–>“开发人员选项” -->打开“USB调试”开关


5. adb连接设备

C:\Users\jsonliu>adb kill-serverC:\Users\jsonliu>adb start-server
adb server version (40) doesn't match this client (41); killing...
* daemon started successfullyC:\Users\jsonliu>adb devices
adb server version (40) doesn't match this client (41); killing...
* daemon started successfully
List of devices attached
AN2FUT1B19000032        device

6. 启动adb server

adb kill-server
adb -a -P 5037 nodaemon server # 指定端口
adb -a nodaemon server # 使用默认端口

airtestIDE 连接真机





1.3.3 ios真机连接

环境依赖

1. ios-Tagent :

  • 作用︰在手机上创建一个WebDriver服务器,可用于远程控制iOS设备,定位UI元素
  • 下载:https://github.com/facebookarchive/WebDriverAgent
  • 运行依赖:xcode

2. xcode

  • 作用:ios开发集成工具,在这理主要作用为运行WebDriverAgen文件到手机
  • 下载:AppSotre->平台搜索xcode
  • 运行依赖:开发者账号
  • xcode配置(前提:使用xcode打开下载的webDrvierAgent)
    • 添加开发者账号(普通的apple ID即可)
    • 配置WebDriverAgent ( Team、Product Bundle Identifiier)
    • 测试运行WebDriverAgentRunner到手机

3. iproxy

  • 作用:设置代理将iPhone端口映射到电脑端口,通过访问电脑的端口访问到手机的端口
  • 下载: brew install libimobiledevice
  • 运行:iproxy 8100 8100

4. 验证

  • 查看:打开浏览器输入http://127.0.0.1:8100/status出现json格式连接信息
  • 抓屏:http://127.0.0.1:8100/inspector

5. AirtestIDE工具:下载ios版

连接步骤

1. 将真机使用数据线连接电脑
2. 启动xcode并打开配置好的iOS-Tagent项目(菜单-Product->Test启动自动化服务程序)
3. 打开终端运行:iproxy 8100 8100(启动端口映射服务程序)
4. 启动AirTestIDE工具(连接ios设备-> connect按钮)
5. 注意事项

  • 在xcode中点击Test前,检查项目默认终端是否选择真机设备
  • 点击在xcode中Test之后,要查看控制信息,如果控制台没任何信息输出,可以等待或者多Test几次,直到控制台输出启动相关信息
  • xcode配置iOS-Tagent只需第一次配置,之后使用无需在单独配置,切莫乱修改参数
  • 真机设备中,要开启自动化测试和信任iOS-Tagent项目

1.3.4 windows应用连接

1. 点击菜单栏的"选项"–>点击“设置”,在"selenium"栏选择chrome安装的路径
2. 启动浏览器:会默认生成需要导入的库文件代码,不需要手动编写
3. 简单测试





1.3.5 windows应用连接

  1. 打开要测试的web应用–>“windows窗口连接” -->点击“搜索窗口” -->“refresh” -->



1.4 airtest布局

  • ①菜单栏和②快捷按钮:创建新项目,保存项目,运行脚本和检查报告输出
  • ③基于图像识别框架:
  • ④poco库:支持主流游戏引擎、Android应用程序
  • ⑤selenium windows :web项目框架
  • 脚本编辑器:
  • ⑥脚本编辑区域:
  • ⑦log日志:
  • ⑧实时手机屏幕:支持使用鼠标事件远程控制设备

1.5 快速使用

1. 新建脚本类型选择

  • .air AirTest项目︰生成一个项目名称.air目录,目录下有一个项目名.py文件
  • py纯Python(高级用户)︰生成一个项目名.py文件
  • 区别:
    • 相同点︰都是python文件
    • 不同点∶脚本文件初始化代码不同,一个采用默认值无法看到,一个可以看到默认值,进行修改

2. 元素定位和元素操作

3. 运行脚本

  • F5/鼠标右键运行
  • 命令行运行:
    • 需要安装的一些依赖

      • airtest
      • pocoui
      • pynput
airtest run 脚本名.air --device Android:///手机设备号 [--log 日志路径]
python -m airtest run 脚本名.air --device Android:///手机设备号 [--log 日志路径]
python -m airtest run 脚本名.air # web运行命令




  • bat批处理文件执行测试脚本
echo offw当echo设置off值的时候,那么下面的指令都将只执行而不显示
C:
cd C:\xxxx\airtestFramework
start airtest run 脚本名.air
exit

4. 查看报告(control+L)

5. 常用快捷键

  • F5:脚本运行
  • Ctrl+L:报告查看
  • shift+F5:脚本停止
  • control+S:保存

6. 代码注释

  • """""" 多行注释
  • # 单行注释
  • 快捷键:control+?


1.6 常用api

1.6.1 touch

  • touch(v,times=1,duration=0.01,right_click=False)
  • 常用参数:
    • v:点击的图片或者坐标
    • times:点击次数。默认1次
    • duration:按住时间,默认0.01s
      - right click: windows有效

1.6.2 swipe

  • 作用:从屏幕一个位置滑动到屏幕的另一个位置
  • 常用参数:
    • v1:图片或坐标(x,y)
      -v2:图片或坐标(x,y)
    • vector:[x,y]录制时自动生成,记录了屏幕中的滑动比例,向右为x周正向,向下为Y轴正向
    • duration:滑动操作持续时长,默认0.5秒
    • 坐标点使用时,每组值需要使用()

实现滑屏方式

1. 基于屏幕录制

2.基于图片实现

3_1基于屏幕坐标实现:直接输入坐标

from poco.drivers.unity3d import UnityPoco
poco = UnityPoco()
# 向下滑到底部
poco.swipe([0.5,0.9],[0.5,0])
# 向上滑到顶部
# poco.swipe([0.5,0.1],[0.5,0.9])

3_2基于屏幕坐标实现:根据屏幕尺寸方式

# 获取当前屏幕宽高
width, height = device().get_current_resolution()
# 校准滑动的起点和终点
start_pt = (width / 2, height * 0.9)
end_pt = (width / 2, height * 0.1)
swipe(start_pt, end_pt, duration=2)

1.6.3 text

  • 作用:输入文本操作
  • 常用参数:
    • text:要输入的文本(注︰输入的位置为当前页面默认焦点元素一般配合touch一起使用)
    • enter:完整输入后自动执行Enter操作,默认为True
    • search:完成输入后强行执行search操作,默认为False

1.6.4 keyevent

  • 作用:模拟键盘按键输入,支持键码
  • 键常用参数:
    • keyname:键码或键名
    • android keycode参考:https://www.cnblogs.com/findyou/p/5614178.html
    • 常用键名:键码
    键名                 按键      键码
    KEYCODE_ENTER           回车      66
    KEYCODE_FORWARD_DEL     删除      112
    KEYCODE_CLEAR           Clear       28
    KEYCODE_TAB             Tab键        61
    KEYCODE_HOME            Home        3
    KEYCODE_BACK            返回键     4
    KEYCODE_SEARCH          搜索键     84
    KEYCODE_DEL             退格键     67
    KEYCODE_SPACE           空格键     62
    

1.6.5 snapshot

  • 作用:截取当前屏幕图片,可以在测试报告显示。
  • 常用参数:
    • Filename:保存截屏为指定文件
    • msg:描述测试点,可以在HTML报告中呈现

1.6.6 wait

  • 作用:等待某个元素出现,如果出现返回元素的中心点坐标,否则抛出TargetNotFoundError异常
  • 常用参数:
    • v:图片
    • timeout:等待超时,默认为20
    • sinterval:每次匹配的时间间隔,默认为0.5s
    • intervalfunc:图片没有找到就执行后面的函数,默认为None

1.6.7 exists

  • 作用:判断图片是否存在,如果存在就返回图片的中心坐标,不存在就返回False
  • 常用参数
    • v:图片
    • return:返回值,如果存在就返回图片的中心坐标,不存在返回False


1.6.8 sleep

  • 作用:暂停时间
  • 常用参数
    • secs:延迟时间(s),默认1.0s

1.7 断言

1. assert_exists

  • 作用︰断言(判断)页面存在元素
  • 常用参数
    • v:图片(要判断页面是否存在元素)
    • msg:描述测试点
    • return:找到图片则返回图片中心点坐标,否则将raise AssertionError

      2. assert_not_exists
  • 作用:断言(判断)页面不存在元素
  • 常用参数
    • v:图片(注:判断当前页面不存在图片元素,不存在通过,存在失败)
    • msg:描述测试点(测试报告中显示)

      3. assert_equal
  • 作用:判断第一个值与第二个值相等
  • 常用参数
    • first:第一个值
    • second:第二个值
    • msg:描述此断言语句对应的测试点内容

4. assert_not_equal

  • 作用:判断第一个条目与第二个条目不相等
  • 常用参数
    - first:第一个值
    - second:第二个值
    - msg:描述此断言语句对应的测试点内容

1.8 综合demo(同花顺登陆)

  1. 大体流程:点击头像–>点击账号登陆 -->输入用户名、密码 --> 勾选协议 -->点击登陆 -->断言登陆成功(用户id) --> 点击设置 --> 拉到页面底部 --> 点击“退出当前账号” --> 确定 -->判断"登陆账号 体验更多服务存在" 再 back




02 web应用程序自动化(酷狗音乐播放)

大体流程:点击搜索框–>输入歌名–>点击播放

  • IDE运行

脚本:

# -*- encoding=utf8 -*-
__author__ = "jsonliu"from airtest.core.api import *auto_setup(__file__)
for i in range(3):if exists(Template(r"tpl1654356304880.png", record_pos=(0.033, -0.316), resolution=(1018, 720))):touch(wait(Template(r"tpl1654356314479.png", record_pos=(0.031, -0.316), resolution=(1018, 720)))
)touch(wait(Template(r"tpl1654356195086.png", record_pos=(-0.045, -0.316), resolution=(1018, 720)))
)text("我会好好的")sleep(1)touch(wait(Template(r"tpl1654355322512.png", record_pos=(-0.296, -0.065), resolution=(1020, 720)))
)touch(wait(Template(r"tpl1654355071000.png", record_pos=(-0.298, 0.109), resolution=(1020, 720)))
)if exists(Template(r"tpl1654355241031.png", record_pos=(-0.392, 0.141), resolution=(1020, 720))):touch(Template(r"tpl1654355241031.png", record_pos=(-0.392, 0.141), resolution=(1020, 720)))

03 微信小程序(平安证券为例)

1.前置条件:

  • airtest连接真机/模拟器

    • 提示:真机存在闪退现象
  • 安装微信app
  • 注册并成功登录微信账号

2.实现功能:

  • 打开微信–>搜索“平安证券”小程序
  • 点击“我的”–>点击“搜索”
  • 点击基金搜索框–>清除输入框–>输入基金编码/名称的全部值或部分值
  • 点击“+” —>截取当前屏幕—>断言文本等于“自选已添加”
  • 点击“√” —>断言文本显示“自选已删除”
  • 环境清理:退出返回到微信首页

3.大体流程

  • 创建项目
  • 编写脚本
  • 运行测试用例
  • 查看报告






4.自动化脚本

# -*- encoding=utf8 -*-
__author__ = "jsonliu"from airtest.core.api import *
auto_setup(__file__)ym = "com.netease.nie.yosemite/.ime.ImeService"
bd = "com.baidu.input_hihonor/com.baidu.input_huawei.ImeService"
def set_ime(ime):# 输入法切换shell("ime enable " + ime) # 启动指定输入法shell("ime set " + ime) # 设置指定输入法
# set_ime(ym)
def safe_keyboad(num_l):l = []for i in num_l:if i==0:num = wait(Template(r"tpl1654415856731.png", record_pos=(0.0, 0.902), resolution=(1080, 2340)))elif i==1:num = wait(Template(r"tpl1654415157979.png", record_pos=(-0.33, 0.427), resolution=(1080, 2340)))elif i==2:num = wait(Template(r"tpl1654415172531.png", record_pos=(-0.002, 0.428), resolution=(1080, 2340)))elif i==3:num = wait(Template(r"tpl1654415225016.png", record_pos=(0.333, 0.424), resolution=(1080, 2340)))elif i==4:num = wait(Template(r"tpl1654415682693.png", record_pos=(-0.334, 0.586), resolution=(1080, 2340)))elif i==5:num = wait(Template(r"tpl1654415692437.png", record_pos=(-0.001, 0.589), resolution=(1080, 2340)))elif i==6:num = wait(Template(r"tpl1654415704268.png", record_pos=(0.333, 0.589), resolution=(1080, 2340)))elif i ==7:num = wait(Template(r"tpl1654415733890.png", record_pos=(-0.331, 0.748), resolution=(1080, 2340)))elif i ==8:num = wait(Template(r"tpl1654415818604.png", record_pos=(0.002, 0.741), resolution=(1080, 2340)))elif i == 9:num = wait(Template(r"tpl1654415826674.png", record_pos=(0.333, 0.747), resolution=(1080, 2340)))l.append(num)return ldef open_wechat_and_search():# 1. 打开微信并搜索“平安金融”小程序touch(wait(Template(r"tpl1654419360669.png", record_pos=(-0.353, 0.555), resolution=(1080, 2340)))
)touch(wait(Template(r"tpl1654409526583.png", record_pos=(0.324, -0.934), resolution=(1080, 2340)))
)touch(wait(Template(r"tpl1654410169024.png", record_pos=(-0.338, -0.929), resolution=(1080, 2340)))
)keyevent("clear")text("平安证券")keyevent("66")touch(wait(Template(r"tpl1654410492936.png", record_pos=(-0.143, -0.245), resolution=(1080, 2340)))
)   for i in range(3):if exists(Template(r"tpl1654423805902.png", record_pos=(-0.322, -0.294), resolution=(720, 1280))):touch(wait(Template(r"tpl1654423613589.png", record_pos=(-0.257, -0.172), resolution=(720, 1280)))
)           breakelse:sleep(2)def fund_search():# 2. 搜索对应基金并添加自选touch(wait(Template(r"tpl1654423981398.png", record_pos=(0.246, 0.826), resolution=(720, 1280)))
)touch(wait(Template(r"tpl1654422851414.png", record_pos=(-0.372, -0.42), resolution=(1080, 2340)))
)sleep(10)touch(wait(Template(r"tpl1654424437787.png", record_pos=(0.433, -0.683), resolution=(720, 1280)))
)touch(wait(Template(r"tpl1654424451052.png", record_pos=(0.3, -0.439), resolution=(720, 1280)))
)for i in range(3):if exists(Template(r"tpl1654424792042.png", record_pos=(-0.01, -0.686), resolution=(720, 1280))):touch(wait(Template(r"tpl1654424870398.png", record_pos=(-0.028, -0.569), resolution=(720, 1280)))
)                else:sleep(5)keyevent("28")text("诺安成长")keyevent("66")touch(wait(Template(r"tpl1654422056528.png", record_pos=(0.433, -0.388), resolution=(1080, 2340)))
)snapshot(msg="添加自选")assert_equal("自选已添加","自选已添加")touch(wait(Template(r"tpl1654422150769.png", record_pos=(0.43, -0.387), resolution=(1080, 2340)))
)assert_equal("自选已删除","自选已删除")def test_fund_add_optional():# 退回到手机桌面while not exists(Template(r"tpl1654419360669.png", record_pos=(-0.353, 0.555), resolution=(1080, 2340))):keyevent("4")open_wechat_and_search()fund_search()# 退回到微信首页while not exists(Template(r"tpl1654419202677.png", record_pos=(0.288, -0.925), resolution=(1080, 2340))): keyevent("4")
test_fund_add_optional()

04 微信公众号(平安证券)

测试方法与小程序差不多

airtest自动化测试相关推荐

  1. airtest自动化测试_自动化测试必备实用工具,帮你提高工作效率|Gitee项目推荐...

    今天,小编从Web UI 测试.API 测试.数据库测试.接口测试.单元测试.性能测试等方面,为大家整理了 Gitee 上优秀的自动化测试开源项目,希望能给大家带来一点帮助.不足之处,欢迎讨论交流:) ...

  2. airtest自动化测试_【游戏职业说】我在网易做测试开发(QA)

    许多计算机专业的同学都听说过"测试开发工程师"这一岗位,或许你会有疑惑: 1."测试开发"与"测试"和"开发"有什么区别 ...

  3. Airtest自动化测试工具介绍

    官方网站:http://airtest.netease.com/ Airtest IDE: 跨平台的UI自动化测试编辑器,适用于游戏和App,详细参见官网文档:http://airtest.netea ...

  4. appium和airtest_关于Airtest自动化测试工具

    一开始知道Airtest大概是在年初的时候,当时,看了一下官方的文档,大概是类似Sikuli的一个工具,主要用来做游戏自动化的,通过截图的方式用来解决游戏自动化测试的难题.最近,移动端测试的同事尝试用 ...

  5. Windows下搭建Airtest自动化测试环境

    一.下载python <1>去官网下载: https://www.python.org/ <2> 百度网盘分享,python-3.5.1.exe: 链接:https://pan ...

  6. Airtest自动化测试实操案例 | iOS应用篇

    前言 上一篇推送我们聊到了Windows应用的实操案例,而今天我们想跟大家聊一聊 iOS设备的实操案例 .因为之前很多同学都反馈说,官方教程里面,绝大多数都是安卓设备的实操,Windows应用和iOS ...

  7. Airtest自动化测试——批量执行脚本(实测)

    最近在使用airtest进行app自动化,但是只能单个执行,实际需要批量执行.看了网上很多文章,其实很多都没真正实践或者说实践不完全,用的不好用.所以,就自己在那些文章的基础上进行了改进与优化. 一. ...

  8. Airtest自动化测试篇——python编写和执行用例(下)

    目录 导包 连接设备 编写脚本 生成报告 3.2.2 断言 3.2.2.1 断言存在 assert_exists(v, msg="")设备屏幕上存在断言目标 参数: v – 要检查 ...

  9. Airtest自动化测试篇——python编写和执行用例(上)

    目录 导包 连接设备 编写脚本 生成报告 导包 主要需要导入三个包: 从airtest.core.api中import所有API from airtest.core.api import from a ...

  10. 软件测试学习资料之Airtest自动化测试(4)——AirtestIDE编写和执行用例

    目录 连接设备 编写脚本 运行脚本 查看报告 选项配置 查看报告 点击查看报告按键就可以查看报告 也可以右键单击代码区文件标题栏选择查看报告 4.1 报告内容 测试报告大致由两部分组成: 上半部分: ...

最新文章

  1. LAMP环境搭建之rpm软件包
  2. 遗传算法对于神经网络的优生优育
  3. 在 emu8086 中学习汇编In,Out指令
  4. Vite+Vue3页面空白、图标不显示问题解决
  5. SQLAlchemy中filter_by()和filter()的用法不同
  6. 说说那些死于决斗的大牛
  7. treeset java_Java TreeSet add()方法与示例
  8. mysql 页面跳转_Springboot+MyBatis+mysql+jsp页面跳转详细示例
  9. nhibernate mysql配置_NHibernate各种数据库连接参数文件配置方法说明
  10. 位运算之左移右移运算之详解
  11. 易语言mysql清空一个表_易语言高级表格清空.doc
  12. MDF /IDF名词解析
  13. java基于JSP+Servlet的员工绩效考核系统
  14. 修改android 工程图标,AndroidStudio替换项目图标ic_launcher操作
  15. android sqlite回滾,SQLIte这么娇小可爱,不多了解点都不行啊
  16. mcafee 8.5i杀毒软件规则配置
  17. 一,EAIDK-310开箱
  18. 排除AP无法上线原因
  19. 拼多多分享好友砍价Java实现_拼多多砍价怎么发到qq?怎么帮好友砍价?
  20. 网址大放松 让网络一族网上过个新年(转)

热门文章

  1. app开发预算究竟多少?看你多花了多少冤枉钱
  2. 问题解决:虚拟机无法复制粘贴文件
  3. linux-mount-iso
  4. 安卓手机密码工作原理及破解方式
  5. 这次跟大家聊聊技术,也聊聊人生
  6. 计算机组成原理__第6章之硬盘存储器
  7. metricbeat的基本使用
  8. 北京地铁线路规划程序
  9. github使用Personal access tokens的方法
  10. usb共享远程服务器,USB Network Gate