Monkey工具之fastbot-iOS实践

背景

目前移动端App上线后 crash 率比较高, 尤其在iOS端。我们需要一款Monkey工具测试App的稳定性,更早的发现crash问题并修复。

去年移动开发者大会上有参加 fastbot 的分享,所以很自然的就想到Fastbot工具。

Fastbot-iOS安装配置

准备工具

  • XCode: iOS开发IDE。
  • CocoaPads: 用来管理XCode依赖库的项目。
  • Fastbot_iOS: github项目。
  • tidevice: iOS 自动化工具。
  1. 通过macOS应用商店下载XCode。

  1. 安装cocoapods
> sudo gem install cocoapods -v=1.8.1
  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是项目下面的子目录。

  1. 通过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)

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

Scheme中设置参数,参考表格:

字段说明示例
BUNDLEID被测试App的 Bundle IDcom.apple.Pages
duration测试时长,单位分钟240
throttle操作间隔,单位毫秒300
launchenv启动测试App的环境变量,一般为空,或者以 ':'分割的key=value形式isAutoTestUI=1:=AutoTest
  1. 执行测试

点击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

  1. 安装tidevices
> pip install -U tidevice
  1. 使用tidevice检查连接的设备udid
> tidevice list
List of apple devices attached
xxxx-xxxxxxxxxxx iPhone USB
  1. 检查是否安装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。这一步极为重要。

  1. 通过tidevices 运行测试
> tidevice xctest -B bytedance.FastbotRunner.name.xctrunner -e BUNDLEID:com.apple.Pages -e duration:480 -e throttle:300  --debug

参考前面,Scheme参数说明。

遇到的问题

  1. fastbot是如何遍历的?

这是我们想搞懂的一个问题,以便于看看是否有可配置的选项。

fastbot- 算法原理

我们将页面的 GUI 信息抽象成模型中的 State,将执行的动作抽象成模型中的 Action,通过 State 作为图的节点,Action 作为图的边,连接形成有向有环图模型。遍历决策想法上源于 Alphago 的蒙特卡洛搜索树的思想,此基础上我们也使用了其他强化学习的方法,设计了 N 步 Q-Learning 算法和基于页面变化程度的 reward function,为页面下每个 Action 计算出相应的 Q 值,基于 Q 值选取最优动作。
...
我们选择使用好奇心强化学习的方法来解决奖励稀疏问题,同时结合自然语言处理对页面信息做特征抽象,在原有 reward function 基础上增加好奇心(Curiosity)的 reward

上面摘自《奔跑吧!智能Monkey之Fastbot跨平台》 一文,所以不用做过多的人工配置或干预。随着不断执行App 的遍历,也是不断强化遍历的工具的学习的过程。

  1. fastbot不识别元素或无法解析DOM tree怎办?

这一点对我们尤为重要,因为我们的App中大量页面是用flutter实现的,做传统的UI自动化是非常麻烦。

在 Fastbot 低能耗、低耗时、高性能前提要求下,我们优先选用最基础的图像处理技术来识别 GUI 界面信息,可以在毫秒级完成构建一个页面的信息。

上面摘自《奔跑吧!智能Monkey之Fastbot跨平台》 一文, 强烈建议阅读原文,多读几遍,受益匪浅。

  1. 如何同时执行多个设备?

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
  1. 测出了崩溃怎么办?

我一开始想当然的以为测出了崩溃工具就停止呗,以至于我跑了两天都以为工具没发现崩溃。后来,在官方的微信群里问过才知道,崩溃后重新启动App继续执行。直到设置的运行时间结束。

  1. 如何获取崩溃报告?

这一步也很重要,总不能崩溃就崩溃了吧!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平台上统计分析。


              【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图】


一、Python编程入门到精通

二、接口自动化项目实战 

三、Web自动化项目实战

四、App自动化项目实战 

五、一线大厂简历

六、测试开发DevOps体系 

七、常用自动化测试工具

八、JMeter性能测试 

九、总结(尾部小惊喜)

生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!

生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!

只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到! 

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/244920.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

变电站蓄电池在线监测系统(论文+源码)

1. 系统设计 本次课题为变电站蓄电池在线监测系统的设计,其系统架构如图3.1所示,包括了主控制器STC89C52单片机,液晶显示器LCD1602,模数转换器ADC0832,电流传感器ACS712,分压电阻,蜂鸣器以及温度传感器。在…

实用篇 | 3D建模中Blender软件的下载及使用[图文详情]

本文基于数字人系列的3D建模工具Blender软件的安装及使用,还介绍了图片生成3D模型的AI工具~ 目录 1.Blender的下载 2.Blender的使用 3.安装插件(通过压缩包安装) 4.实例 4.1.Blender使用MB-Lab插件快速人体模型建构 4.1.1.点击官网,进行下载 4.1.…

消息可靠性保证

回顾RabbitMQ的消息传递过程 如图所示,发生消息丢失的可能阶段也就是生产者发送消息,时rabbitmq存储消息时,消费者消费消息时。项目源码:gitee 生产者发送消息阶段 生产者发送消息时把交换机名写错生产者发送消息时把routingK…

推荐一款好用的包含表格识别的OCR网站

在当今数字化的时代,文字和表格识别已经成为了许多行业的关键技术。无论是处理大量的纸质文档,还是从网络上收集数据,OCR(光学字符识别)技术都扮演着重要的角色。然而,对于许多用户来说,OCR软件…

Infobright列存数据库原理介绍

简介 Infobright 是一个面向 OLAP 场景的开源列存数据库。比较容易找到代码的版本是 Infobright Community Edition 4.0.7,大概是 2006 年前后的代码。2016 年6 月,Infobright 决定停止开源1。由于它同时提供企业版和社区版,开源版本的功能相…

斑马zebra目标检测数据集VOC+YOLO格式2300张

斑马是由四百万年前的原马进化出来的,最早出现的斑马可能是细纹斑马。有关史前马科动物的化石现存于美国爱达荷州克文的克文化石床国家博物馆。斑马的史前马为“克文马”(美洲斑马或者克文斑马),学名为“Equussimplicidens”&…

WordPress VIP收费下载插件Erphpdown v17.0.1 开心版

会员推广下载专业版 WordPress插件(erphpdown)是模板兔开发的一款针对虚拟资源收费下载/付费下载/付费视频/收费查看/付费阅读/付费查看/VIP下载查看的插件,经过完美测试运行于wordpress 3.x-5.x版本。后续模板兔会增加更多实用的功能。 模板…

docker部署go gin框架 Linux环境

目录 文章目的是什么 环境介绍 Linux 环境下 docker 部署 go gin 详细步骤 部署 gin 文章目的是什么 假设我们学习了 go 语言,在 Linux 上安装了 go 相关的程序,也能直接运行,使用以下命令: go run main.go 假如代码是这样的…

跟着我学Python基础篇:08.集合和字典

往期文章 跟着我学Python基础篇:01.初露端倪 跟着我学Python基础篇:02.数字与字符串编程 跟着我学Python基础篇:03.选择结构 跟着我学Python基础篇:04.循环 跟着我学Python基础篇:05.函数 跟着我学Python基础篇&#…

java设计模式学习之【代理模式】

文章目录 引言代理模式简介定义与用途实现方式 使用场景优势与劣势在Spring框架中的应用图片加载示例代码地址 引言 在现实生活中,我们经常使用代理来处理我们不想直接参与或无法直接参与的事务,例如,使用律师来代表法庭上的案件。在软件开发…

计算机网络——网络层——OSPF协议的介绍

什么是 OSPF ? OSPF 是一个基于链路状态的自治系统内部路由协议,在 TCP/IP 的网络层中进行路由选择,常用于构建大型企业网络或者服务上的骨干网络。在互联网核心路由器之间也可以使用。 OSPF 概述 OSPF 使用的是 Dijkstra(最短…

Vue 实现一个弹出框,允许用户输入信息,并在确认时将输入的信息进行输出到控制台

父组件用来点击按钮弹出弹出框 <!--ParentComponent.vue--> <template><div><button click"showPopupV">点我会有个弹出框&#xff01;&#xff01;&#xff01;</button><PopupComponent v-if"showPopup" :data"p…

【退订】阿里云产品

之前因为学习需要使用了阿里云上的产品服务&#xff0c;项目结束后给忘记了&#xff0c;直到最近阿里云发短信我才知道&#xff1a; 我使用的是datawork的服务&#xff0c;现在先登录阿里云官网&#xff1a; 阿里云-计算&#xff0c;为了无法计算的价值 (aliyun.com) 之后点…

【毕业设计】基于STM32的智能衣柜设计

1、功能说明 功能如下: 1、用stm32控制ds18b20采集温度 2、然后按键可以设置上下限温度&#xff0c; 3、采集的温度低于下限温度时候 打开加热片开始加热&#xff0c; 4、加热到上限温度关闭加热片停止加热&#xff0c; 5、采集的温度可以在oled显示&#xff0c; 6、然后弄个按…

MySQL增量备份与恢复

实验环境 某学校近期在进行期中考试&#xff0c;要求数据库管理员负责一班&#xff0c;二班学生的考试成绩录入&#xff0c;为保证数据的可靠性&#xff0c;数据库管理员在录入学生成绩后均要做数据库备份&#xff0c;并且为了测试备份数据是否可 用&#xff0c;模拟数据丢失故…

MySQL数据库,视图、存储过程与存储函数

数据库对象&#xff1a; 常见的数据库对象&#xff1a; 视图&#xff1a; 视图是一种虚拟表&#xff0c;本身是不具有数据的占用很少的内存空间。 视图建立在已有表的基础上&#xff0c;视图赖以建立的这些表称为基表。 视图的创建和删除只影响视图本身&#xff0c;不影响对…

多云网络互通问题怎么解决——SD-WAN

随着业务的扩张&#xff0c;企业对云资源的用量也越来越大&#xff0c;逐渐形成了混合云架构。要解决多云网络互通的问题&#xff0c;其中一种常见的组网方案是云专线。然而&#xff0c;这种方式也带来了一系列问题&#xff0c;包括&#xff1a; 1、受服务商约束&#xff0c;需…

Docker真的好难用啊,为什么说它移植性好啊?

看起来你对Docker有点困惑和挑战呀。Docker刚开始确实有点难以入门&#xff0c;但是一旦掌握了它的核心概念和操作&#xff0c;你会发现它其实非常强大和便利。 接下来我会根据你提出的问题和场景&#xff0c;详细地解答。 关于你的实际问题&#xff1a; 刚接触时的困难是正。…

【机器学习 | 假设检验系列】假设检验系列—卡方检验(详细案例,数学公式原理推导),最常被忽视得假设检验确定不来看看?

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

【开源软件】最好的开源软件-2023-第17名 Gravite

自我介绍 做一个简单介绍&#xff0c;酒架年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…