基于 Appium 的 App UI 遍历 & Monkey 工具 (支持操作步骤回放)

UICrawler

https://github.com/lgxqf/UICrawler

基于Appium 1.8.1开发的 App UI遍历 & Monkey 工具(Java版 )

 

QQ 技术交流群 : 728183683

环境搭建及基本使用说明: https://testerhome.com/topics/14490 (感谢网友harsayer 倾力之作)

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)
  • 支持滑动动作
  • 支持根据关键字和控件类型触发Back key(Android)

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.待开发功能

  • 将性能数据通过grafana显示
  • 支持遍历顺序控制
  • 根据执行步骤重现bug
  • 划动半屏 划动一屏
  • 黑名单支持XPath

运行工具

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 4723
-p 设定appium server的端口 , 不加参数默认为4723

5.1 运行元素遍历(必须有yml配置文件)

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

5.2 运行 Monkey功能

java -jar UICrawler.jar -f config.yml -u udid -t 4723 -m

5.3 运行微信小程序测试,需修改 MINI_PROGRAM_NAME的值,并按照下面的值设置 CRITICAL_ELEMENT中相应的值,才会启动微信进入小程序

#小程序
MINI_PROGRAM:
MINI_PROGRAM_NAME: 此处值为待测的小程序的名字
MINI_PROGRAM_PROCESS: com.tencent.mm:appbrand1 CRITICAL_ELEMENT:
#Android 微信
ANDROID_PACKAGE: com.tencent.mm
ANDROID_MAIN_ACTIVITY: com.tencent.mm.ui.LauncherUI #iOS 微信
IOS_BUNDLE_ID: com.tencent.xin
IOS_BUNDLE_NAME: 微信
IOS_IPA_NAME: wechat

查看支持的参数

java -jar UICrawler.jar -h

    -a  Android package's main activity
-b iOS bundle id
-c Maximum click count
-d Maximum crawler UI depth
-e Record performance data
-f Yaml config file
-h Print this usage information
-i Ignore crash
-l Execution loop count
-m Run monkey
-p Android package name
-r Crawler running time
-t Appium port
-u Device serial
-v Version
-w WDA port for ios
-x Write data to influxDB

一些常用命令

查看设备udid
Android:
adb devices
iOS:
instruments -s devices
idevice_id -l Android 查看apk 和 Main activity
./aapt dump badging "apk" | grep launchable-activity
aapt 通常在android sdk的 build-tools目录下
windows中将grep换成findstr
"apk"是apk文件路径

配置文件主要可配置项

  • 截图数量控制
  • 黑名单、白名单
  • 限制遍历深度、次数、时间
  • 遍历界面元素的xpath
  • 自动登录的用户名和密码及相应的UI元素ID
  • 待输入文本列表及待输入的控件类型
  • Monkey触发事件类型及比率

注意事项

  • iOS设备一定要打开"开发者选项"里的“Enable UI Automation” https://www.jianshu.com/p/a1d075b3472c
  • iOS测试包必须是debug版的
  • 同时运行多台ios设备时要每台设备要设置不同的IOS_WDA_PORT : 8001-8888

测试报告

 
 

【收藏】UICrawler的更多相关文章

  1. h5应用缓存及收藏时Icon显示

    h5应用实现离线缓存,加载后,断网仍然可以继续使用. 一.需求 转行做h5,目前做赛道游戏,动手做了个赛道编辑器web版的,由于web版需要开启服务器才能使用,策划要想回家使用就要发布到外网服务器了, ...

  2. 基于Metronic的Bootstrap开发框架经验总结(13)--页面链接收藏夹功能的实现2(利用Sortable进行拖动排序)

    在上篇随笔<基于Metronic的Bootstrap开发框架经验总结(12)--页面链接收藏夹功能的实现>上,我介绍了链接收藏夹功能的实现,以及对收藏记录的排序处理.该篇随笔主要使用功能按 ...

  3. 修复 Windows7 资源管理器左侧收藏夹无法展开问题

    相信大家在网上搜多到的解决办法大多数都是修改注册表,但是这个办法多数是无效的 1.运行regedit 2.展开到HKEY_CLASSES_ROOT\lnkfile 3.添加一个字符串值:IsShort ...

  4. Go收藏

    Go项目收藏 电子书 1.Go Web 编程 2.Go入门指南(the-way-to-go_ZH_CN) 3.Go语言圣经(中文版) Go by Example 中文 一些Go英文电子书 High P ...

  5. 33个超级有用必须要收藏的PHP代码样例

    作为一个正常的程序员,会好几种语言是十分正常的,相信大部分程序员也都会编写几句PHP程序,如果是WEB程序员,PHP一定是必备的,即使你没用开发过大型软件项目,也一定多少了解它的语法. 在PHP的流行 ...

  6. 基于Metronic的Bootstrap开发框架经验总结(12)--页面链接收藏夹功能的实现

    在一个系统里面,往往有很多菜单项目,每个菜单项对应一个页面,一般用户只需要用到一些常用的功能,如果每次都需要去各个层次的菜单里面去找对应的功能,那确实有点繁琐.特别是在菜单繁多,而客户又对系统整体不熟 ...

  7. JQUERY 实现加入收藏夹功能

    关于"加入收藏"的代码,很多人都不会重视,一般情况是随便在网上搜一个代码放在页面里就草草了事了.可是都没有做到主流浏览器的兼容.下面分享一段使用 jQuery 实现加入收藏夹的功能 ...

  8. Chrome插件: 网站收藏

      在工作中我们会收藏很多网址.以前一直都是用的chrome里面的收藏夹.后面觉得一点都不方便.看一下Chrome插件开发挺容易入手的所以自己写了一个Chrome插件. 基于:Angularjs + ...

  9. Jquery实现花瓣随机飘落(收藏自慕课网)

    这个东西实际上慕课的艾伦大大先写的. 然后别人推荐给我,偶一直收藏着,然后偶再推荐给偶的队友们,然后呢,这帮货就懒得都不肯去看... 接着今天受伤在家就提出来了一点东西放在我博客顶上... 然后艾伦的 ...

随机推荐

  1. Struts2-052 RCE CVE-2017-9805

    从struts2的官网下载最后受影响的版本struts-2.5.12,地址: http://archive.apache.org/dist/struts/2.5.12/struts-2.5.12-ap ...

  2. 工作中 sql 整理(一)

    这篇文章记录关于SQL的内容,有些凌乱,是工作中点滴的积累,只能按照时间顺序,逐次记录. 一.update 关联更新 1.需求 Table A   TableB A表中的主键和B表中的主键相关联,关联 ...

  3. 【python接口自动化-requests库】【三】优化重构requests方法

    一.重构post请求方法 上一张讲了如何使用requests库发送post请求,但是有时候,我们写脚本,不可能这么简单,代码完全不可复用,重复工作,那我们是不是可以想象,把我们的get,post请求, ...

  4. selenium 网络请求

    selenium 网络请求 browser.find_element_by_id("id的name")browser.find_element("")brows ...

  5. html总结2

    (1)选择器: 1.标签选择器:用于修饰同类HTML标签的共性风格 <style type="text/css"> li{ color:red; font-size:2 ...

  6. 用 Excel 画正态分布曲线

    用 Excel 画正态分布曲线 群里有小伙伴询问一道曲线题,有小伙伴看出来是正态分布曲线,刚好之前有大概了解一下正态分布. 可以在 Excel 很容易实现. 使用 NORMDIST 即可. 效果如下:

  7. NIO、BIO、AIO区别

    一.同步阻塞I/O(BIO): 同步阻塞I/O,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,可以通过线程池机 ...

  8. golang http proxy反向代理

    本文介绍golang中如何进行反向代理. 下面例子中, proxy server接收client 的 http request,转发给true server,并把 true server的返回结果再发 ...

  9. 【剑指offer】链表第一个公共子结点

    *思路: 先求得两个链表的长度,然后得到长度差diff,再先遍历长链表diff步后,再同时遍历两个链表并比较对象指针. /* public class ListNode { int val; List ...

  10. 5.IAP - FLASH

    一.Flash与时钟系统的关系            STM32系统时钟:                 HSE 高速外部时钟,电路上焊接的外部时钟,一般是4Mhz-16Mhz,板子上的是8Mhz ...