「手把手」一起iOS自动化

第一章. Appium-iOS介绍,环境搭建,appium-desktop使用,登录用例实战(完成)

第二章 appium-desktop 自动化功能参数设置和API学习(完成)

第三章. 方法封装,实战登录(待更新)

第四章. robot framework,Jenkins,自动化邮件报告可以参见《手把手」一起Android自动化》一书(更新了一部分)

第五章. FQA

第一章 appium-desktop之iOS 介绍,环境搭建,appium-desktop使用

​1.1 appium-dektop 框架Ios部分介绍

appium-desktop集成FaceBook的WebDriverAgent在客户端实现一个WebDriver server,借助这个server远程驱动iOS设备实现自动化。

1.1.1 appium-desktop 框架原理,如图1-1-1

「手把手」一起iOS自动化_第1张图片

图1-1-1

1. 图1-1-1中1为iOS电脑。

2. 图1-1-1中2为安装的Python-Appium-client。

3. 图1-1-1中3为编写的自动化用例脚本。

4. 图1-1-1中4为Appium服务器。

5. 图1-1-1中5为被测试手机(iOS测试肯定是iOS手机)。

6. 图1-1-1中6为安装在被测试手机上的WDA(就是在PC和手机被测APP之间通信)。

7. 图1-1-1中7为被测试的APP。

Run流程:准备好自动化脚本后,在iOS电脑上面运行时(当然需要依赖Python-Appium-Client),首先Client跟appium-desktop服务器建立Session连接,再通过Session Driver发送测试命令至appium-desktop服务器,appium-desktop服务器会在连接的iPhone手机(功能参数中设置的手机)上安装运行WebDriverAgentRunner,并跟WebDriverAgentRunner建立通信,然后将测试命令发送给WebDriverAgentRunner,WebDriverAgentRunner接收到测试命令后驱动被测试APP运行动作,然后将驱动结果返回给appium-desktop服务器,appium-desktop服务器返回给Client。

1.2 Appium环境搭建-iOS

1.2.1 环境搭建所需硬件资源

iOS系统的电脑:「手把手」一起iOS自动化_第2张图片       iPhone手机:「手把手」一起iOS自动化_第3张图片

1.2.2 环境搭建

1. Homebrew安装

iOS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径的情况,十分方便快捷。

    a. 在Mack中打开终端命令行工具,如图1-2-1。

「手把手」一起iOS自动化_第4张图片

图1-2-1

    b. 在打开的命令行工具中输入命令 ruby -e "$(curl --insecure -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"并执行,执行时需要输入系统密码,如图1-2-2。

「手把手」一起iOS自动化_第5张图片

图1-2-2

    c. 安装完成后有如下提示,如图1-2-3。

「手把手」一起iOS自动化_第6张图片

图1-2-3

    d. 验证Homebrew是否安装成功,在终端中执行命令brew,看到如图1-2-4结果则安装成功。

「手把手」一起iOS自动化_第7张图片

图1-2-4

2. Node.js安装

运行在服务端的JavaScript。

    a. 在该链接https://nodejs.org/en/中下载Mac客户端软件安装。

    b. 检测安装,在终端分别执行命令npm –v和node –v 分别出现如图1-2-5则安装成功。

「手把手」一起iOS自动化_第8张图片

图1-2-5

3. Xcode安装

苹果系统上的集成开发工具,可以为 Mac OS 和 iOS 系统开发新应用。

    a. 直接在 Mac 电脑上的 App Store 中搜索 Xcode 关键字,即可在搜索列表中看到它了,点击即可下载,如图1-2-6。

「手把手」一起iOS自动化_第9张图片

图1-2-6

    b. 安装完成后,进行启动同意license。

4. 当然我们是用Python写脚本我们需要安装Python(我用的是Mac自带的Python,直接配置环境变量就好)。

5. 安装Appium客户端,pip install Python-Appium-Client。

6. Appium服务器安装,这里下载安装最新的appium-desktop,简单讲下appium-desktop以便后面的安装讲解。

「手把手」一起iOS自动化_第10张图片

图1-2-7

如图1-2-7,appium-desktop的iOS部分可以简单的理解为一个AppiumServer和WebDriverAgent,前面讲到自动化脚本运行时appium-desktop会在被测试手机上安装一个WebDriverAgentRunner的APP,这个WebDriverAgentRunner APP就是基于appium-desktop中的WebDriverAgent源码安装的。新下载安装的appium-dekstop,我们需要在appium-desktop安装目录下的WebDriverAgent目录中下载WebDriverAgent的相关依赖,然后用xcode打开WebDriverAgent工程进行证书签名(iOS编译安装的包这是必不可少的),然后再进行编译,安装,启动WebDriverAgentRunner APP看是否可正常运行。

    a. https://github.com/appium/appium-desktop/releases/tag/v1.3.1下载安装Mac平台的版本(这个版本是我在写的时候最新的,我自己用的1.2.7)

    b. 进入appium-desktop中的WebDriverAgent目录下下载依赖。

        i. 打开文件夹-应用程序-找到appium-右键-显示包内容,如图1-2-8。

「手把手」一起iOS自动化_第11张图片

图1-2-8

        ii. 进入WebDriverAgent目录(Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent)。

        iii. 执行命令./Scripts/bootstrap.sh,直到下载完成(我已经安装过了,这里就不截图了,有错误一定要根据错误处理)。有问题可以留言或者给订阅号发消息。

        iv. 给WDA设置签名证书,打开Xcode点击Open another project..如图1-2-9。

「手把手」一起iOS自动化_第12张图片

图1-2-9

        v. 在打开的文件选择窗口中shift+command+g输入路径/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent,这里的路径根据自己的WebDriverAgent所在路径来确认,点击Go 如图1-2-10进入1-2-11。

「手把手」一起iOS自动化_第13张图片

图1-2-10

「手把手」一起iOS自动化_第14张图片

图1-2-11

        vi. 选择WebDriverAgent.xcodeproj点击Open进入图1-2-12并且会自动编译,如果编译失败就找下原因,解决失败问题。

「手把手」一起iOS自动化_第15张图片

图1-2-12

        vii. 给WebDriverAgentLib配置证书和修改Bundle Id,勾选自动管理证书,增加开发者账号并选择账号,如图1-2-13。

「手把手」一起iOS自动化_第16张图片

图1-2-13

        viii. 点击WebDriverAgentLib选择WebDriverAgentRunner,以上面同样的方法修改Bundle Id和设置开发者证书,如图1-2-14。

「手把手」一起iOS自动化_第17张图片

图1-2-14

    c. 选择WebDriverAgentRuner和需要安装的手机,键盘执行command+u 如图1-2-15,我用的模拟器iPhone 7.

「手把手」一起iOS自动化_第18张图片

图1-2-15

    d. 检查安装运行情况,我用的是模拟器(iPhone 7),运行成功后你会看到如下日志如图1-2-16,手机上面会有一个WebDriverAgentRunner APP且为运行状态,如图1-2-17。

「手把手」一起iOS自动化_第19张图片

图1-2-16

「手把手」一起iOS自动化_第20张图片

图1-2-17

    e. 到这里我们的appium-desktop就安装好了,如果WebDriverAgent存在问题又无法解决,可以自己去git上下载WebDriverAgent的最新源码包进行编译安装运行,没问题后再替换掉appium-desktop中的WebDriverAgent目录;git上下载的WebDriverAgent源码编译安装运行起来时日志中的ServerURLHere中端口不会是0(appium-desktop中集成WDA应该被处理成了0),应该是8100,在浏览器中是可以访问的。

1.3 appium-desktop使用介绍

appium-Desktop是一款用于Mac、Windows和Linux的开源应用,它提供了Appium自动化服务器UI界面中的强大功能;你可以设置功能选项、启动/停止服务器、查看日志等;你也可以使用Inspector来查看应用程序的元素,了解它们的基本信息,并与它们进行基本的交互,还可以录制生成不同语言的脚本。

1.3.1 appium-desktop启动一个简单的服务

1. 前面章节已经介绍如何安装appium-desktop且已经安装好了,找到桌面应用图标进行启动,进入启动界面,如图1-3-1。

「手把手」一起iOS自动化_第21张图片

图1-3-1

2. 输入Host,此处本机使用就输入127.0.0.1,端口默认端口即可,点击Start Server,启动界面如图1-3-2(这个服务就是启动起来了)。

「手把手」一起iOS自动化_第22张图片

图1-3-2

1.3.2 appium-desktop高级配置页面,如图1-3-3

「手把手」一起iOS自动化_第23张图片

图1-3-3

1.3.3 配置保存维护区,如图1-3-4

「手把手」一起iOS自动化_第24张图片

图1-3-4

1.3.4 Start Inspector Session介绍

1. 进入Start Inspector Session的入口,见图1-3-5。

「手把手」一起iOS自动化_第25张图片

图1-3-5

2. Start Inspector Session界面展示,如图1-3-6。

「手把手」一起iOS自动化_第26张图片

图1-3-6

    a. Custom Server-Remote Host:服务ip地址,本机为127.0.0.1。

    b. Custom Server-Remote Port:服务端口,默认4723。

    c. Custom Server-Desired Capabilities:功能参数设置,如图1-3-7。

「手把手」一起iOS自动化_第27张图片

图1-3-7

    d. Custom Server-Save Capability Sets:功能配置保存后都在这个列下,如1-3-8。

「手把手」一起iOS自动化_第28张图片

图1-3-8

3. Inspector使用,主要用于获取UI元素属性,录制脚本等(类似Android的uiautomatorviewer)。

    a. Inspector入口,如图1-3-9。

「手把手」一起iOS自动化_第29张图片

图1-3-9

    b. 点击Start Session后appium-desktop会在你的手机上面安装WebDriverAgentRunner,需要注意的是开始编译这个WebDriverAgent用的是开发者证书的话,在安装WebDriverAgentRunner后需要在手机设置-通用-描述文件与设备管理中对你的证书设置信任;如果是正式证书则不用设置。

    c. 手机上安装后会先启动WebDriverAgentRunner(如果是需要重新装APP,则会最先重装APP,再安装WebDriverAgentRunner),再启动被测试App,然后可在Inspector中看到如图1-3-10界面。

「手把手」一起iOS自动化_第30张图片

图1-3-10

    d. 属性展示区介绍,如图1-3-11。

「手把手」一起iOS自动化_第31张图片

图1-3-11

        i. 操作区,可对选择的控件进行操作,操作效果会对应在手机上生效(按钮可以点击;输入框可以输入值;输入框可以清除输入框中已经存在的内容)。

        ii. 属性区,我们在写自动化脚本的时候就会用到,主要会用到accessibility id,xpath,type,value,name等这些在实战登录脚本中会简单讲到;方法封装章节会详细介绍。

4. 自动化录制功能(Start Recording),这里的录制功能可以给我们写脚本作为参考(特别是小白,不知道到用什么方法时或者不知道用元素的什么属性时),当然不要过多依赖这个,因为多写写就熟悉了。

    a. 自动化录制功能入口,如图1-3-12

「手把手」一起iOS自动化_第32张图片

图1-3-12

    b. 点击Start Recording按钮,UI界面展示区选择用户名输入框,点击属性展示区的 SendKeys并输入1234567890并确认输入,此时你会看到连接的手机上的测试APP执行了该操作,Inspector的UI展示界面也执行了该操作,会看到如图1-3-13 Python脚本的脚本,如图1-3-14 Java脚本的脚本,如图1-3-15 Ruby脚本的脚本。

「手把手」一起iOS自动化_第33张图片

图1-3-13

「手把手」一起iOS自动化_第34张图片

图1-3-14

「手把手」一起iOS自动化_第35张图片

图1-3-15

1.4 登录自动化用例实战

1.4.1 环境准备检查

1. 我们需要获取被测试手机设备信息

    a. 手机平台:当然我们这是iOS。

    b. 被测试手机系统版本,被测手机连接电脑,打开xcode-Window-Devices and Simulators-Devices,这里我是真机系统为11.2.1 如图1-4-1;模拟器就在Simulators里面查看如图1-4-2。

「手把手」一起iOS自动化_第36张图片

图1-4-1

「手把手」一起iOS自动化_第37张图片

图1-4-2

    c. 手机设备名称如图1-4-3,这里是iPhone 6s。

「手把手」一起iOS自动化_第38张图片

图1-4-3

    d. 手机的udid,如图1-4-4,模拟器不需要。

「手把手」一起iOS自动化_第39张图片

图1-4-4

2. 我们需要获取被测试APP的包名,这个可以直接找开发GGMM要,我这里用的小超人APP,包名为com.yatang.xc.xcr,大家如果要用这个APP可以自己下载哈,登录用例也是用这个APP哈。

3. 我们需要获取登录流程中使用到的控件的属性(如id……)

    这里参照前面1.3.4的Inspector使用,连接手机—>启动appium-desktop—>输入基本信息启动—>Start Inspector Session—>Custom Server—>配置Desired Capabilities—>Start Session。

    a. 流程:启动APP—>输入“用户名”—>输入“密码”—>点击“登录”。

    b. 获取“加盟商账号”输入框控件id属性:loginName,方法如图1-4-5所示:

「手把手」一起iOS自动化_第40张图片

图1-4-5

    c. 同样的方法获取其他控件属性,“密码输入框”:loginPassword;“登录按钮”:loginBtn。

4. 配置并启动Appium服务器

    a. 打开Appium服务器程序,因为是本机测试,设置中默认配置端口和本机IP,如图1-4-6所示:

「手把手」一起iOS自动化_第41张图片

图1-4-6

    b. 启动Appium服务  如图1-4-7所示:

「手把手」一起iOS自动化_第42张图片

图1-4-7

1.4.2 开发一个登录自动化测试脚本

开始开发自动化登录脚本

    a. 在脚本开始位置添加对Appium的Python客户端库的引入,代码如下:

        from appium import webdriver

    b. 添加一个字典变量,我定义名称为desiredCaps,并向desiredCaps添加键和值,代码如下:

    #定义功能参数字典

    desiredCapabilities = {}

    #设置app安装包存放路径,不需要安装可不带这个参数

    # desiredCapabilities["app"]="/Users/yatang/.jenkins/workspace/XCR-iOS-Release/build/XCR-Beta.ipa"

    #设置平台

    desiredCapabilities["platformName"]="iOS"

    #设置被测试手机的设备名称

    desiredCapabilities["deviceName"]="iPhone 6s"

    #设置被测试手机版本

    desiredCapabilities["platformVersion"]="11.2.1"

    #设置被测试手机的uiid,模拟器可以不用设置

    desiredCapabilities["udid"]="b114400000000003a35df9746d5b090000000000"

    #设置被测试app的包名

    desiredCapabilities["bundleId"]="com.yatang.xc.xcr"

    c. 以desiredCaps作为参数初始化Webdriver,代码如下,代码解释如图1-4-8所示:   

    #建立会话获取driver

    driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",desiredCapabilities)

图1-4-8

    d. 登录流程测试代码如下   

    #等待app启动

    time.sleep(5)

    #查找用户名输入框,并输入登录名

    driver.driver.find_element_by_accessibility_id("loginName").send_keys("1234567890")

    #等待输入用户名

    time.sleep(5)

    #查找密码输入框,并输入密码

    driver.driver.find_element_by_accessibility_id("loginPassword").send_keys("123456")

    #等待输入密码

    time.sleep(5)

    #查找登录按钮,并点击登录

    driver.driver.find_element_by_accessibility_id("loginBtn").click()

    #等待登录

    time.sleep(5)

    #断开会话

    driver.quit()

    PS:Webdriver提供的查找控件方法有好几种:通过控件ID,控件的类型和值组合,控件的XPath路径,我建议小伙伴们首选控件ID,因为ID查找效率高且比较稳定,一般很少改变。当然有些控件可能没有ID或者存在多个控件ID相同,在框架方法封装章节我会详细讲解策略和方法。

    这样我们的自动化登录脚本就开发完了,保存脚本,运行就能看到效果了。

完整代码如下:

#-*- coding:utf-8 -*-

from appium import webdriver

import time

#定义功能参数字典

desiredCapabilities = {}

#设置app安装包存放路径,不需要安装可不带这个参数

# desiredCapabilities["app"]="/Users/yatang/.jenkins/workspace/XCR-iOS-Release/build/XCR-Beta.ipa"

#设置平台

desiredCapabilities["platformName"]="iOS"

#设置被测试手机的设备名称

desiredCapabilities["deviceName"]="iPhone 6s"

#设置被测试手机版本

desiredCapabilities["platformVersion"]="11.2.1"

#设置被测试手机的uiid,模拟器可以不用设置

desiredCapabilities["udid"]="b114400000000003a35df9746d5b090000000000"

#设置被测试app的包名

desiredCapabilities["bundleId"]="com.yatang.xc.xcr"

#建立会话获取driver

driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",desiredCapabilities)

#等待app启动

time.sleep(5)

#查找用户名输入框,并输入登录名

driver.driver.find_element_by_accessibility_id("loginName").send_keys("1234567890")

#等待输入用户名

time.sleep(5)

#查找密码输入框,并输入密码

driver.driver.find_element_by_accessibility_id("loginPassword").send_keys("123456")

#等待输入密码

time.sleep(5)

#查找登录按钮,并点击登录

driver.driver.find_element_by_accessibility_id("loginBtn").click()

#等待登录

time.sleep(5)

#断开会话

driver.quit()

上面这个自动化登录脚本样例,仅用于小伙伴们入门如何下手去写一个appium-desktop iOS的测试脚本。它是很脆弱的执行效率较低的,会受环境和App本身影响很大,比如固定等待时间(这个时间不可控,该方式不可取),另外对脚本运行过程中出现的异常没有做处理,如果脚本异常会导致整个脚本失败。我们心中的自动化肯定是想高效稳定的!这些问题在框架方法封装章节会进行详细讲解。


后续章节请访问:https://yuedu.baidu.com/ebook/0eed723a15791711cc7931b765ce05087732757a

你可能感兴趣的:(自动化,iOS)