Swift Monkey整理

Swift Monkey Test

基于框架:XCTest
代碼侵入:有
支持語(yǔ)言:OC,Swift
用例語(yǔ)言:Swift
官方鏈接:https://github.com/zalando/SwiftMonkey
接入方式:手動(dòng),pod(暫時(shí)無(wú)法成功既忆,稍后說(shuō)明)
優(yōu)點(diǎn):每秒action較多
缺點(diǎn):需要源碼驱负;由于事件完全隨機(jī),可能長(zhǎng)時(shí)間無(wú)法跳出某個(gè)頁(yè)面患雇,

安裝配置

手動(dòng)安裝

1.git上下載源碼https://github.com/zalando/SwiftMonkey 跃脊,把 SwiftMonkey 和 SwiftMonkeyPaws 目錄粘貼到你的項(xiàng)目目錄下去。然后把他們兩的 xcodeproj 拖到項(xiàng)目中去

1.jpg

2.Swift Monkey是基于XCTest,所以需要新建一個(gè)UI Test target且為其配置依賴苛吱。選擇Test target的Build Phases酪术,
a.Target Dependencies添加SwiftMonkey.framework;
b.Copy Files添加SwiftMonkey.framework,Destination選擇Frameworks

2.jpg

3.添加SwiftMonkeyPaws對(duì)原始app代碼有侵入性又谋,可以選擇性添加拼缝。添加后可以在界面上顯示點(diǎn)擊的位置。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

問(wèn)題:pod過(guò)程中彰亥,提示找不到SwiftMonkeyPaws,無(wú)法解決

添加UI Test Target

1.選擇對(duì)應(yīng)的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可控參數(shù)分析

操作行為的權(quán)重,通過(guò)不同行為的權(quán)重可以控制行為出現(xiàn)的概率

   public func addDefaultXCTestPrivateActions() {
        addXCTestTapAction(weight: 40)                        //點(diǎn)擊
        addXCTestLongPressAction(weight: 1)               //長(zhǎng)按
        addXCTestDragAction(weight: 25)                      //拖動(dòng)
        addXCTestPinchCloseAction(weight: 1)              //捏(縮谐芴巍)
        addXCTestPinchOpenAction(weight: 1)              //捏(放大)
        addXCTestRotateAction(weight: 1)                      //旋轉(zhuǎn)
        //addXCTestOrientationAction(weight: 1) // TODO: Investigate why this does not work.
    }

備注:
若app target為oc工程废酷,且需要調(diào)用SwiftMonkeyPaws,若出現(xiàn)如下錯(cuò)誤
dyld: Library not loaded: @rpath/libswiftCore.dylib
主要原因是oc工程無(wú)法直接動(dòng)態(tài)調(diào)用swift的庫(kù)抹缕,需要在app target進(jìn)行設(shè)置澈蟆,具體操作如下:
Build Settings -> Build Options -> "Embedded Content Contains Swift Code" 設(shè)為YES即可,默認(rèn)是NO

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末卓研,一起剝皮案震驚了整個(gè)濱河市趴俘,隨后出現(xiàn)的幾起案子睹簇,更是在濱河造成了極大的恐慌,老刑警劉巖寥闪,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件太惠,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡疲憋,警方通過(guò)查閱死者的電腦和手機(jī)凿渊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)缚柳,“玉大人埃脏,你說(shuō)我怎么就攤上這事∏锩Γ” “怎么了彩掐?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)翰绊。 經(jīng)常有香客問(wèn)我佩谷,道長(zhǎng),這世上最難降的妖魔是什么监嗜? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任谐檀,我火速辦了婚禮,結(jié)果婚禮上裁奇,老公的妹妹穿的比我還像新娘桐猬。我一直安慰自己,他們只是感情好刽肠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布溃肪。 她就那樣靜靜地躺著,像睡著了一般音五。 火紅的嫁衣襯著肌膚如雪惫撰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天躺涝,我揣著相機(jī)與錄音厨钻,去河邊找鬼。 笑死坚嗜,一個(gè)胖子當(dāng)著我的面吹牛夯膀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播苍蔬,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼诱建,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了碟绑?” 一聲冷哼從身側(cè)響起俺猿,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤茎匠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后辜荠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體汽抚,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年伯病,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了造烁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡午笛,死狀恐怖惭蟋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情药磺,我是刑警寧澤告组,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站癌佩,受9級(jí)特大地震影響木缝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜围辙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一我碟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧姚建,春花似錦矫俺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至稿湿,卻和暖如春铅匹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背饺藤。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工伊群, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人策精。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像崇棠,于是被迫代替她去往敵國(guó)和親咽袜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)枕稀、插件询刹、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,103評(píng)論 4 62
  • 嗯哼嗯哼蹦擦擦~~~ 轉(zhuǎn)載自:https://github.com/Tim9Liu9/TimLiu-iOS 目錄 ...
    philiha閱讀 4,883評(píng)論 0 6
  • 前天是3.8女神節(jié),人人都喊著“女神節(jié)快樂”蔽挠∽〈常“嗨,女神~”澳淑,當(dāng)別人這樣叫你時(shí)比原,別當(dāng)真,因?yàn)檫@往往是他人一句恭維和...
    宋頌grace閱讀 772評(píng)論 0 5
  • 人生于世,不是生離氢拥,即是死別蚌铜,或與自己,或同他人嫩海。 既然離別無(wú)法避免冬殃,不如干脆痛快些,告別的時(shí)候出革,無(wú)需像韓寒所...
    Manba小生閱讀 527評(píng)論 0 1
  • 上一篇:【內(nèi)容營(yíng)銷的作用以及注意事項(xiàng)】下一篇:【捆綁下載】 搜索引擎的優(yōu)化 ??有了優(yōu)質(zhì)的內(nèi)容造壮,接下來(lái)要做的就是讓...
    Null_Point閱讀 1,097評(píng)論 0 1