前言

发布内测版的时候,每次在提交代码前、上传ipa包前、发布前都需要手动地跑一下主流程,比如在视频详情页划几页,在直播页划几个直播间等。都是比较重复且有规律的操作,可以利用自动化测试来代替手工操作。

我们在Jenkins上面打包时,会有一个UI自动化测试的选项,是架构组自己弄的一套自动化测试环境,想要自己搭建估计不太方便。所以需要有一套轻量级切足够易用的UI自动化测试框架。

XCUITest

简介

XCUITest是苹果在iOS9.3提供的自动化测试框架(iOS9.3之前提供的是UI Automation),Xcode自带的框架,不需要搭建其它环境,由于是苹果提供的框架,运行稳定。使用Swift或者OC编写测试用例(可能对于测试不是很友好)。

使用

func testExample() throws {
    // UI tests must launch the application that they test.
    let app = XCUIApplication(bundleIdentifier: "appium.test")
    app.launch() // 启动应用

    for _ in 1 ..< 5 {
        app.swipeUp() // 上划
    }
    
    for _ in 1 ... 3 {
        app.swipeRight() // 右划
    }
    
    app.swipeDown() // 下划刷新
    
    sleep(5) // 等待5s再执行下一步
    
    app.cells.firstMatch.tap() // 点击当前的第一个cell
    
    for _ in 1 ... 5 {
        app.swipeUp() // 上划
        sleep(2) // 等待2s再执行下一步
    }
    
    app.buttons["live_room_quit_btn"].tap() // 点击标志btn
}

通过id获取UI元素,需要先在代码设置accessibilityIdentifier: _quitButton.accessibilityIdentifier = @"live_room_quit_btn";

Appium

简介

Appium是一个开源的、跨平台的自动化测试工具,支持iOS、Android和FirefoxOS平台。支持多种语言编写用例,对测试比较友好。

原理

在iOS平台中,需要把WebDriverAgent编译安装到手机上,WebDriverAgent用于跟苹果的XCTest框架交互,WebDriverAgent还会起一个服务,监听Appium客户端发送的指令。

整个流程就是这样子: 测试脚本 -> Appium -> 把脚本转化为json数据 -> 传输到WebDriverAgent -> 转化为XCTest可识别的指令 -> 控制app执行

7f63713ed9b56fa161998497999235e4

使用

#! /usr/local/bin/python3
# -*- coding: utf-8 -*-

import time
import wda
import logging

if __name__ == '__main__':
    bundle_id = "appium.test"
    c = wda.USBClient()
    s = c.session(bundle_id)
    s.app_start(bundle_id)

    for time in range(5):
        s.swipe_up()

    for time in range(3):
        s.swipe_right()

    s.swipe_down()

    s.click(100, 200)

    for time in range(5):
        s.swipe_up()

    s.close()

WebDriverAgent python-wda iOS 真机如何安装 WebDriverAgent Appium文档

其它自动化测试框架

540a17aafba3d64fe6759c48d2515911

其它自动化测试框架简介

注意点

不要在正式环境测试,避免短时间内出现多次请求,触发后台告警(灰度环境也属于正式环境)。

e9be3589222ebd14f9aa08e1352e8ef1