Airtest笔记(三)

备注:未经博主允许禁止转载

个人笔记(整理不易,有帮助,收藏+点赞+评论,爱你们!!!你的支持是我写作的动力)

笔记目录学习笔记目录_pytest和unittest、airtest_weixin_42717928的博客-CSDN博客

个人随笔工作总结随笔_8、以前工作中都接触过哪些类型的测试文档-CSDN博客

参考官方博客:网易AirtestProject 的个人主页 - 动态 - 掘金

参考官方文档:欢迎使用 - Airtest Project Docs

目录

一:多机协作脚本

二:批量执行脚本

(1)用bat文件执行单个Airtest脚本

(2)用bat文件顺序执行多个Airtest脚本

(3)用bat文件实现多机运行

三:API

(1)平台无关API(其他平台也可以使用)

(2)平台相关API

四:简单的代码案例

五:使用pycharm问题汇总

(1)找不到airtest库

(2)小案例

六:常见的pip命令

七:其他

(1)运行多个子脚本

(2)坐标使用

(3)局部截图

(4)局部找图

(5)指定截图保存的路径和名称

(6)多指滑动

(7)对日志信息等级的设定

(8)如何安排连接设备、初始化poco和打开应用的脚本顺序

(9)poco基础功能

八:文字识别


一:多机协作脚本

可以通过 set_current 接口来切换当前连接的手机,在命令行运行脚本时,只需要将手机依次使用 --device Android:/// 添加到命令行中即可,device()接口可以获取到当前使用中的设备

airtest run untitled.air --device Android:///serialno1 --device Android:///serialno2 --device Android:///serialno1

四、如何在Android手机上进行自动化测试(上) - Airtest Project Docs

也可以这样,在Airtest的全局变量G.DEVICE_LIST中看到所有当前连接中的设备

from airtest.core.api import connect_device
dev1 = connect_device("Android://127.0.0.1:5037/serialno1")  # 连上第一台手机
dev2 = connect_device("Android://127.0.0.1:5037/serialno2")  # 第二台手机
print(G.DEVICE_LIST)  # 此时设备列表为[dev1, dev2]

# 传入数字0切换当前操作的手机到第1台
set_current(0)

# 切换当前操作的手机到序列号为serialno2的手机
set_current("serialno2")

# 使用device()接口获取当前连接中的设备Android对象
current_dev = device()

如果是使用poco,要初始化两个poco

from airtest.core.api import connect_device
dev1 = connect_device("Android://127.0.0.1:5037/serialno1")  # 连上第一台手机
poco1 = AndroidUiautomationPoco(dev1)
dev2 = connect_device("Android://127.0.0.1:5037/serialno2")  # 第二台手机
poco2 = AndroidUiautomationPoco(dev2)

set_current(1)  # 切到第二台手机
poco2('com.google.android.calculator:id/digit_1').click()


#如果是命令行形式,已经传入设备参数,则获取设备对象并初始化即可
from airtest.core.api import G

print(G.DEVICE_LIST)  # 假设当前总共有2台手机
poco1 = AndroidUiautomationPoco(G.DEVICE_LIST[0])
poco2 = AndroidUiautomationPoco(G.DEVICE_LIST[1])

二:批量执行脚本

在 多台手机上,同时运行多个脚本,可以通过命令行运行手机的方式实现

方法一:编写多个bat脚本来启动命令行运行 Airtest 脚本

(1)用bat文件执行单个Airtest脚本

.bat 文件是可执行文件,它包含一条或多条命令。使用 .bat 文件进行批处理操作,可以帮助我们简化日常或者重复性的操作,而且.bat 文件里面的命令也是靠 cmd.exe 解析执行的,所以我们可以在 .bat 文件中编写运行airtest脚本的命令,以此来执行airtest脚本

如我脚本在E:\xjb\jb1.air,然后新建.bat 文件

备注:::xxx 表示的是注释内容
::关闭回显
@echo off
备注:@echo off是DOS批处理中的,不想执行的N条命令显示,使用echo off即可,如果echo off也不想显示,在前加@即可


::切换到D盘
D:
::进入D盘的test目录
cd D:\xjb
::执行 airtest run 命令
start airtest run jb1.air
exit

(2)用bat文件顺序执行多个Airtest脚本

@echo off
D:
cd D:\xjb
title 正在执行第一个脚本
airtest run jb1.air
title 正在执行第二个脚本
airtest run jb2.air
title 正在执行第三个脚本
airtest run jb3.air
exit

title xxx 用来指定命令提示窗口的标题,我们可以看到执行到第几个脚本了

(3)用bat文件实现多机运行

@echo off
D:
cd D:\xjb
start "正在用oppo跑脚本" airtest run jb1.air --device Android://127.0.0.1:5037/XXX
start "正在用vivo跑脚本" airtest run jb1.air --device Android://127.0.0.1:5037/XXX
exit

方法二:实现任务调度、多线程运行的方案来运行脚本

有空看看

三:API

(1)平台无关API(其他平台也可以使用)

Airtest核心API:airtest.core.api module(跨平台API)

如touch,其他平台都可以使用,但是每个接口支持的平台也不一样,如android平台还额外支持了duration参数

(2)平台相关API

#获取当前android设备对象,通过该对象调用android平台的方法
dev = device()

四:简单的代码案例

from airtest.core.api import *
from airtest.cli.parser import cli_setup
from airtest.core.android.adb import *

import os

#连接设备
# connect_device("Android://127.0.0.1:5037/FIFIMFFEPVAIWCU8")
#连接设备(要通过adb连接手机先)
init_device("Android")

if not cli_setup():
    auto_setup(__file__, logdir="./log")

pkg = "com.junhai"

#.py文件所在的路径
pwd = os.path.dirname(__file__)
#拼接起来
azlj = os.path.join(pwd,"123.apk")
#前两句相当于# install("F://app/123.apk")

#判断包是否已经安装,没有则安装
if pkg not in device().list_app():
    install(azlj)
#杀掉进程
stop_app(pkg)
#唤醒屏幕
wake()
#打开app
start_app(pkg)
#卸载apk
uninstall("pkg")
#清除app数据
clear_app("pkg")

五:使用pycharm问题汇总

(1)找不到airtest库

可能是pycharm使用了虚拟环境的解释器,运行个项目如果看到venv 说明是使用了虚拟环境,切换到本地环境即可

(2)小案例

from airtest.core.api import *
from airtest.cli.parser import cli_setup
from airtest.report.report import simple_report


#连接设备
connect_device("Android://127.0.0.1:5037/FIFIMFFEPVAIWCU8")

if not cli_setup():
    auto_setup(__file__, logdir="./log")

# adb shell dumpsys window | findstr mCurrentFocus
pkg = "com.ss.android.ugc.aweme"

try:
    # 杀掉进程
    stop_app(pkg)
    # 唤醒屏幕
    wake()
    # 打开app
    start_app(pkg)
# 利用auto_setup(__file__)初始化脚本的时候,传入了一个basedir (参数值为__file__,即当前脚本所在路径)
# 程序会默认根据这个basedir去寻找脚本中存在的相对路径
    touch(Template(r"static/tpl1614782118656.png", record_pos=(0.402, 0.979), resolution=(1080, 2280)))
finally:
    simple_report(__file__, logpath=True, output="C://Users/AUSU/Desktop/pyTest/log/log.html")

六:常见的pip命令

更新Airtest: pip install -U airtest

更新Poco: pip install -U pocoui

卸载Airtest库: pip uninstall airtest

同时安装了 python3 和 python2

# Python2
pip2 install XXX
python2 -m pip install XXX
# Python3
pip3 install XXX
python3 -m pip install XXX

七:其他

(1)运行多个子脚本

# 公共的引入子脚本方法
def customUsing(fiLe):
    print("--------引入" + fiLe + ".air--------")
    pathU = os.path.join("D:/test/"+fiLe+".air")
    using(pathU)

try:
    # 执行jb1的login脚本
    #使用绝对路径引入
    customUsing("jb1")
    from jb1 import login
    login()
    print("-----login执行完毕-----")
except Exception as e:
    traceback.print_exc()

(2)坐标使用

1)绝对坐标和相对坐标的切换

# 获取设备屏幕分辨率(竖屏)
height = G.DEVICE.display_info['height']
width = G.DEVICE.display_info['width']

# 已知绝对坐标[311,1065],转换成相对坐标
x1 = 311/width
y1 = 1065/height
poco.click([x1,y1])

# 已知相对坐标[0.3,0.55],转换成绝对坐标
x2 = 0.3*width
y2 = 0.55*height
touch([x2,y2])

# 如果是横屏设备的话,则分辨率如下
height = G.DEVICE.display_info['width']
width = G.DEVICE.display_info['height']
#判断当前屏幕为横屏还是竖屏,并获取当前屏幕的分辨率
if G.DEVICE.display_info['orientation'] in [1,3]:
    height = G.DEVICE.display_info['width']
    width = G.DEVICE.display_info['height']
else:
    height = G.DEVICE.display_info['height']
    width = G.DEVICE.display_info['width']

(3)局部截图

如(0,160)(1067,551)


# crop_image()方法在airtest.aircv中,需要引入
from airtest.aircv import *

auto_setup(__file__)
screen = G.DEVICE.snapshot()

# 局部截图
screen = aircv.crop_image(screen,(0,160,1067,551))
# 保存局部截图到log文件夹中
try_log_screen(screen)

(4)局部找图

from airtest.aircv import *
auto_setup(__file__)

screen = G.DEVICE.snapshot()
# 局部截图
local_screen = aircv.crop_image(screen,(0,949,1067,1500))

# 将我们的目标截图设置为一个Template对象
tempalte = Template(r"png_code/设置.png")
# 在局部截图里面查找指定的图片对象
pos = tempalte.match_in(local_screen)

# 返回找到的图片对象的坐标(该坐标是相对于局部截图的坐标)
print(pos)

# 若要返回目标在整个屏幕中的坐标,则x,y都需要加上局部截图时设置的最小x、y
print(pos[0]+0,pos[1]+949)

(5)指定截图保存的路径和名称

screen = G.DEVICE.snapshot()  
pil_img = cv2_2_pil(screen)
pil_img.save("D:/test/首页.png", quality=99, optimize=True)

通过这种方式修改图片名字效率更高

然后可以通过这个删除多余的图片

(6)多指滑动

用airtest做滑动解锁怎么搞?其实很简单!

(7)对日志信息等级的设定

import logging
logger = logging.getLogger("airtest")
logger.setLevel(logging.ERROR)

(8)如何安排连接设备、初始化poco和打开应用的脚本顺序

先连接设备(一般在 auto_setup 接口里面连接)--> 再打开应用(一般用 start_app 接口)--> 等应用开启完毕,最后才初始化 poco

# 连接设备
auto_setup(__file__,logdir=True,devices=["Android://127.0.0.1:5037/emulator-5554?cap_method=JAVACAP"])

#启动应用
start_app("com.NetEase")
sleep(6.0)

# 初始化poco
from poco.drivers.unity3d import UnityPoco
poco = UnityPoco()

(9)poco基础功能

1篇文章带你了解poco的所有基本功能

八:文字识别

使用开源图像OCR文字识别软件 -- Tesseract-OCR

参考:tesseract 安装及使用_showgea的博客-CSDN博客

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值