在OC项目下实现SwiftMonkey

这周一直在研究iOS上的monkey测试,然后把SwiftMonkey跑了起来,虽然网上已经好多关于这个的资料,但是对自己来说,也是一个学习过程,于是决定把整个实现流程记录下来,重新梳理总结一下,也相当于重新学习一遍,加深一下印象吧。

一、SwiftMonkey简介

swiftmonkey是国外友人基于 XCUITesting 框架开发的 monkey 工具,是用swift语言写的,SwiftMonkey 把 XCTesting 的私有 API 拿出来用了,直接通过 XCEventGenerator 来模拟事件。

源码的GitHub的地址:https://github.com/zalando/SwiftMonkey

二、在项目中集成SwiftMonkey

1、下载SwiftMonkey源码到本地

2、使用finder打开需要集成的项目目录,然后把 SwiftMonkey(和SwiftMonkeyPaws,SwiftMonkeyPaws就是为了给各种操作增加UI效果而已,可以不添加)目录粘贴到你的项目目录下去。

3、使用Xcode打开需要集成的项目,然后把SwiftMonkey 和 SwiftMonkeyPaws的 xcodeproj 拖到xcode界面显示项目中去,如图1:


在OC项目下实现SwiftMonkey_第1张图片
图1

4、点击Xcode的file->New->Target新建一个target,按默认勾选的iOS UI Testing Bundle,然后直接next就好了,如图2:


在OC项目下实现SwiftMonkey_第2张图片
图2

5、下一步之后,因为基于 XCUITesting 框架的 monkey 工具是用swift编写的,所以在language选项选择swift,其他选项按默认的就好,如图3:


在OC项目下实现SwiftMonkey_第3张图片
图3

6、然后在新建的target上,将 SwiftMonkey.framework 添加为target 的依赖,即在building phases下的target dependencies下,点击“+”添加即可。然后 build phase 那里添加 Copy Files,见图4和图5


在OC项目下实现SwiftMonkey_第4张图片
图4
在OC项目下实现SwiftMonkey_第5张图片
图5

7、把build settings里的build options的“always embed swift standard libraries”设置为yes。

8、打开新建target下的UITest.swift文件,替换如下代码;

import XCTest

import SwiftMonkey

class SwiftMonkeyExampleUITests: 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()

}

}

完成以上步骤之后,monkey的配置也就基本完成了,点击xcode的produck->test开始测试,然后再点击如图6的播放按钮开始运行monkey。


在OC项目下实现SwiftMonkey_第6张图片
图6

三、总结

在开始搞这个的时候,由于之前完全没用过mac和xcode,之间的各种不知如何操作就不说了,然后因为我们的项目调了很多第三方库,我把项目代码拖回来之后,又要安装cocoapod,在公司的龟速网络下下了一个下午才搞定,然后又安装pod,唉...

然后一开始还是按照别人swift工程的导入情况去实现的,然后把SwiftMonkeyPaws也加进去了,但是SwiftMonkeyPaws有一段初始化代码需要添加,然后添加上去报错了才知道,在oc上引用swift 的代码,还需要搞桥接,鉴于各种蛋疼,于是就不要了。

所以,看别人的教程方法啊可能很简单,操作一步一步的,但是只有在实际操作过了,你才真正地能学到东西。






















}

你可能感兴趣的:(在OC项目下实现SwiftMonkey)