swift自动化测试

刚刚给公司项目加上自动化测试,分享一下

成都创新互联自2013年创立以来,是专业互联网技术服务公司,拥有项目成都做网站、网站制作、成都外贸网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元明水做网站,已为上家服务,为明水各地企业和个人服务,联系电话:028-86922220

1、在原来项目的基础上,创建自动化测试 TARGETS 

swift 自动化测试

2、修改名称为:项目名-dev(分两步)

第一步:直接双击target,直接修改

swift 自动化测试

第二步:下拉模拟器列表,选中manager schemes,在弹出的窗体直接双击修改

swift 自动化测试

3、修改环境变量,添加 DEV 标签

选中DEV target, Build Settings --> Other Swift Flags --> 添加 -D DEV 两行

swift 自动化测试

4、配置对应的info.plist文件,选中targets,右边选择info文件

swift 自动化测试

5、到这里为止,测试target已经创建完毕,剩下的要写代码了

找到工程文件夹 (工程名UITests)

创建一个swift 文件 (工程名_MonkeyUITest )

上代码:(代码里面的“Sign in” 是登录按钮的title,“UserName” 是登录用户名的输入框的水印文字,“Password” 是密码输入框的水印文字,对应改成你们自己工程的就行)

//

// sst_MonkeyUITest.swift

// sst-ios

//

// Copyright 2016 SST. All rights reserved.

//

import XCTest

class sst_MonkeyUITest:XCTestCase {

    

   var testCnt =0

    

   overridefunc setUp() {

       super.setUp()

        

       // Put setup code here. This method is called before the invocation of each test method in the class.

        

       // In UI tests it is usually best to stop immediately when a failure occurs.

       continueAfterFailure =true

       // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method.

       XCUIApplication().launch()

       // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.

   }

    

   overridefunc tearDown() {

       // Put teardown code here. This method is called after the invocation of each test method in the class.

       super.tearDown()

   }

    

   overridefunc recordFailure(withDescription description:String, inFile filePath:String, atLine lineNumber:UInt, expected:Bool) {

       print("\(description)\(self.testCnt)")

   }

    

   func testExample() {

       // Use recording to get started writing UI tests.

       // Use XCTAssert and related functions to verify your tests produce the correct results.

   }

    

   func fRandom(_ upperBound:UInt32) ->UInt32 {

       returnarc4random_uniform(upperBound)

   }

    

   func testMonkey() {

       let app =XCUIApplication()

        

       for_in0 ..<1000000 {

            

           // Login or Paypal

           if app.secureTextFields.count ==1 {

               var isLoginV =false

               for indin0 ..< app.buttons.count {

                   if app.buttons.element(boundBy: ind).label=="Sign in" { // Login

                       isLoginV =true

                       break

                   }

               }

               if isLoginV {

                   let emailTextField = app.textFields["UserName"]

                   emailTextField.tap()

                   iflet email = emailTextField.valueas?String {

                       if email !="UPIS1" {

                           let deleteKey = app.keys["delete"]

                           for_in0 ..< email.characters.count {

                               deleteKey.tap()

                           }

                           emailTextField.typeText("UPIS1")

                       }

                   }

                   app.buttons["Next"].tap()

                   let passwordSecureTextField = app.secureTextFields["Password"]

                   passwordSecureTextField.tap()

                   passwordSecureTextField.typeText("888888")

                   app.buttons["Done"].tap()

               }else {

                   // Paypal

               }

           }

            

           var isValidAction =false

           for_in0 ..<999 {

               switchfRandom(9) {

               case1,2,3:

                   if app.cells.count >0 {

                       let ind =UInt(fRandom(UInt32(app.buttons.count)))

                       let cell = app.cells.element(boundBy: ind)

                       if cell.exists&& ind < app.cells.count {

                           cell.coordinate(withNormalizedOffset:CGVector(dx:0.5, dy:0.5)).tap()

                           isValidAction =true

                       }

                   }

               case4:

                   if app.scrollViews.count >0 {

                       let scrollView = app.scrollViews.element(boundBy:UInt(fRandom(UInt32(app.scrollViews.count))))

                       if scrollView.exists&& scrollView.isHittable {

                           switchfRandom(4) {

                           case0:

                               scrollView.swipeDown()

                           case1:

                               scrollView.swipeUp()

                           case2:

                               scrollView.swipeLeft()

                           default:

                               scrollView.swipeRight()

                           }

                           isValidAction =true

                       }

                   }

               default:

                   if app.buttons.count >0 {

                       let ind =UInt(fRandom(UInt32(app.buttons.count)))

                       let button = app.buttons.element(boundBy: ind)

                       if button.isHittable&& ind < app.buttons.count {

                           button.coordinate(withNormalizedOffset:CGVector(dx:0.5, dy:0.5)).tap()

                           isValidAction =true

                       }

                   }

               }

               if isValidAction {

                   break

               }

           }

            

           testCnt +=1

       }

        

       print("Complete Monkey Test.\(testCnt)")

   }

    

   func randomCGFloat(_ upperBound:CGFloat) ->CGFloat {

       returnCGFloat(arc4random_uniform(UInt32(upperBound)))

http://hbruida.cn/article/igcsos.html