手机app自动化操作工具airtest之入门篇

airtest自动化测试工具

airtest是网易开发的一款自动化测试工具,主要用于游戏自动化开发和测试,目前支持对windows应用、手机app等,同时支持录制操作,甚至达到无需代码编写即可完成测试,能够识别图中是否存在目标元素(其实是比较目标图片和截图,确定目标是否在截图中)。

它的操作相对appium来说更容易上手,进行移动端测试过程中,通常是利用其poco库来做自动化。

微信自动化操作

环境:

Windows 10操作系统
python 版本 3.7
airtest IDE,版本 1.2.1
adb工具,是手机操作自动化的基础。
对于手机app页面元素的分析,可以采用 airtest IDE自带的Android模块的 UI渲染树查看,或者使用 Android Studio 的SDK插件 uiautomatorviewer 来实现。

操作步骤

1、连接手机和电脑
使用USB数据线连接手机和电脑,启用手机的开发者选项,启用方法请自行百度,开启之后,将USB调试打开。

2、接通手机
这里有两种方式,一种是通过命令行执行adb命令,另外一种是通过airtest界面操作。
airtest界面操作,即打开airtest软件之后,点击右侧的 “刷新ADB”,正常情况下会出现手机设备信息,点击 connect 即可。
手机app自动化操作工具airtest之入门篇_第1张图片
之后会出现手机画面:

手机app自动化操作工具airtest之入门篇_第2张图片
对于出现的手机画面,使用鼠标进行点击和滑动,可以达到 操作手机的效果。

软件左下角处“Poco”栏的下拉菜单选择“Android”,即可出现手机页面的元素审查结果,可以对树形结构进行点击展开,也可以对画面进行锁定等操作。

命令行操作,只需执行:
adb devices

出现以下内容,则是正常的:

List of devices attached
CxsxsxsxE62w133        device

注意:那个device前面是手机序列号,而device这个是关键,如果是unauthorized就是连接失败的。

这里说一下关闭连接,需要确保adb.exe进程是关闭的,然后才能正常弹出设备。

对于airtest连接的断开操作,只需找到软件右上角的“Phone assist”(图标包含锤子的工具箱),点击之后选择“Disconnect current device”即可。

3、自动化脚本
自动化脚本分为两种,一种是python的py格式脚本,另一种是airtest支持的air格式脚本,此处以python脚本编写自动化代码。

需要说明的是,自动化操作手机过程中,系统的屏幕旋转会被开启,同时输入法被修改为Yosemite,所以完成自动化操作之后,需要使用adb将操作修改为原始值。

from airtest.core.api import *
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
from PIL import Image
import cv2
import time,os
import base64,io


auto_setup(__file__)
# 关闭屏幕旋转
cmd1='adb shell content insert --uri content://settings/system --bind name:s:accelerometer_rotation --bind value:i:0'
# 修改输入法到初始状态
cmd2='adb shell ime set com.baidu.input_huawei/.ImeService'

def show_info(poco):
    try:
        desc=poco(name='com.tencent.weishi:id/feed_desc').get_text()
        author=poco(name='com.tencent.weishi:id/tv_feed_info_first_text').get_text().split()[0].replace('的视频原声','')
        shares=poco(name='com.tencent.weishi:id/feed_share_text').get_text()
        comments=poco(name='com.tencent.weishi:id/feed_comment_count_text').get_text()
        likes=poco(name='com.tencent.weishi:id/feed_like_count').get_text()
        print('desc:{0}\nauthor:{1}\tshares:{2}\tlikes:{3}\n'.format(desc,author,shares,likes))
    except:
        pass



def check_adb(cmd='adb devices'):
    f=os.popen(cmd)
    rst=f.read()
    f.close()
    if 'device\n' in rst:
        return True
    return False


def close_adb():
    cmds="wmic process where name='adb.exe' call terminate"
    zz=os.system(cmds)
    if zz==0:
        print('killed adb.')



def remove_device(cmd='adb shell settings put global adb_enabled 0'):
    zz=os.system(cmd)
    if zz==0:
        print('device removed.')





def main(package='com.tencent.weishi'):
    #  使用adb连接手机
    xxx=check_adb()
    if not xxx:
        print('fail to start adb.exe')
        return
    dev1=connect_device("Android:///")
    devs=device()
    #start_app
    # 开启微视app
    start_app(package=package, activity=None)
    time.sleep(3)
    poco_1 = AndroidUiautomationPoco(dev1, use_airtest_input=True, screenshot_each_action=False)
    time.sleep(3)
    filename1='tt111.png'
    # 手机截屏
    a,b=poco_1.snapshot()
    c=base64.b64decode(a)
    tmp1=Image.open(io.BytesIO(c))
    filename2='tt222.png'
    tmp1.save(filename2)
    # 查看分辨率
    x, y = tmp1.size
    print(x, y)
    while 1:
        try:
            time.sleep(1)
            # 查看当前视频的标题、分享等信息
            show_info(poco_1)
            time.sleep(20)
            # 滑动屏幕,进入下一个视频
            swipe([0.4*x,0.5*y],[0.7*x,0.3*y], duration=1)
            time.sleep(1)
        except KeyboardInterrupt:
            break
    # 关闭app
    stop_app(package=package)
    # 还原系统设置
    os.system(cmd1)
    os.system(cmd2)
    time.sleep(3)
    # 结束adb进程
    close_adb()
    time.sleep(2)
    # 结束连接
    remove_device()




if __name__=='__main__':
    main()



你可能感兴趣的:(软件工具,爬虫实践,基础知识,手机app,自动化,爬虫,python,airtest)