Swift Monkey整理

Swift Monkey Test

基于框架:XCTest
代码侵入:有
支持语言:OC,Swift
用例语言:Swift
官方链接:https://github.com/zalando/SwiftMonkey
接入方式:手动,pod(暂时无法成功,稍后说明)
优点:每秒action较多
缺点:需要源码;由于事件完全随机,可能长时间无法跳出某个页面,

安装配置

手动安装

1.git上下载源码https://github.com/zalando/SwiftMonkey ,把 SwiftMonkey 和 SwiftMonkeyPaws 目录粘贴到你的项目目录下去。然后把他们两的 xcodeproj 拖到项目中去

1.jpg

2.Swift Monkey是基于XCTest,所以需要新建一个UI Test target且为其配置依赖。选择Test target的Build Phases,
a.Target Dependencies添加SwiftMonkey.framework;
b.Copy Files添加SwiftMonkey.framework,Destination选择Frameworks

2.jpg

3.添加SwiftMonkeyPaws对原始app代码有侵入性,可以选择性添加。添加后可以在界面上显示点击的位置。app 的target的Enable Modules中添加SwiftMonkeyPaws的引用

3.jpg

SwiftMonkeyPaws添加到app代码中
swift工程添加

import SwiftMonkeyPaws

var paws: MonkeyPaws?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    if CommandLine.arguments.contains("--MonkeyPaws") {
        paws = MonkeyPaws(view: window!)
    }
    return true
}

oc工程添加(SwiftMonkeyPaws不在app工程中)

@import SwiftMonkeyPaws;
@interface AppDelegate ()
@property (nonatomic) MonkeyPaws *paws;
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    self.window.rootViewController = [[RecordVC alloc] init];
    _paws = [[MonkeyPaws alloc] initWithView:self.window tapUIApplication:YES];
    return YES;
}

oc工程添加(SwiftMonkeyPaws在app工程中)

#import "SwiftMonkeyPaws-Swift.h";
@interface AppDelegate ()
@property (nonatomic) MonkeyPaws *paws;
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    self.window.rootViewController = [[RecordVC alloc] init];
    _paws = [[MonkeyPaws alloc] initWithView:self.window tapUIApplication:YES];
    return YES;
}

pod安装

target "App" do
    pod "SwiftMonkeyPaws", "~> 1.0"
end

target "Tests" do
    pod "SwiftMonkey", "~> 1.0"
end

问题:pod过程中,提示找不到SwiftMonkeyPaws,无法解决

添加UI Test Target

1.选择对应的Target
2.新建UI Test Case Class,该基类为XCTestCase,Language为Swift
3.具体代码如下

//
//  Case.swift
//  BridgeMonkeyDemo
//
//  Created by jc on 2017/9/11.
//  Copyright © 2017年 jc. All rights reserved.
//

import XCTest
import SwiftMonkey

class Case: XCTestCase {
        
    override func setUp() {
        super.setUp()
        XCUIApplication().launch()
    }
    
    override func tearDown() {
        super.tearDown()
    }
    
    func testMonkey() {
        let application = XCUIApplication()
        
        // Workaround for bug in Xcode 7.3. Snapshots are not properly updated
        // when you initially call app.frame, resulting in a zero-sized rect.
        // Doing a random query seems to update everything properly.
        // TODO: Remove this when the Xcode bug is fixed!
        _ = application.descendants(matching: .any).element(boundBy: 0).frame
        
        // Initialise the monkey tester with the current device
        // frame. Giving an explicit seed will make it generate
        // the same sequence of events on each run, and leaving it
        // out will generate a new sequence on each run.
        let monkey = Monkey(frame: application.frame)
        //let monkey = Monkey(seed: 123, frame: application.frame)
        
        // Add actions for the monkey to perform. We just use a
        // default set of actions for this, which is usually enough.
        // Use either one of these but maybe not both.
        // XCTest private actions seem to work better at the moment.
        // UIAutomation actions seem to work only on the simulator.
        monkey.addDefaultXCTestPrivateActions()
        //monkey.addDefaultUIAutomationActions()
        
        // Occasionally, use the regular XCTest functionality
        // to check if an alert is shown, and click a random
        // button on it.
        monkey.addXCTestTapAlertAction(interval: 100, application: application)
        
        // Run the monkey test indefinitely.
        monkey.monkeyAround()
    }
}

Swift Monkey可控参数分析

操作行为的权重,通过不同行为的权重可以控制行为出现的概率

   public func addDefaultXCTestPrivateActions() {
        addXCTestTapAction(weight: 40)                        //点击
        addXCTestLongPressAction(weight: 1)               //长按
        addXCTestDragAction(weight: 25)                      //拖动
        addXCTestPinchCloseAction(weight: 1)              //捏(缩小)
        addXCTestPinchOpenAction(weight: 1)              //捏(放大)
        addXCTestRotateAction(weight: 1)                      //旋转
        //addXCTestOrientationAction(weight: 1) // TODO: Investigate why this does not work.
    }

备注:
若app target为oc工程,且需要调用SwiftMonkeyPaws,若出现如下错误
dyld: Library not loaded: @rpath/libswiftCore.dylib
主要原因是oc工程无法直接动态调用swift的库,需要在app target进行设置,具体操作如下:
Build Settings -> Build Options -> "Embedded Content Contains Swift Code" 设为YES即可,默认是NO

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,016评论 4 62
  • 嗯哼嗯哼蹦擦擦~~~ 转载自:https://github.com/Tim9Liu9/TimLiu-iOS 目录 ...
    philiha阅读 4,835评论 0 6
  • 前天是3.8女神节,人人都喊着“女神节快乐”。“嗨,女神~”,当别人这样叫你时,别当真,因为这往往是他人一句恭维和...
    宋颂grace阅读 760评论 0 5
  • 人生于世,不是生离,即是死别,或与自己,或同他人。 既然离别无法避免,不如干脆痛快些,告别的时候,无需像韩寒所...
    Manba小生阅读 520评论 0 1
  • 上一篇:【内容营销的作用以及注意事项】下一篇:【捆绑下载】 搜索引擎的优化   有了优质的内容,接下来要做的就是让...
    Null_Point阅读 1,080评论 0 1