Airtest自动化测试篇——python编写和执行用例(上)
目录
导包
连接设备
编写脚本
生成报告
导包
主要需要导入三个包:
从airtest.core.api中import所有API
from airtest.core.api import
from airtest.cli.parser import cli_setup
from airtest.report.report import simple_report
可以在AirtestIDE以.py方式创建脚本,复制其中的初始化代码
- 连接设备
2.1 基本的连接方式
可以使用以下语句进行设备连接:
if not cli_setup():
auto_setup(file,logdir=True,devices=[“android://127.0.0.1:5037/127.0.0.1:62025?cap_method=JAVACAP&&ori_method=MINICAPORI&&touch_method=MINITOUCH”,],project_root=“D:/pyworkspace/airtest_demo1/blackjack”)
当没有外部参数传入时,就调用auto_setup函数自动配置运行环境。
auto_setup的函数参数如下:
auto_setup(basedir=None,devices=None,logdir=None,project_root=None, compress=None)
自动配置运行环境,如果当前没有连接设备的话,就默认尝试连接Android设备。参数:basedir – 设置当前脚本的所在路径,也可以直接传 __file__ 变量进来devices – 一个内容为 connect_device uri 字符串的列表logdir – 可设置脚本运行时的log保存路径,默认值为None则不保存log,如果设置为True则自动保存在/log目录中project_root – 用于设置PROJECT_ROOT变量,方便 using 接口的调用compress – 屏幕截图的压缩比率,在[1, 99]范围内的整数,默认是10
主要修改的是auto_setup函数的两个参数:devices和project_root:
project_root:
设置为项目的根目录
devices:
修改这个参数就可以适配不同设备
也可以使用以前的connect_device进行设备连接
2.2 连接Android
连接前的准备工作和AirtestIDE基本一致:
电脑安装手机厂商的对应官方驱动
打开开发者选项,打开usb调试(部分手机还要打开允许模拟位置,允许通过usb安装应用)
插上数据线或通过wifi连接(注意关闭手机助手、豌豆荚等助手软件)
在手机端同意usb调试
devices:
#连接本地第一台手机
devices=[“android:///”,]
#连接远程手机或是模拟器
devices=[“android://127.0.0.1:5037/手机或模拟器IP:端口?cap_method=JAVACAP&&ori_method=MINICAPORI&&touch_method=MINITOUCH”,]
wifi连接手机
并先用USB线将手机和电脑连接起来,在电脑端执行命令 adb tcpip 5555 ,其中 5555 是端口号,可以根据自己的需求来指定,5555是默认值
获取手机的IP地址,可以在 手机设置-关于手机-状态信息-IP地址 里找到,也可以执行 adb ifconfig来查看
随后可以拔掉USB线,在AirtestIDE的 远程设备连接 处输入 adb connect 手机ip:刚才填入的端口号5555 ,点击连接,刷新ADB后就能在设备列表中看到连上的设备了
2.3 连接iOS设备
和AirtestIDE中准备工作一样,需要先在xcode安装iOS-Tagent:
https://github.com/AirtestProject/iOS-Tagent
devices:
#连接本地第一台手机
devices=[“iOS:///”,]:
#连接远程手机
devices=[“iOS:///127.0.0.1:8100”,]:
2.4 连接windows应用
devices:
连接windows桌面
connect_device(“Windows:///”)
根据窗口句柄连接,可以在AirtestIDE的设备窗口查看
devices=[“Windows:///396680”,]
连接windows应用标题正则表达式为:unity.*
connect_device(“Windows:///?title_re=unity.*”)
- 编写脚本
3.1 基础知识
3.1.1 Airtest的坐标系
Airtest主要使用的是绝对坐标系,即屏幕左上角为坐标原点(0,0),向右为x轴正向,向下为y轴正向,右下角坐标为最大分辨率,例如720x1280分辨率的手机,右下角坐标为(720,1280)
airtest的touch接口,实际上点击的是一个 (x, y)绝对坐标,在截图语句中,airtest会先根据传入的图片找到该图片在当前画面上的位置坐标,然后进行点击。
airtest的swipe接口,滑动起点和滑动终点使用的也是(x, y)绝对坐标。
3.1.2 操作图片的封装类Template
在对图像进行识别时,图像都被封装为一个Template类对象,其源代码为:
classTemplate(filename,threshold=None,target_pos=5, record_pos=None, resolution=(),rgb=False)
参数:
filename: 图片文件名
threshold:识别阈值,默认全局0.7
target_pos: 点击图片的点(默认为5)
record_pos: 录制时的点击相对屏幕中心点的相对坐标点,由两个0-1之间的浮点数构成
resolution: 录制时,屏幕的分辨率
rgb: 识别结果是否使用rgb三通道进行校验.
record_pos要和resolution配合一起使用
具体代码可参考源码:
https://airtest.readthedocs.io/zh_CN/latest/_modules/airtest/core/cv.html#Template
举例:
touch(Template(r"tpl1606371978472.png", record_pos=(0.194, 0.115), resolution=(720, 1280)))
3.2 常用api
3.2.1 模拟输入
3.2.1.1 touch点击
touch(v, times=1, **kwargs)在当前设备画面上进行一次点击
参数:
v:点击位置,可以是一个Template图片实例,或是一个绝对坐标 (x, y)
times:点击次数,默认一次
kwargs – 平台相关的参数 kwargs,请参考对应的平台接口文档
返回:
实际点击位置坐标 (x, y)
举例:
touch(Template(r"./pic/10k.png"))
touch(Template(r"tpl1606371978472.png", record_pos=(0.194, 0.115), resolution=(720, 1280)))
3.2.1.2 swipe滑动
swipe(v1,v2=None,vector=None,**kwargs)在当前设备画面上进行一次滑动操作
有两种使用方式:
swipe(v1, v2=Template(…)) # 从 v1 滑动到 v2
swipe(v1, vector=(x, y)) # 从 v1 开始滑动,沿着vector方向
参数:
v1:滑动的起点,可以是一个Template图片实例,或是绝对坐标 (x, y)
v2:滑动的终点,可以是一个Template图片实例,或是绝对坐标 (x, y)
vector:滑动动作的矢量坐标,可以是绝对坐标 (x,y) 或是屏幕百分比,例如 (0.5, 0.5)
**kwargs – 平台相关的参数 kwargs,请参考对应的平台接口文档
引发:
Exception – 当没有足够的参数来执行滑动时引发异常
返回:
原点位置和目标位置
举例:
swipe(Template(r"tpl1606727895882.png", record_pos=(-0.158, -0.104), resolution=(1320,722)),Template(r"tpl1606727841951.png", record_pos=(0.008, 0.108), resolution=(1320, 722)))
3.2.1.3 text输入
text(text, enter=True, **kwargs)在目标设备上输入文本,文本框需要处于激活状态(需要先点击一下输入框)
参数:
text:要输入的文本
enter:是否在输入完毕后,执行一次 Enter ,默认是True
返回:
None
3.2.1.4 keyevent按键
keyevent(keyname, **kwargs) 在设备上执行keyevent按键事件
参数:
keyname – 平台相关的按键名称
**kwargs – 平台相关的参数 kwargs,请参考对应的平台接口文档
返回:
None
举例:
#点击删除按键
keyevent(“KEYCODE_DEL”)
keyevent(“67”)
想返回上一个页面时,会选择按touch返回的UI按钮,但其实一般情况下keyevent(“BACK”)也可以达到目的,简单直接且兼容性又好
安卓平台的按键可以参考:https://developer.android.com/reference/android/view/KeyEvent.html
windows平台参考pywinauto支持的windows按键
iOS设备现在暂时 只支持 HOME 按键的keyevent
3.2.1.5 snapsshot截屏
snapshot(filename=None,msg="",quality=None, max_size=None)对目标设备进行一次截图,并且保存到文件中
参数:
filename – 保存截图的文件名,默认保存路径为 ST.LOG_DIR
中
msg – 截图文件的简短描述,将会被显示在报告页面中
quality – 图片的质量,[1,99]的整数,默认是10
max_size – 图片最大尺寸, e.g 1200
返回:
截图文件的绝对路径
3.2.1.6 wait等待
wait(v,timeout=None,interval=0.5,intervalfunc=None)等待当前画面上出现某个匹配的Template图片
参数:
v – 要等待出现的目标Template实例
timeout – 等待匹配的最大超时时长,默认为None即默认取 ST.FIND_TIMEOUT 的值,默认20s
interval – 尝试查找匹配项的时间间隔(以秒为单位),默认0.5s
intervalfunc – 在首次尝试查找匹配失败后的回调函数
引发:
TargetNotFoundError – 在超时后仍未找到目标则触发
返回:
匹配目标的坐标
【未完待续…】
Airtest自动化测试篇——python编写和执行用例(上)相关推荐
- Airtest自动化测试篇——python编写和执行用例(下)
目录 导包 连接设备 编写脚本 生成报告 3.2.2 断言 3.2.2.1 断言存在 assert_exists(v, msg="")设备屏幕上存在断言目标 参数: v – 要检查 ...
- 软件测试学习资料之Airtest自动化测试(4)——AirtestIDE编写和执行用例
目录 连接设备 编写脚本 运行脚本 查看报告 选项配置 查看报告 点击查看报告按键就可以查看报告 也可以右键单击代码区文件标题栏选择查看报告 4.1 报告内容 测试报告大致由两部分组成: 上半部分: ...
- Selenium3自动化测试——2. python编写简单自测代码
开发人员在编写好代码后,测试人员如何在另个测试文件中对开发人员的文件进行测试呢? 例如,开发人员的代码如下,名字为calculator.py. # 创建add函数 def add(a, b):retu ...
- Python编写定时执行脚本
import os import time import subprocess import datetime from apscheduler.schedulers.blocking import ...
- python读文件路径-python获取程序执行文件路径的方法(推荐)
1.获取当前执行主脚本方法:sys.argv[0]和_ file _ (1)sys.argv 一个传给Python脚本的指令参数列表.sys.argv[0]是脚本的名字.一般得到的是相对路径,用os. ...
- python基础编程:Python实现鼠标自动在屏幕上随机移动功能
这篇文章主要介绍了Python实现鼠标自动在屏幕上随机移动功能,具有很好的参考价值,希望对大家有所帮助.还等什么?一起跟随小编过来看看吧 本来想控制鼠标自动移动防止公司电脑自动休眠的策略,然而,实现了 ...
- python自动化测试篇一 简单介绍
一.什么是 Python Python 是一门编程语言,关于编程语言我们后面再详细讲.首先我们思考,为什么我们要学习 Python 1.为什么要学习 Python 1. 自动化 很多时候,虽然可以通过 ...
- 记事本写python怎么运行-从头学Python之编写可执行的.py文件
Python可是真强大.但他具体是怎么强大的,让我们一点一点来了解吧(小编每天晚上下班回家会抽时间看看教程,多充实下自己也是好的). 废话不多说,就讲一下这个背景吧: 事情是这个样子的~本着好学的精神 ...
- python编写脚本方法_python 定时器,实现每天凌晨3点执行的方法
如下所示: ''' Created on 2018-4-20 例子:每天凌晨3点执行func方法 ''' import datetime import threading def func(): pr ...
最新文章
- AngularJS2 + ASP.NET MVC项目
- linux中的软RAID实现,逻辑卷和btrfs文件系统
- qt mysql怎么选表_Qt的Mysql数据库表操作(1)
- android studio failed to open zip file,Android Studio出现Failed to open zip file问题的解决方法...
- android版本相机权限,Android 11系统权限收紧,第三方APP仅支持调用原生相机
- 刘子佼 mysql 下载_MySQL数据管理之备份恢复案例解析 23讲 Mysql备份恢复实战 视频教程...
- Polling 、Long Polling 和 WebSocket
- python - 输出最大/最小的 k 个元素的索引
- 阿里云图数据库GDB V3引擎发布,加速开启“图智”未来
- javascript md5加密算法
- 云计算学习教程,Python自动化运维开发实战
- Ubuntu系统上为用户授予和删除sudo权限的方法
- 微信客户端抽奖转盘效果
- 循环神经网络(RNN)详解
- 【论文笔记】韩家炜团队AutoPhrase:自动短语挖掘
- 杨校老师课堂之Hadoop环境搭建(一)
- 手把手教你使用VSS
- 谷歌中国解散 正式退出中国市场
- RS232串口接线图
- SVProgressHUD 的显示时间
热门文章
- netty服务端 JVM优化
- Linux安全关机命令以及相关命令介绍
- 前两天申元庆与黄启功在湖边聊天,带给了业内四大信号
- Google与卡片式设计
- 这个网站厉害了!办公必备软件工具一应俱全,让人相见恨晚
- java rowmapper 通用实现_RowMapper实现自动将一行数据映射到指定类的实例中
- Reconnaissance
- Centos解决Mysql异常Incorrect string value: ‘\xE6\xB5\x8B\xE8\xAF\x95‘ for column ‘name‘
- 计算机控制技术答案王书峰,模糊控制算法研究(16页)-原创力文档
- jdk-jstack命令