安卓UI自动化工具uiautomator项目实战前准备工作

一:环境准备

硬件设备:windows电脑

软件:pycharm/蓝叠或闪电模拟器/SDK manager

闪电模拟器下载链接:https://www.ldmnq.com/?n=6000&bd_vid=11623493887955105097

二:自动化脚本编写前需要掌握的基础

python基础

  1. 变量
  2. 变量常用的数据类型(字符串/int/dict/list)的声明和调用,以及数据了类型间的转换
  3. 函数(带参函数/不带参函数/有返回值/没有返回返回值)的声明与调用
  4. 开源库的安装、调用
  5. 判断语句与for循环

2. 常用的adb命令

(1)查看已连接的设备列表:adb devices

(2)开启或关闭ADB服务:

开启:adb start-server

结束:adb kill-server

(3)连接设备:adb connect IP 断开设备:adb disconnect IP

如果是USB连接,直接会连接ADB,如果是想通过网络连接(有线或者无线),则需要在同一个局域网 ,通过设备的ip地址连接即可。

(4) 安装/卸载apk

安装apk adb install -r apk路径

常用参数说明:

卸载apk adb uninstall apk包名

(5)抓取日志 logcat

常用参数说明

"-s"选项 : 只显示指定标签的日志; ------>adb logcat -s SWVDEC 显示SWVDEC标签的日志

"-v"选项 : 设置日志的输出格式;----->adb logcat -v threadtime 查看日志输出时间和线程信息

"-c"选项 : 清空所有的日志缓存信息;---->adb logcat -c

"-d"选项 : 将缓存的日志输出到屏幕上, 并且不会阻塞;------->adb logcat -d

"-t"选项 : 输出最近的几行日志, 输出完退出, 不阻塞;------>adb logcat -t 5 输出日志缓冲区的最近5行

  1. 获取cpu占用 :top

常用参数说明:

-m num Maximum number of processes to display. 最多显示多少个进程

-n num Updates to show before exiting. 刷新次数

-d num Seconds to wait between updates. 刷新间隔时间(默认5秒)

-s col Column to sort by (cpu,vss,rss,thr). 按哪列排序

-t Show threads instead of processes. 显示线程信息而不是进程

  1. 获取内存占用:dumpsys meminfo

获取指定应用的内存 dumpsys meminfo 包名

  1. 获取应用进程号 ps

(9) 从手机中拉取信息到本地电脑上 adb pull <手机路径> <本机路径>

从本地电脑推送信息到手机上 adb push <本机路径> <手机路径>

(10) 获取当前运行的Activity

adb shell dumpsys activity | findstr/grep "mFocusedActivity"

(11) adb 截图命令: screencap 保存图片文件路径

(12) adb 录屏命令: screenrecord 保存视频文件路径(默认录制时间和最长录制时间都是 180 秒)

常用参数说明

--size WIDTH*HEIGHT 视频的尺寸,如1280*720,默认是屏幕分辨率

--bit-rate RATE 视频的比特率,默认4Mbps

--time-limit TIME 录制时长,单位:秒

三:自动化UI脚本编写流程

模拟器配置

  1. 模拟器系统配置

性能设置选项设置为手机版/720*1280,如下图所示

机型设置都一致选择MI 9(个别机型可能存在兼容性bug,方便统一解决问题),如下图所示

其他设置中开启ROOT权限和ADB调试,如下图所示

然后“保存设置”,会提示重启系统才会生效,重启系统后,在cmd窗口中,输入:adb devices,显示如下信息,证明连接成功。

然后安装我们要测试的apk

安装uiautomator(用来做xpath值获取的工具)

(1)安装uiautomator2库

pip install --pre uiautomator2

pip install pillow (如果需要截图,可安装这个库)

(2)安装atx-agent

# init就是所有USB连接电脑的手机上都安装uiautomator2

python -m uiautomator2 init

# 指定手机安装uiautomator2, 用 --mirror

python -m uiautomator2 init --mirror --serial $SERIAL

# 嫌弃慢的话,可以用国内的镜像

python -m uiautomator2 init --mirror

最后提示success,代表atx-agent初始化成功。

(3)安装Weditor

pip install -U weditor

安装好之后,就可以在命令行运行 weditor --help 确认是否安装成功了。

Windows系统可以使用命令(weditor --shortcut)在桌面创建一个快捷方式,

如下图所示:

启动weditor的方式

方法1.命令行直接输入 weditor 会自动打开浏览器,输入设备的ip或者序列号,点击Connect即可;

方法2.桌面上双击WEditor快捷方式即可;

方法3.命令行中执行 python -m weditor

uiautomator常用API

参考教程https://vic.kim/2019/05/20/UIAutomator2%E7%9A%84%E4%BD%BF%E7%94%A8/

截至这里,各种环境已经安装完毕!

需求/用例熟悉

我们看2条注册模块的用例:

用例编号

模块

预置条件

操作步骤

期望结果

测试结果

1

注册

网络正常

  1. 输入正确的账号和密码
  2. 点击注册

2.弹出toast,提示注册成功,跳转到登录页面


2

注册

网络正常

1.输入已经注册过的账号和密码

2.点击注册

2.弹出账号已经注册的toast提示


拆解操作步骤,结果判断等

操作步骤:打开app,点击注册按钮,然后定位到账号和密码文本框分别做出对应的操作

判断:注册成功后,弹出注册成功后,会跳转到登录页面,重复注册只是给出toast提示

以上是操作步骤和预期结果,在实际工作中,我们还需要在问题出现的时候,截屏或录屏并给开发抓取log,最好还要给出执行用例的时间

操作步骤如下

然后我们用代码实现如下图:

import os
import time

import uiautomator2 as us
#导入uiautomator2库 as是取个别名叫us
#通过连接实例化拿到设备类
driver=us.connect_usb()
#通过包名启动app
#录制屏幕
os.system("start adb shell screenrecord  --time-limit 60 /sdcard/test2.mp4 ")
driver.app_start('com.example.wenhaotest')#引号内为包名称
time.sleep(5)
#通过xpath定位到注册按钮并点击
#driver.xpath('//*[@resource-id="com.example.wenhaotest:id/btn1"]').click()
driver.xpath('//*[@resource-id="com.example.wenhaotest:id/btn2"]').click()
time.sleep(5)
#当注册页面的某个xpath出现后,我们通过xpath定位到账号和密码并输入对应的内容,然后点击注册按钮
if driver.xpath('//*[@resource-id="com.example.wenhaotest:id/register_button"]').exists:
    #通过xpath定位到账号输入内容
    driver.xpath('//*[@resource-id="com.example.wenhaotest:id/register_user"]').set_text("1kobe_brant2")
    #通过xpath定位到密码输入内容
    driver.xpath('//*[@resource-id="com.example.wenhaotest:id/register_mm"]').set_text("8888888888")
    #通过xpath定位到注册按钮并点击
    driver.xpath('//*[@resource-id="com.example.wenhaotest:id/register_button"]').click()
    #硬等待
    #通过登录页面唯一xpath值定位,确认是否跳转,如登录页面有登录按钮
    #通过对应函数获取app弹出的toast内容
    textContent=driver.toast.get_message()
    print(textContent)
    # 硬等待
    time.sleep(5)
    if(driver.xpath('//*[@resource-id="com.example.wenhaotest:id/btn1"]').exists and str(textContent) == "注册成功"):
        print("pass")
        # 抓取日志
        os.system('adb  logcat -t 100000 >> "C:UsersLENOVODesktoptest1.log" ')
    else:
        print("failed")
        #抓取日志
        os.system('adb  logcat -t 100000 >> "C:UsersLENOVODesktoptest1.log" ')





展开阅读全文

页面更新:2024-04-02

标签:模拟器   账号   实战   选项   按钮   提示   常用   密码   页面   工具   项目   设备   日志

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top