ios monkey稳定性测试 -swift monkey

转载 2018年01月25日 21:59:21

从前有种测试叫瞎点测试,哦不,随机测试。Android 上有 Monkey。我们以前用 Monkey 来跑 Android 机顶盒,跑出了一堆非常难解决的 kernel 问题,帮助还是很大的。市场上随便挑个 Android 应用,monkey 能跑个 30 分钟应该算是了不起了。苹果没有给 iOS 提供 Monkey。大概 iOS 应用质量比较好吧。。

好在很多无聊的人研究测试技术,于是就有了很多 iOS 上的 monkey 工具。比如基于 UIAutomation 的 monkey —— https://github.com/jonathanpenn/ui-auto-monkey。通过 copy from stackoverflow 和 copy from github 模式,我们也熟练掌握了 iOS 上的 monkey。不幸的是,iOS 和 Xcode 升级之后,UIAutomation 框架被砍掉了,于是很长时间 iOS 没有 monkey 的说法了。然后无聊的外国人又整了一个基于 XCUITesting 框架的 monkey 工具 —— https://github.com/zalando/SwiftMonkey。社区里早就有人用过了,但是都藏着掖着。那我是最近才知道,所以拿过来用用。

安装配置

现在每天都有人来问我 Appium 的问题,90%是安装配置问题,10%是不知所谓。所以想对所有创造自动化工具的人说,你解决了安装配置问题,你就已经成功了。

SwiftMonkey 的配置挺简单的。用 CocoaPods —— 这个我没试过:

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

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

手动安装

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

然后呢,把 SwiftMonkey.framework 添加为你的 test target 的依赖。在 test 的 build phase 那里添加 Copy Files。如图:

然后其实就可以用了。

对于 SwiftMonkeyPaws,这个玩意就是让你的事件会有一个熊掌的反馈,这个得放到 app 的 target 里去,因为是 app 使用的。放到 Embedded Binaries 即可,如图:

然后在你应用里任何地方导入 SwiftMonkeyPaws,初始化它就可以了。

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
}

SwiftMonkeyPaws的效果就是那些熊掌,如下图:

遇到的坑

  1. 原来是 objc 的代码能否使用?

    1. 可以,只要新建一个 XCUITesting 的新项目即可。如图:

    然后在,在测试用例里加入代码:

    //
    //  SwiftMonkeyExampleUITests.swift
    //  SwiftMonkeyExampleUITests
    //
    //  Created by Dag Agren on 07/11/2016.
    //  Copyright © 2016 Zalando SE. All rights reserved.
    //
    
    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()
        }
    }
    
    

    同时,别忘记在 build setting 里勾选上 Swift 的标准库,如图:

    然后运行测试就可以了。

  2. 登录相关:
    这事情其实不难,因为 iOS 的这个 monkey 其实就是你自己写的测试用例嘛。在开始之间用 XCUITesting 搞定登陆的事情就可以了。申明,这个我没试过,我是理论家。

一句话原理

其实你用就可以了,知道原理干嘛呢?人糊涂一点过的好一点。SwiftMonkey 把 XCTesting 的私有 API 拿出来用了,直接通过 XCEventGenerator 来模拟事件。所以如果你的应用植入了 SwiftMonkey 千万不要拿去提交 AppStore。

总结

感谢老外,让我们 copy from stackoverflow 和 copy from github 走的更好。SwiftMonkey 真机和模拟器都可以使用,亲测。

稳定性测试方法之Monkey测试

稳定性测试一般通过自动化手段完成。 Monkey测试 Android SDK提供了“monkey”这个自动化测试工具,可以运行在模拟器里或实际设备中,向系统发送随机的用户事件流,如按键输入、触摸屏...
  • wei_lei
  • wei_lei
  • 2017年04月24日 16:43
  • 676

[Android 测试] 压力稳定性测试之: Monkey 详解分析脚本

一、什么是稳定性测试?通过随机点击屏幕一段时间,看看app会不会奔溃,能不能维持正常运行。二. Money是什么?Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户...
  • niubitianping
  • niubitianping
  • 2016年10月11日 10:08
  • 3236

Android稳定性测试-- Monkey源码分析

Monkey的代码框架 主控模块:主控模块即Monkey类,是入口函数所在类,主要负责参数解析和赋值、初始化运行环境,执行runMonkeyCycles()方法,针对不同的事件源开始获取并...
  • ToBeTheEnder
  • ToBeTheEnder
  • 2017年01月03日 19:40
  • 1684

monkey稳定性测试尝试

Monkeymonkey是通过向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。 连上设备后 adb shell 进入shell命令可以执行...
  • gaogaorimu
  • gaogaorimu
  • 2016年03月10日 19:45
  • 415

Android稳定性测试利器-Monkey介绍及环境配置

 一、什么是Monkey Monkey是Android中的一个命令行工具,可以运行在Android模拟器或手机设备中。它向系统发送伪随机的用户事件流(如屏幕的点击、滑动和系统按键操作等),实现...
  • nicolas_li
  • nicolas_li
  • 2016年07月27日 14:30
  • 2366

Android稳定性测试工具Monkey的使用

Monkey是一个命令行工具,它可以运行在我们的模拟器或者设备当中。它可以发送一些伪随机(pseudo-random)的用户事件流,例如点击,触摸,手势等。我们能够使用Monkey工具来对我们所开发的...
  • ljd2038
  • ljd2038
  • 2017年01月15日 13:07
  • 3140

iOS Monkey工具初探

因项目准备对外推广,应用的性能及稳定性成功重点关注对象。一方面针对 Bugly 收集到的 Crash 信息逐个分析;另一方面希望加强用户随机性 Crash 的分析,这就要使用 Monkey Test。...
  • rigel_xu
  • rigel_xu
  • 2015年09月11日 14:13
  • 3339

python+adb+monkey实现Rom稳定性测试

使用python+adb+monkey实现应用安装卸载、启动,用来测试系统稳定性。
  • junjie_wu
  • junjie_wu
  • 2016年07月13日 11:34
  • 920

iOS客户端monkey测试

简介monkey测试指的是,app根据系统随机产生操作指令,进行各种随机的操作,测试执行一段时间后,观察app是否有crash或者异常日志。 在monkey中主要是模拟用户点击、滑动、长按、返回这几...
  • wf96390
  • wf96390
  • 2017年03月26日 21:30
  • 2993

Monkey测试教程

20170209整理  很抱歉,文档里的图片都未能copy过来。。。   什么是monkey,它能干什么? Monkey术语叫“猴子测试”,是指没有测试经验的人进行的测试是毫无目的,乱按乱点。 Mon...
  • lxmhuendan
  • lxmhuendan
  • 2017年02月09日 14:35
  • 512
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ios monkey稳定性测试 -swift monkey
举报原因:
原因补充:

(最多只允许输入30个字)