UICrawler

Project Url: lgxqf/UICrawler
Introduction: 基于 Appium 的 App UI 遍历 & Monkey 工具 (支持操作步骤回放)
More: Author   ReportBugs   
Tags:

基于 Appium 的 App UI 遍历 & Monkey 工具

关于如何发挥测试工具的价值

  • 用不同的账号登录 app 运行测试,因为每个账号可能看到的内容不一样
  • 用不同的手机系统版本运行测试,尽可能做到 iOS 9-11, Android 4-8 都覆盖到,如果资源有限无法同时运行多台设备,每天可以选择一两个系统版的手机去运行测试
  • 用不同的手机运行测试,尤其安卓碎片化严重,手机厂商多,有的问题只有特定手机才能发现
  • 关于测试运行的频度,只要有代码改动建议至少一天一次,下班时运行,第二天看结果

2.0 版 功能描述

1.UI 遍历及以下功能 Android/iOS

  • 基于深度优先的原则,点击 UI 上的元素。当发现 Crash 时会提供操作步骤截图及相应的 Log. *
     Android 提供 logcat 的 log. 
     iOS 提供系统 log 及 crash 相应的 ips 文件
    
  • 元素遍历结束或按下 Ctrl + C 键会生成 HTML 测试报告。测试报告中汇集了测试统计、log 及截图的相应信息
  • 同一个元素只会点击一次(白名单中的元素可能会被多次点击)
  • 支持对输入框的文本输入(需在文件中进行配置 INPUT_TEXT_LIST)
  • 统计每个 Activity 点击数量(Android)
  • 支持滑动动作
  • 支持根据关键字、包名、Activity 的名字、控件类型触发 Back key(Android)
  • 支持自动登录时的自定义操作:点击、拖拽、文本输入。 详见 Config.yml 中 LOGIN_ELEMENTS 部分内容
  • 黑名单支持 XPath

2.Monkey 功能及以下事件 Android/iOS

  • 随机位置点击
  • 通过黑名单控制不想点击的区域
  • 特殊位置点击(需在文件中进行配置)
  • 特殊位置长按 10 秒(需在文件中进行配置)
  • 任意方向及长度的滑动
  • 触发 Home 键(Android Only)
  • 触发 Back 键(Android Only)
  • 重启 app
  • 及以下手势操作(位置随机) *
       双击
       双指放大
       双指缩小
       拖拽
    

3.微信小程序

  • 微信小程序 Monkey (iOS & Android)
  • 微信小程序 UI 遍历 (Android only)

4.其它功能

  • 运行时间限制
  • 每次点击都会生一个一截图,截图中被点击的位置会用红点标注,方便查找点击位置
  • 当检查到 Crash 时,为每个 Crash 提供单独的操作步骤截图和 mp4 格式的视频文件
  • 生成整体操作步骤视频,方便重现发现的问题
  • 性能数据采集,执行时添加-e 参数
  • Android : 每秒采集一次 CPU 和 Memory 数据 生成 perf_data.txt 并写放到 influxDB(需单添加-x 参数,且 influxDB 要单独安装)
  • iOS: 要求以 appium --session-override --relaxed-security 启动 appium, 之后会生成 XCode instrument 能直接读取的性能数据 详见 https://appiumpro.com/editions/12

5.待开发功能

  • 优化执行速度,如截图生成,点击等
  • 优化报告显示
  • 优化视频生成
  • 为配置项默认值,无配置文件也能运行
  • 更改 demo 为 Alipay
  • 报告中增加每个 activity 中 click 失败和成功的次数统计

运行工具

1.下载 Jar 包

UICrawler.jar

2.下载配置文件

config.yml

3.根据待测试 App 修改配置文件中下列各项的值 详情见 Config.md

Android

  • ANDROID_PACKAGE
  • ANDROID_MAIN_ACTIVITY

    iOS

  • IOS_BUNDLE_ID
  • IOS_BUNDLE_NAME
  • IOS_IPA_NAME

    Monkey 配置项可选, 详情见 Monkey 配置

4.启动 appium

appium --session-override
-p 设定 appium server 的端口 , 不加参数默认为 4723

5.1 运行 UI 遍历

java -jar UICrawler.jar -u udid -f config.yml
-u 指定设备 udid
-t 指定 appium server 的端口(此项为可选项,默认值是 4723)
-f 指定 yml 配置文件 若无此参数 默认为 config.yml

5.2 运行 Monkey

java -jar UICrawler.jar -u udid -m

5.3 运行微信小程序测试 -w 启动后会通过微信进入小程序

CRITICAL_ELEMENT:
  MINI_PROGRAM_NAME: 此处值为待测的小程序的名字

java -jar UICrawler.jar -u udid -w

查看支持的参数

java -jar UICrawler.jar -h

    -a  Android package's main activity
    -b  iOS bundle id
    -e  Record performance data
    -f  Yaml config  file
    -h  Print this usage information
    -i  Ignore crash
    -m  Run monkey
    -p  Android package name
    -t  Appium port
    -u  Device serial
    -v  Version
    -z  WDA port for ios
    -x  Write data to influxDB
    -w  Run in wechat mode

一些常用命令

查看设备 udid
Android:
  adb devices

iOS:
  instruments -s  devices
  idevice_id -l
  idevicecrashreport -e .

Android 查看 app 包名 和 Main activity
  Linux/Mac
    ./aapt dump badging "apk"  | grep launchable-activity
  Windows
    aapt dump badging "apk"  | findstr launchable-activity

  aapt 通常在 android sdk 的 build-tools 目录下, "apk"是 apk 文件路径

Android 查看当前 activity
    adb shell dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp'

测试报告

注意事项

  • iOS 设备一定要打开"开发者选项"里的“Enable UI Automation” https://www.jianshu.com/p/a1d075b3472c
  • iOS 测试包必须是 debug 版的
  • 同时运行多台 ios 设备时要每台设备要设置不同的 IOS_WDA_PORT : 8001-8888
  • Android7 及以上的手机必须安装 Uiautomator2 server 的两个 apk(安装 deskstop 版 appium,初次连接 appium 会自动安装), 也可进入到apk目录下通过 adb 安装

依赖的工具

Known issue

参考内容

一些技术文档

Known issue

CHANGE HISTORY

Apps
About Me
GitHub: Trinea
Facebook: Dev Tools