Monkey工具之fastbot-iOS实践

打印 上一主题 下一主题

主题 887|帖子 887|积分 2661

软件测试资料领取:[内部资源] 想拿年薪40W+的软件测试人员,这份资料必须领取~

软件测试面试刷题工具:软件测试面试刷题【800道面试题+答案免费刷】

背景

目前移动端App上线后 crash 率比较高, 尤其在iOS端。我们需要一款Monkey工具测试App的稳定性,更早的发现crash题目并修复。
去年移动开发者大会上有参加 fastbot 的分享,所以很自然的就想到Fastbot工具。
Fastbot-iOS安装设置

准备工具


  • XCode: iOS开发IDE。
  • CocoaPads: 用来管理XCode依赖库的项目。
  • Fastbot_iOS: github项目。
  • tidevice: iOS 主动化工具。

  • 通过macOS应用市肆下载XCode。


  • 安装cocoapods
  1. > sudo gem install cocoapods -v=1.8.1
复制代码

  • 克隆fastbot_iOS项目,并初始化
  1. > git clone https://github.com/bytedance/Fastbot_iOS
  2. > cd Fastbot_iOS
  3. > cd Fastbot-iOS && pod install --repo-update
复制代码
  Fastbot_iOS 是克隆的项目目次,Fastbot-iOS是项目下面的子目次。
  

  • 通过Xcode 打开项目Fastbo-iOS项目。
GitHub - bytedance/Fastbot_iOS: About Fastbot(2.0) is a model-based testing tool for modeling GUI transitions to discover app stability problems
   具体设置查看github项目中的《中文手册》,利用步骤非常详细。
  运行测试(XCode)


  • 点击顶部FastbotRunner 弹出菜单,选择Edit Scheme... 选项。

在Scheme中设置参数,参考表格:
字段说明示例BUNDLEID被测试App的 Bundle IDcom.apple.Pagesduration测试时长,单位分钟240throttle利用间隔,单位毫秒300launchenv启动测试App的环境变量,一样平常为空,或者以 ':'分割的key=value形式isAutoTestUI=1:=AutoTest

  • 执行测试
点击testFastbot 按钮,开始运行Monkey测试。你可以在手机端看到被测试App以及启动,并开始主动执行利用。

运行测试(tidevice)

tidevice是阿里开源的iOS主动化测试工具,其实叫主动化工具有点不准确。他本质上有点像android 的 adb 工具,可以明白为PC与iOS之间的通信工具。提供了一些非常有用的功能,查看设备信息、安装卸载应用,当然,最重要的是可以执行XCTest。
github: GitHub - alibaba/taobao-iphone-device: tidevice can be used to communicate with iPhone device

  • 安装tidevices
  1. > pip install -U tidevice
复制代码

  • 利用tidevice查抄连接的设备udid
  1. > tidevice list
  2. List of apple devices attached
  3. xxxx-xxxxxxxxxxx iPhone USB
复制代码

  • 查抄是否安装FastbotRunner-Runner App。
  1. > tidevice ps --json
  2. [
  3.     {
  4.         "pid": 11549,
  5.         "name": "FastbotRunner-Runner",
  6.         "bundle_id": "bytedance.FastbotRunner.name.xctrunner",
  7.         "display_name": "FastbotRunner-Runner"
  8.     },
  9. ]
复制代码
  前参考前面fastbot-iOS《中文手册》,他会详细说明如何在手机上安装FastbotRunner-Runner APP。这一步极为重要。
  

  • 通过tidevices 运行测试
  1. > 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连接多个手机时。
  1. > tidevice list
  2. List of apple devices attached
  3. xxxx-xxxxxxxxxxx iPhone USB
  4. yyyy-yyyyyyyyyyy iPhone USB
复制代码


  • 启动x设备
  1. > tidevice -u xxxx-xxxxxxxxxxx xctest -B bytedance.FastbotRunner.name.xctrunner -e BUNDLEID:com.apple.Pages -e duration:480 -e throttle:300  --debug
复制代码


  • 启动y设备
  1. > 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工具可以集成报告。
Where can I get the test report? · Issue #2 · bytedance/Fastbot_iOS · GitHub
我以为,他也只是说说,因为这是8月份的题目,当然这么好用的工具乐意开源就很好了,不要不知好歹。可能他又有别的KPI要忙~!
那么,我们的App是有集成firebase的SDK,假如App崩溃,那么会上报日记到firebase平台,可以在firebase平台上统计分析。
既然看到这里,盼望点赞收藏支持一下!等待 ~
末了感谢每一个认真阅读我文章的人,下方这份完整的软件测试教程已经整理上传完成,需要的朋友们可以文末自行领取:【保证100%免费】


这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也伴随上万个测试工程师们走过最艰难的路程,盼望也能帮助到你!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

石小疯

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表