iOS OC SwiftMonkey 自動化測試 通過Pods整合

獨樂樂發表於2018-01-18

前言 SwiftMonkey 是一個不錯的自動測試工具。但是網上的OC整合SwiftMonkey都太麻煩。他們都是用拖拽檔案的方式整合的。這次我用的是CocoaPods的方式整合,整個過程很簡單。



0 Xcode,MAC,CocoaPods環境。如果有人真沒有CocoaPods環境,去配置一下吧。

先說一下target。我們建立一個專案,這個專案是project,建立專案的時候預設會建立一個同名的target。一個專案下可以有多個target。可以運用這個特性來配置一個專案的不同使用環境。

1 首先要有一個應用。。。(當然了)。

我建立了一個叫 SwiftMonkeyTest 的應用。

2 要保證應用中有一個swift的UITests target。

2.1 如果沒有就建立一個。

2.2 如果是OC的刪了建立一個。

iOS OC SwiftMonkey 自動化測試 通過Pods整合

iOS OC SwiftMonkey 自動化測試 通過Pods整合

iOS OC SwiftMonkey 自動化測試 通過Pods整合


3 配置Podfile,然後 Pod install。

iOS OC SwiftMonkey 自動化測試 通過Pods整合


4 選擇SwiftMonkey兩個包的swift版本

iOS OC SwiftMonkey 自動化測試 通過Pods整合

iOS OC SwiftMonkey 自動化測試 通過Pods整合


5 在你新建的target的xxTestUITests替換如下程式碼。

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()
     }
}
複製程式碼



6 在Appdelegate中新增如下程式碼

#import <SwiftMonkeyPaws/SwiftMonkeyPaws-Swift.h>
複製程式碼
@property (nonatomic, strong)MonkeyPaws * paws;
複製程式碼
#ifdef DEBUG
    self.paws = [[MonkeyPaws alloc]initWithView:self.window tapUIApplication:YES];
#endif
複製程式碼



7 執行下看看,如果沒問題的話,就可以進行Test操作了。

iOS OC SwiftMonkey 自動化測試 通過Pods整合


8 問題解決

8.1 如果報ld: library not found for -l錯誤了。

那麼說明你這個專案至少有一定的完成度了,哈哈哈。解決辦法如下:找到Other Linker Flags 新增$(inherited)。如果還不行。把其他的都刪了。

iOS OC SwiftMonkey 自動化測試 通過Pods整合

8.2 如果找不到標頭檔案了

用#import <xxxxx/xxxxx.h>的形式應用pod檔案



ps 如果有問題,歡迎討論。

相關文章