Monkey工具之fastbot-iOS实践
Monkey工具之fastbot-iOS实践
背景
目前移动端App上线后 crash 率比较高, 尤其在iOS端。我们需要一款Monkey工具测试App的稳定性,更早的发现crash问题并修复。
去年移动开发者大会上有参加 fastbot 的分享,所以很自然的就想到Fastbot工具。
Fastbot-iOS安装配置
准备工具
- XCode: iOS开发IDE。
- CocoaPads: 用来管理XCode依赖库的项目。
- Fastbot_iOS: github项目。
- tidevice: iOS 自动化工具。
- 通过macOS应用商店下载XCode。
- 安装cocoapods
> sudo gem install cocoapods -v=1.8.1
- 克隆
fastbot_iOS
项目,并初始化
> git clone https://github.com/bytedance/Fastbot_iOS
> cd Fastbot_iOS
> cd Fastbot-iOS && pod install --repo-update
Fastbot_iOS
是克隆的项目目录,Fastbot-iOS
是项目下面的子目录。
- 通过Xcode 打开项目
Fastbo-iOS
项目。
https://github.com/bytedance/Fastbot_iOS
具体配置查看github项目中的《中文手册》,操作步骤非常详细。
运行测试(XCode)
- 点击顶部
FastbotRunner
弹出菜单,选择Edit Scheme...
选项。
在Scheme
中设置参数,参考表格:
字段 | 说明 | 示例 |
---|---|---|
BUNDLEID | 被测试App的 Bundle ID | com.apple.Pages |
duration | 测试时长,单位分钟 | 240 |
throttle | 操作间隔,单位毫秒 | 300 |
launchenv | 启动测试App的环境变量,一般为空,或者以 ':'分割的key=value形式 | isAutoTestUI=1:=AutoTest |
- 执行测试
点击testFastbot
按钮,开始运行Monkey测试。你可以在手机端看到被测试App以及启动,并开始自动执行操作。
运行测试(tidevice)
tidevice是阿里开源的iOS自动化测试工具,其实叫自动化工具有点不准确。他本质上有点像android 的 adb
工具,可以理解为PC与iOS之间的通信工具。提供了一些非常有用的功能,查看设备信息、安装卸载应用,当然,最主要的是可以执行XCTest
。
github: https://github.com/alibaba/taobao-iphone-device
- 安装tidevices
> pip install -U tidevice
- 使用tidevice检查连接的设备udid
> tidevice list
List of apple devices attached
xxxx-xxxxxxxxxxx iPhone USB
- 检查是否安装
FastbotRunner-Runner
App。
> tidevice ps --json
[
{
"pid": 11549,
"name": "FastbotRunner-Runner",
"bundle_id": "bytedance.FastbotRunner.name.xctrunner",
"display_name": "FastbotRunner-Runner"
},
]
前参考前面fastbot-iOS《中文手册》,他会详细说明如何在手机上安装
FastbotRunner-Runner
APP。这一步极为重要。
- 通过
tidevices
运行测试
> tidevice xctest -B bytedance.FastbotRunner.name.xctrunner -e BUNDLEID:com.apple.Pages -e duration:480 -e throttle:300 --debug
参考前面,Scheme参数说明。
遇到的问题
- fastbot是如何遍历的?
这是我们想搞懂的一个问题,以便于看看是否有可配置的选项。
fastbot- 算法原理
我们将页面的 GUI 信息抽象成模型中的 State,将执行的动作抽象成模型中的 Action,通过 State 作为图的节点,Action 作为图的边,连接形成有向有环图模型。遍历决策想法上源于 Alphago 的蒙特卡洛搜索树的思想,此基础上我们也使用了其他强化学习的方法,设计了 N 步 Q-Learning 算法和基于页面变化程度的 reward function,为页面下每个 Action 计算出相应的 Q 值,基于 Q 值选取最优动作。
...
我们选择使用好奇心强化学习的方法来解决奖励稀疏问题,同时结合自然语言处理对页面信息做特征抽象,在原有 reward function 基础上增加好奇心(Curiosity)的 reward
上面摘自《奔跑吧!智能Monkey之Fastbot跨平台》 一文,所以不用做过多的人工配置或干预。随着不断执行App 的遍历,也是不断强化遍历的工具的学习的过程。
- fastbot不识别元素或无法解析DOM tree怎办?
这一点对我们尤为重要,因为我们的App中大量页面是用flutter实现的,做传统的UI自动化是非常麻烦。
在 Fastbot 低能耗、低耗时、高性能前提要求下,我们优先选用最基础的图像处理技术来识别 GUI 界面信息,可以在毫秒级完成构建一个页面的信息。
上面摘自《奔跑吧!智能Monkey之Fastbot跨平台》 一文, 强烈建议阅读原文,多读几遍,受益匪浅。
- 如何同时执行多个设备?
tidevice的作者给了答案,通过设备的udid
号区分就可以了。当你的PC连接多个手机时。
> tidevice list
List of apple devices attached
xxxx-xxxxxxxxxxx iPhone USB
yyyy-yyyyyyyyyyy iPhone USB
- 启动x设备
> tidevice -u xxxx-xxxxxxxxxxx xctest -B bytedance.FastbotRunner.name.xctrunner -e BUNDLEID:com.apple.Pages -e duration:480 -e throttle:300 --debug
- 启动y设备
> tidevice -u yyyy-yyyyyyyyyyy xctest -B bytedance.FastbotRunner.name.xctrunner -e BUNDLEID:com.apple.Pages -e duration:480 -e throttle:300 --debug
- 测出了崩溃怎么办?
我一开始想当然的以为测出了崩溃工具就停止呗,以至于我跑了两天都以为工具没发现崩溃。后来,在官方的微信群里问过才知道,崩溃后重新启动App继续执行。直到设置的运行时间结束。
- 如何获取崩溃报告?
这一步也很重要,总不能崩溃就崩溃了吧!monkey的执行过程我们又无法复现。我一开始以为日志藏在tidevice
中,因为他运行的过程(加--debug
参数)中会打印大量的日志。我又没办法把这个日志写到文件中(命令结尾加 > log.txt
无用),花了半天时间改 tidevice
的代码,在logger的地方写文件。
后来,发现这么做没有卵用!tidevice/fastbot
相当于是指令的发出者,他只会说:“我发送了一条指令哦!” 这样的废话,至于 App 接收到指令后是否执行,是否引起崩溃,无法给到 tidevice/fastbot
工具。
但是,作者说fastbot
工具可以集成报告。
https://github.com/bytedance/Fastbot_iOS/issues/2
我觉得,他也只是说说,因为这是8月份的问题,当然这么好用的工具愿意开源就很好了,不要不知好歹。可能他又有别的KPI要忙~!
那么,我们的App是有集成firebase
的SDK,如果App崩溃,那么会上报日志到firebase
平台,可以在firebase
平台上统计分析。
这是我最近一周的实践经验,希望能帮到你!我是虫师,关注
测试圈TC
,带走我~!
Monkey工具之fastbot-iOS实践的更多相关文章
- Monkey工具使用详解
上节中介绍了Monkey工具使用环境的搭建,传送门..本节我将详细介绍Monkey工具的使用. 一.Monkey测试简介 Monkey测试是Android平台自动化的一种手段,通过Monkey程序模拟 ...
- Android APP压力测试(一)之Monkey工具介绍
Android APP压力测试(一) 之Monkey工具介绍 前言 本文主要介绍Monkey工具.Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕.滑动. ...
- paip.sqlite 管理最好的工具 SQLite Expert 最佳实践总结
paip.sqlite 管理最好的工具 SQLite Expert 最佳实践总结 一般的管理工具斗可以...就是要是sqlite没正常地关闭哈,有shm跟wal文件..例如ff的place.sqlit ...
- Android自动化压力测试图解教程——Monkey工具
[置顶] Android自动化压力测试图解教程--Monkey工具 标签: 测试androidprofiling工具测试工具文档 2012-04-01 10:16 38185人阅读 评论(10) 收藏 ...
- Android压力测试快速入门教程(图解)——Monkey工具
文章目录: 一.Monkey简介 二.Monkey的基本用法 三.Monkey测试示例图解 四.Monkey命令参数介绍 五.Monkey log分析 一.Monkey简介 Monkey:Androi ...
- monkeyrunner工具同Monkey工具的差别
Monkey: Monkey工具直接运行在设备或模拟器的adb shell中,生成用户或系统的伪随机事件流. monkeyrunner: monkeyrunner工具则是在工作站上通过API定义的特定 ...
- Xcode之外的文档浏览工具--Dash (在iOS代码库中浏览本帖)
链接地址:http://www.cocoachina.com/bbs/read.php?tid=273479 Xcode之外的文档浏览工具--Dash (在iOS代码库中浏览本帖) ...
- Windows Azure 安全最佳实践 - 第 7 部分:提示、工具和编码最佳实践
在撰写这一系列文章的过程中,我总结出了很多最佳实践.在这篇文章中,我介绍了在保护您的WindowsAzure应用程序时需要考虑的更多事项. 下面是一些工具和编码提示与最佳实践: · 在操作系统上运行 ...
- Android自动测试之Monkey工具
Monkey工具 前言: 最 近开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括android测试框架.CTS.Monkey. Monkeyrunner. ...
随机推荐
- SpringBoot整合Shiro 一:搭建环境
Java项目的安全框架一般使用 shiro 与 spring security 具体怎么选择可以参考文章:安全框架 Shiro 和 Spring Security 如何选择 我这里选择使用Shiro ...
- javaSE高级篇2 — 流技术 — 更新完毕
1.先认识一个类----File类 前言:IO相关的一些常识 I / O----输入输出 I 输入 input 0 输出 output I / o 按数据的流动方向来分- ...
- 从零构建Java项目(Maven+SpringBoot+Git) #02 奥斯丁项目
前两天我说要写个项目来持续迭代,有好多小伙伴都表示支持和鼓励,项目的第一篇这不就来了么~我给项目取了个名字,英文名叫做:austin,中文名叫做:奥斯丁 名字倒没有什么特别的含义,我单纯觉得这个名字好 ...
- 学习java 7.2
学习内容:案例一:斐波那契数列从1开始作为第一个数,求第20个数 public class Test { public static void main(String[ ] args){ int[ ] ...
- 日常Java(测试 (二柱)修改版)2021/9/22
题目: 一家软件公司程序员二柱的小孩上了小学二年级,老师让家长每天出30道四则运算题目给小学生做. 二柱一下打印出好多份不同的题目,让孩子做了.老师看了作业之后,对二柱赞许有加.别的老师闻讯, 问二柱 ...
- pyqt5 的串口编写进度
2020.12.18 今天遇到一个问题, 想用回车实现串口数据的发送. 下面这句话是让光标移动到文字的尾部,但是不能够实现. 对QTextEdit控件中的文字改写,或清除后,再调用下面的移动到尾部,就 ...
- OpenStack之四: keystone验证服务(端口5000)
#官网地址:https://docs.openstack.org/keystone/stein/install/keystone-install-rdo.html #:创建库,并授权 MariaDB ...
- Spring.DM版HelloWorld
本文主要描述使用Spring.DM2.0,创建OSGi的HelloWorld演示程序,理解Spring.DM的OSGi框架实现机制. 环境描述: 项目 版本 Eclipse 3.7.x JDK 1 ...
- Spring(1):Spring介绍
一,Spring简介: Spring是一个开源框架,它由Rod Johnson创建:它是为了解决企业应用开发的复杂性而创建的 Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架 ...
- 【Python】【Module】time
#_*_coding:utf-8_*_ __author__ = 'Alex Li' import time # print(time.clock()) #返回处理器时间,3.3开始已废弃 , 改成了 ...