zoukankan      html  css  js  c++  java
  • Ios-monkey测试

    一,背景

    需要在ios上进行monkey测试,通过对比发现以后几个monkey的工具后,采用sjk_swiftmonkey

    1.swiftmonkey
           https://github.com/zalando/SwiftMonkey
           直接使用了 苹果的私有 api 如 XCEventGenerator.tapAtTouchLocations 执行速度极快。

          同时也用类似 android monkey 的事件生成机制,自身源源不断的产生如 tap,swipe,pinchIn 等事件使其对被测 app 产生了极大的压力
           缺点:需要插桩

    2.XCTestWD
           https://github.com/macacajs/XCTestWD
           在 xcode 中执行 xcuitest 时启动一个监听 server,可通过外部发送命令来创建待测 app 对应 session 并启动 app,

          依据 xpath,id 等来定位某个控件并操作这些控件

    3.Fastmonkey
           https://github.com/zhangzhao4444/Fastmonkey
           结合两者优点并改造两者,在 XCTestWD 基础上实现一个 server 路由,外部命令时可引导启动 app 并执行 monkey

    缺点:支持xcode8.x,xcode9.x ,xcode10.x,需要更改相应的文件及配置,环境搭建较为复杂

    4.sjk_swiftmonkey

    https://github.com/lcyfly/sjk_swiftmonkey

    二次开发 swiftmonkey,把不支持 10.1 以上的 XCEventGenerator 换成 xctest 的 API,只需修改bundleIdentifier,即可运行,较为方便快捷

    二,搭建sjk_swiftmonkey

    clone 源码,整体项目结构如图

    Monkey: 是程序入口,主要是monkey构造,monkey运行等

    MonkeyXCTest: 扩展monkey使用公共的XCTest API来生成事件

    MonkeyXCTestPrivate:利用私有API生成各种事件的代码

    MonkeyUIAutomation: 利用UIautomation框架来执行各种事件的,但是只支持模拟器

    Random: 生成各种随机数的函数


    1. 在Signing&Capabilities中修改自己的开发者账号,Bundle Identifier随便改个唯一的字符串

    2.jk-monkeyuiTests 里面
    let application = XCUIApplication.init(bundleIdentifier: "com.XXX.xxx")

    3.点击选择自己的设备,然后Product-->Test就可以运行了

    三,Event

    在使用monkey的时候,需要添加随机事件。下面介绍几种随机事件,及其在monkey中的占比(权重)

    TapAction:点击

    LongPressAction:长按

    DragAction:拖拽

    PinchCloseAction:缩小手势

    PinchOpenAction:放大手势

    RotateAction:旋转手势

    例如:
    publicfuncaddDefaultXCTestPrivateActions() {
            addXCTestTapAction(weight: 25)
            addXCTestLongPressAction(weight: 1)
            addXCTestDragAction(weight: 0)
            addXCTestPinchCloseAction(weight: 0)
            addXCTestPinchOpenAction(weight: 0)
            addXCTestRotateAction(weight: 0)
            addXCTestOrientationAction(weight: 1) 
    }
     
     
    所以monkey的执行过程如下:
     初始化monkey,添加随机事件,设置权重,执行monkey
     

    四,插入业务逻辑代码

    1.  每次执行event前判断是否增加业务功能代码,直接执行功能代码

    2. 插入定时循环事件来执行功能代码,swiftmonkey有两种执行事件的方式,

    actRandomly( )  是将添加的随机事件执行
    actRegular( ) 是固定间隔执行事件,可以在这里面增加事件,特定的功能逻辑事件
     
     
     

    五,导出crash日志

    1、第一步将手机连接xcode

    2、选择 Device and Simulators

    3、选择View Device Logs

    4、如果想全部导出 command+A全选之后右键鼠标选择Export Logs

    5、如果想删除所有的崩溃日志 同上 鼠标右键 选择Delete Logs

     
    参考:https://www.cnblogs.com/dreamyu/p/11280030.html(swiftmonkey 源码剖析及二次开发思路
  • 相关阅读:
    奇偶游戏(带权并查集)
    银河英雄传说(边带权并查集)
    程序自动分析(并查集+离散化)
    关于树状数组的小总结(树状数组)
    你能回答这些问题吗 (线段树)
    Phython 3 笔记3 —— 类,库与文件的读写
    Phython 3 笔记2 —— 基础语法
    Phython 3 笔记1 —— 基础容器
    CRJ巨佬gjd算法伪代码
    CRJ巨佬的gjd算法模板
  • 原文地址:https://www.cnblogs.com/muxs/p/15209366.html
Copyright © 2011-2022 走看看