目录

  1. 导包

  2. 连接设备

  3. 编写脚本

  4. 生成报告

  5. 导包

主要需要导入三个包:

从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方式创建脚本,复制其中的初始化代码

  1. 连接设备

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基本一致:

  1. 电脑安装手机厂商的对应官方驱动

  2. 打开开发者选项,打开usb调试(部分手机还要打开允许模拟位置,允许通过usb安装应用)

  3. 插上数据线或通过wifi连接(注意关闭手机助手、豌豆荚等助手软件)

  4. 在手机端同意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.*”)

  1. 编写脚本

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编写和执行用例(上)相关推荐

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

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

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

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

  3. Selenium3自动化测试——2. python编写简单自测代码

    开发人员在编写好代码后,测试人员如何在另个测试文件中对开发人员的文件进行测试呢? 例如,开发人员的代码如下,名字为calculator.py. # 创建add函数 def add(a, b):retu ...

  4. Python编写定时执行脚本

    import os import time import subprocess import datetime from apscheduler.schedulers.blocking import ...

  5. python读文件路径-python获取程序执行文件路径的方法(推荐)

    1.获取当前执行主脚本方法:sys.argv[0]和_ file _ (1)sys.argv 一个传给Python脚本的指令参数列表.sys.argv[0]是脚本的名字.一般得到的是相对路径,用os. ...

  6. python基础编程:Python实现鼠标自动在屏幕上随机移动功能

    这篇文章主要介绍了Python实现鼠标自动在屏幕上随机移动功能,具有很好的参考价值,希望对大家有所帮助.还等什么?一起跟随小编过来看看吧 本来想控制鼠标自动移动防止公司电脑自动休眠的策略,然而,实现了 ...

  7. python自动化测试篇一 简单介绍

    一.什么是 Python Python 是一门编程语言,关于编程语言我们后面再详细讲.首先我们思考,为什么我们要学习 Python 1.为什么要学习 Python 1. 自动化 很多时候,虽然可以通过 ...

  8. 记事本写python怎么运行-从头学Python之编写可执行的.py文件

    Python可是真强大.但他具体是怎么强大的,让我们一点一点来了解吧(小编每天晚上下班回家会抽时间看看教程,多充实下自己也是好的). 废话不多说,就讲一下这个背景吧: 事情是这个样子的~本着好学的精神 ...

  9. python编写脚本方法_python 定时器,实现每天凌晨3点执行的方法

    如下所示: ''' Created on 2018-4-20 例子:每天凌晨3点执行func方法 ''' import datetime import threading def func(): pr ...

最新文章

  1. AngularJS2 + ASP.NET MVC项目
  2. linux中的软RAID实现,逻辑卷和btrfs文件系统
  3. qt mysql怎么选表_Qt的Mysql数据库表操作(1)
  4. android studio failed to open zip file,Android Studio出现Failed to open zip file问题的解决方法...
  5. android版本相机权限,Android 11系统权限收紧,第三方APP仅支持调用原生相机
  6. 刘子佼 mysql 下载_MySQL数据管理之备份恢复案例解析 23讲 Mysql备份恢复实战 视频教程...
  7. Polling 、Long Polling 和 WebSocket
  8. python - 输出最大/最小的 k 个元素的索引
  9. 阿里云图数据库GDB V3引擎发布,加速开启“图智”未来
  10. javascript md5加密算法
  11. 云计算学习教程,Python自动化运维开发实战
  12. Ubuntu系统上为用户授予和删除sudo权限的方法
  13. 微信客户端抽奖转盘效果
  14. 循环神经网络(RNN)详解
  15. 【论文笔记】韩家炜团队AutoPhrase:自动短语挖掘
  16. 杨校老师课堂之Hadoop环境搭建(一)
  17. 手把手教你使用VSS
  18. 谷歌中国解散 正式退出中国市场
  19. RS232串口接线图
  20. SVProgressHUD 的显示时间

热门文章

  1. netty服务端 JVM优化
  2. Linux安全关机命令以及相关命令介绍
  3. 前两天申元庆与黄启功在湖边聊天,带给了业内四大信号
  4. Google与卡片式设计
  5. 这个网站厉害了!办公必备软件工具一应俱全,让人相见恨晚
  6. java rowmapper 通用实现_RowMapper实现自动将一行数据映射到指定类的实例中
  7. Reconnaissance
  8. Centos解决Mysql异常Incorrect string value: ‘\xE6\xB5\x8B\xE8\xAF\x95‘ for column ‘name‘
  9. 计算机控制技术答案王书峰,模糊控制算法研究(16页)-原创力文档
  10. jdk-jstack命令