目录:

一、背景

二、Fastmonkey介绍

三、Fastmonkey操作前准备

四、Fastmonkey工程配置过程

五、执行Monkey测试

六、FAQ

Fastmonkey实践

一、背景:

因众所周知的原因随着Xcode从7.x升级到8.x或9.x,我们无法再使用Instrument的uiautomation脚本对iOS应用进行Monkey测试,所以我们一直期待行业测试与开发大牛产出新的Monkey开源工具,在这期间我们也使用过了一些技术大神开发的基于appium或者基于macaca的开源Monkey测试工具但是都有这样或者那样的问题比如:配置过于复制,上手慢,执行速度达不到要求、有的还需要进行App源码插庄等问题,直到Faskmonkey的出现它集成了众家之长,已经基本能满足我们日常的iOS应用压力测试了。

二、Fastmonkey介绍:

Fastmonkey是zhangzhao大神最近开源的一款iOS应用Monkey测试工具,基于 XCTestWD,swiftmonkey 二次开发,实现无需插桩的 iOS monkey 自动化工具 fastmonkey,优点如下:

1.无需插桩!2.高效率,每秒4-5个action!4.轻量极简!详细介绍请参考TesterHome链接 :

Faskmonkey测试工具介绍

项目开源地址:

Xcode9.x(https://github.com/zhangzhao4444/Fastmonkey

Xcode8.3.x(https://github.com/zhangzhao4444/Fastmonkey/tree/xcode8.3

三、Fastmonkey操作前准备:

注意:本文所述操作步骤都是基于Xcode8.x或者Xcode9.x的版本, 注意针对不的Xcode版本下载不同项目工程的、操作前准备:

1)Xcode8.3.x /Xcode9.x软件;

2)iOS 第三方库管理工具-Carthage;

3)iOS开发者证书文件;

4)Fastmonkey工程代码从github上下载;

详细说明:

1)Xcode8.3/Xcode9.x是用于导入Faskmonkey工程及运行monkey测试;

2)Carthage是iOS用于下载工程所依赖第三方库的;如果没有安装请使用下面命令进行安装:

brew install  carthage

3)iOS开发者证书用于工程中的构建及签名,证书可以是团队的开发者证书也可以是免费的个人开发者证书,如何申请个人开发者证书请大家参考其他文档此处不再敖述。

4)工程代码直接从https://github.com/zhangzhao4444/Fastmonkey下载

四、Fastmonkey工程配置过程

配置是经过我们验证过了,不过因为每一个人的手机与Xcode版本问题可能会一些差异,大家也可以参考TesterHome上的fastmonkey 自我扫盲贴

Fastmonkey的扫盲帖子

1.解压下载后的Fastmonkey-xxx.zip的文件,打开终端进入解压后的子目录XCTestWD-master

 
进入解压后的子目录XCTestWD-master

2.执行下列步骤下载工程所依赖的包 :

1)修改目录中的Cartfile文件,将github "SwiftyJSON/SwiftyJSON" 改为github "SwiftyJSON/SwiftyJSON"  ==  3.1.4   修改github "tadija/AEXML"为github "tadija/AEXML" == 4.1.0如下图:

 
修改目录中的Cartfile文件

2)下载工程所依赖的包

$  carthage update

PS:如果此步骤出现错误请参考后面的FAQ

 
下载工程所依赖的包,可能需要一些时间具体要依赖于您的网络速度,请耐心等待完成

3.配置XCTestWD项目工程:

双击子目录XCTestWD中的XCTestWD.xcodeproj文件打开项目工程

 
 

1)修改Product ID,团队开发者证书需要修改,个人免费开发者证书可跳过此步骤

a. 修改XCTestWD所需要的产品ID如com.xxxx.XCTestWD.XCTestWD

 
xxx为证书所定义的产品ID前缀一般是公司或者企业的域名

b.修改XCTestWDUITests所需要的产品ID如com.xxx.XCTestWD.XCTestWD

 
xxx为证书所定义的产品ID前缀一般是公司或者企业的域名

2)修改签名账号(个人开发Team与团队证书设置是不一样的):

a1.团队开发者证书如下图:

 
a1.修改XCTestWD Code Signing为相应的账号
 
a1.修改XCTestWD Code Signing为相应的Team账号

a2.同a1过程修改XCTestWDUITests的Code Signing账号

b.个人开发者证书如下图:

b1.修改XCTestWDUITests的Code Signing账号

 
 

b2.同b1修改XCTestWD的Code Signing账号

3)添加XCTestWDMonkey.swfit到Server目录

 
右键点击server目录,然选择"Add Files to "XCTestWD"
 
选择【XCTestWDMonkey.swift】文件添加到Server

4)清空XCTestWD的Objective-C Bridging Header选项中的值

 
清空Objective-C Bridging Header选项中的值
 
清空Objective-C Bridging Header选项

4.修改XCTestWD项目工程代码中的配置值:

1)修改运行模式,将XCTestWDRunner.swift文件中的serverMode设置为false如下图

 
修改此项为false后,这样Monkey就可以直接从Xcode中运行,不需要再使用额外的命令了

2)修改XCTestWDMonkey.swift文件中的bundleID为被测App的值的如下图:

 
改为自己App的实际BundleID,如何查找被测App的BundleID请百度一下这里不再敖述

2)修改Monkey.swift文件中的elapsedTime值确定你需要运行多长时间的Monkey,注意单位是秒,如下图:

 
修改Monkey执行时长

五、执行Monkey测试

1)选择要执行的手机与Target注意App事先安装到被测试手机上,手机已经插入Mac电脑USB接口

 
从下拉列表中选择XCTestWDUITests与手机

2)开始执行Monkey

 
选择【Product】--【Test】执行Monkey测试

六、FAQ:

1. 如果carthage update的时候如果报这个错xcrun: error: unable to find utility "xcodebuild", not a developer tool or in PATH需要在Xcode中 Preferences > Locations里设置Command Line Tools为自己使用版本的Xcode --谢谢光晕_9c54的提醒

2.如果是Xcode9.x可能会出现XCTestWDApplication.h file not found错误如下图,请按照下面方法解决:

 
XCTestWDApplication.h file not found错误

添加XCTestWDApplication.h与XCTestWDApplication.m文件到PrivateHeaders目录,如下图

 
选中PrivateHeaders然后点击右键在弹出的界面中选择【Add Files to "XCTestWD"...】项目
 
选择XCTestWDApplication.h与XCTestWDApplication.m然后点击Add
 
XCTestWDApplication.h与XCTestWDApplication.m被添加到了PrivateHeaders中

2.第一次执行时可能会报错,因为需要在手机上信任你的个人证书或者团队证书,第二次执行就不会了。一般位于手机【设置】--【通用】--【描述文件】中

3.每次运行完成后,在Xcode的Debug Ouput框中会输出相应的日志与截图保存位置,每次运行完成后日志会报错,这个错误是由于Fastmonkey的Bug,参加下面Issue链接,主要原因是当执行时长一到时,Monkey测试自行停止,这个停止是强退的,但Xctest没有正常退出造成的,目前还没有找到好的解决方法。

https://github.com/zhangzhao4444/Fastmonkey/issues/12

IOS测试-Fastmonkey的更多相关文章

  1. 使用appium进行ios测试,启动inspector时遇到的问题(一)

    最近在公司,让做ios的自动化测试,因为以前做过android的自动化测试,用的也是appium,觉得没什么,结果一开始在搭建环境就遇到了很多的问题,现在将我遇到的问题,以及解决方法,给大家分享出来. ...

  2. 如何利用Pre.im分发iOS测试包

    大众创新万众创业,在移动互联网的风口,移动APP开发与测试发展方兴未艾,受到了越来越多的重视.相较 iOS,Android 的开发环境更加开放.Android 开发者要测试应用时,只需发个 APK 安 ...

  3. 【读书笔记】iOS-软件测试与iOS测试

    一,软件测试的类型. 1.软件测试按照测试类型,可以划分为:单元测试,集成测试和系统测试. 2.单元测试是指对软件系统中最小可测试单元进行的检查和验证. 3.集成测试,在iOS软件开发中,集成测试主要 ...

  4. iOS测试中发现一个textview控制,使用clear()无法清除文字

    iOS测试中发现一个textview控制,使用clear()无法清除

  5. iOS 测试在应用发布前后的痛点探索以及解决方案

    作者-芈 峮 前言 iOS 开发从 2010 年开始在国内不断地升温,开发和测试相关的问题不绝于耳.iOS 测试主要涉及哪些内容?又有哪些挑战呢?带着疑问我们开始第一个大问题的讨论. iOS 测试的范 ...

  6. 经典软件测试面试题目:Android 和 ios 测试区别?这样回答:稳!

    Android 和  ios 测试区别? App 测试中 ios 和 Android 有哪些区别呢?1.Android 长按 home 键呼出应用列表和切换应用,然后右滑则终止应用:2.多分辨率测试, ...

  7. 【iOS测试】【随笔】帧率FPS评测

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5943263.html   背景 我们的新版App对首页的列 ...

  8. iOS测试常见崩溃

    什么是崩溃日志,从哪里能得它? iOS设备上的应用闪退时,操作系统会生成一个崩溃报告,也叫崩溃日志,保存在设备上.崩溃日志上有很多有用的信息,包括应用是什么情况下闪退的.通常,上面有每个正在执行线程的 ...

  9. 2015年iOS测试现状

    本文由 伯乐在线 - nathanw 翻译,dopcn 校稿.未经许可,禁止转载! 英文出处:www.mokacoding.com.欢迎加入翻译小组. 几周前,我决定将将我在 mokacoding 上 ...

随机推荐

  1. 开源作业调度框架 - Quartz.NET - 实战使用1

    简介: 第一步:下载Quartz.NET 下载Quartz.NET只需要打开网址选择适宜的版本进行下载解压缩即可. 目前最新版本是2.3.3,压缩包为6MB,不过鉴于国内网速.我还是加一下博客园的下载 ...

  2. 【2017.12.05 智能驾驶/汽车电子】转载:如何成为一名无人驾驶工程师 By刘少山

    之前对无人驾驶的理解就是通过刘少山老师的书:第一本无人驾驶技术书 通读之后,对智能驾驶有了一个初步的认识,如感知.决策.控制都涉及哪些领域,有哪些可以利用的技术: 但经过一段时间的实践,发现即使是在我 ...

  3. SDN上机第二次作业

    SDN第二次上机作业 1.安装floodlight 参考链接:http://www.sdnlab.com/19189.html 2.生成拓扑并连接控制器floodlight,利用控制器floodlig ...

  4. PHP设计模式系列 - 解释器模式

    解释器模式 解释器模式 用于分析一个实体的关键元素,并且针对每个元素提供自己的解释或相应动作.解释器模式非常常用,比如PHP的模板引擎 就是非常常见的一种解释器模. 代码: <?php //解释 ...

  5. GIT非常见命令使用笔记

    1:修改已经提交N次代码的user.name和user.email 解决我在多电脑间,使用不同账户,git config 的global,system,local配置忽略改动,而添加了多台电脑ssh ...

  6. base大家族详解

    base大家族详解 */--> pre.src {background-color: #292b2e; color: #b2b2b2;} pre.src {background-color: # ...

  7. TCL函数“参数自动补全” 与 “help 信息显示”

    tcl 函数参数自动补全和 help 信息显示 在EDA tool 中使用命令时,命令的参数可以通过 tab 键自动补全,而且可以使用 -help 显示帮助信息,使用起来很方便: 那么我们自己编写的 ...

  8. Spring事务(一)JDBC方式下的事务使用示例

    摘要: 本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 目录 一.创建数据表结构 二.创建对应数据表的PO 三.创建表与实体间 ...

  9. CommonJS、AMD、CMD、NodeJs、RequireJS到底有什么联系?

    JS中的模块规范(CommonJS,AMD,CMD),如果你听过js模块化这个东西,那么你就应该听过或CommonJS或AMD甚至是CMD这些规范,本文包括这三个规范的来源及对应的产物的原理. 一.C ...

  10. B. A Leapfrog in the Array

    http://codeforces.com/problemset/problem/949/B Dima is a beginner programmer. During his working pro ...