一、Appium架构介绍与环境安装

目录

  • 目前mobile自动化解决方案
  • appium介绍
  • appium框架介绍
  • appium环境安装
  • IOS配置

目前mobile自动化解决方案

image.png
  • 自动化工具选择
    • 单平台测试or 多平台测试?
    • 是否有多设备同时测试的场景?
    • 不局限于测试环境,任何版本任何环境都可以测试?
    • 最擅长哪种开发语言?
    • 当前市面是否有满足项目需求的测试工具?
    • 是否需要二次开发?
image.png

Appium介绍

Appium是一个移动端的自动化测试框架,可用于测试原生应用,移动网页应用和混合应用,且是跨平台的。可用于iOS和Android操作系统。原生应用是指用android或iOS编写的应用﹐移动网页应用是指网页应用,类似于iOS中safarii应用或者Chrome应用或者类似浏览器的应用。混合应用是指一种包裹webviiew的应用,原生应用网页内容交互性的应用。

重要的是Appium是跨平台的。何为跨平台,意思是可以针对不同平台用一套api来编写脚本。

  • 推荐Appium
    • 跨语言:Java、Python、nodejs等
    • 跨平台
      • Andoid、iOS
      • Windows、Mac
    • 底层多引擎可切换
    • 生态丰富,社区强大

Appium引擎列表

  • Android

    • espresso、selendroid、uiautomator、uiautomator2[推荐]
  • iOS

    • uiautomation、xcuitest[推荐]
  • mac

  • windows

  • IOS

    • The XCUITest Driver
    • (DEPRECATED)The UIAutomation Driver
  • Android

    • (BETA) The Espresso Driver
    • The UiAutomator2 Driver
    • (DEPRECATED) The UiAutomator Driver
    • (DEPRECATED) The Selendroid Driver
  • The Windows Driver (for Windows Desktop apps)

  • The Mac Driver (for Mac Desktop apps)

Appium设计理念

  • webdriver是基于http协议的,第一连接会建立一个session会话,并通过post发送一个json告知服务端相关测试信息
  • Client /Server设计模式
    • 客户端通过WebDriver json wire协议与服务端通讯
    • 多语言支持
  • Server可以放在任何地方
  • 服务端NODEJS开发的HTTP服务
  • appium 使用appium-xcuitest-driver来测试iPhone设备,其中需要安装facebook出的WDA(webdriveragent)来驱动iOS测试
image.png

Appium环境安装

  • appium生态工具
    • adb: android的控制工具,用于获取android的各种数据和控制
    • Appium Desktop:内嵌了appium server和inspector的综合工具
    • Appium Server: appium的核心工具,命令行工具
    • Appium client:各种语言的客户端封装库,用于连接appium server
      • python、java、ruby、robotframework-appium
    • AppCrawler自动遍历工具

环境安装

  • Java 1.8版本
  • Android sdk
  • Node js(>=10版本),npm(>=6版本)
  • python3
  • appium-desktop
  • Appium python client

环境所需文件已存百度网盘:

  • 环境安装需要的软件下载地址:

链接: https://pan.baidu.com/s/1Tt69EFSnuM1aCOKWe0GO8Q
密码: jlbg

  • 需要安装的apk:

链接: https://pan.baidu.com/s/1Zr-3Z1plg6fysvFpmxnk4A
密码: gdcw

上面的软件官网都可以下载到。

windows 版本 Appium 环境搭建

安装 nodejs

  • 下载.msi文件

https://nodejs.org/en/download/

image
  • 注意:

1、下载12.*版本双击安装即可。
2、无须配置环境变量,直接重启一个 cmd 输入下面的命令,能够查看这两个版本号即安装成功。

image

安装 appium desktop

直接官网下载 Appium 客户端版本安装即可。
建议下载 版本 1.15.1,最新的版本目前不太稳定。

mac 下载:
Appium-mac-1.15.1.dmg

windows 下载:
Appium-windows-1.15.1.exe

  • 官方下载地址:

https://github.com/appium/appium-desktop/tags

安装命令行版本的 Appium

国内网络一般直接使用官方推荐的命令 npm install -g appium, 会下载失败,超时等问题。这里推荐大家设置国内镜像再下载。

1、设置镜像源

npm config set registry https://registry.npm.taobao.org

2、安装appium

npm install -g appium 这样下载下来的是最新版本的appium。
推荐下载 appium 1.15版本,使用命令指定版本号 npm install -g appium@1.15

appium 这个版本是命令行版本, 与appium desktop启动一个即可,安装也可以只安装一个或者两个都装,建议都装。

  • 安装 appium-doctor
    npm install appium-doctor -g

appium-doctor 是用来检测环境配的是否完整,安装完成之后,重新打开新的命令行窗口,输入 appium-doctor,如下图:

image

例如上图,还差 ANDROID_HOME没有配会有标为红叉提示。

JDK 环境配置

注意: 使用 windows 的童鞋,如果用的是window10需要使用jdk_1XX的版本, 最上面网盘里面提供的,打开应该会闪退。

若下载比较慢,可以采取其他的方式进行下载。
1、下载好之后进行安装,其中win版本的安装的时候需要注意jre的安装是在jdk安装之后,在进行jre安装的时候不要使用jdk同样的目录,否则会出现javac等的覆盖

2、安装好之后,检查并进行 java 环境的设置

  • a、设置好JAVA_HOME和CLASSPATH
    JAVA_HOME:jdk的安装目录
    CLASSPATH:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意最前面有一点)


    image
  • b、设置Path,在其中加入两个配置信息

image

安装 android sdk

这里有两种安装方式,一种是命令行下载,一种是通过 Android Studio 下载SDK
如果安装的SDK有问题,可以尝试用另一种方式安装。

第一种方式:命令行安装

  • 下载android sdk

https://www.androiddevtools.cn/

下载:android-sdk_r24.4.1-windows

下载下来之后找到 readme 文件并打开,下图

image

找到这个文件中最下方的一条命令,如下图,在命令行里执行这个命令更新sdk:

image
image

更新完的sdk 会多了一些文件夹,如下图:


image

更新完成之后,检查一下 build-tools/ 路径下,如果是 30 的版本,需要先删掉这个30的文件夹,然后手动的下载一个低于 28版本的build-tools/ 的放在目录下即可(推荐 28或者29的版本),如果下载多个版本会优先使用高版本的。(注意一定要删掉30这个版本的,版本太高appium运行不起来,需要依赖java1.9的版本)

  • 下载 build-tools 方法
    命令行,cd 到sdk 目录下,输入android 回车, 弹出如下界面,勾选想要下载的版本即可。
image

最后,检查对应的目录信息应该包含了以下几个:

  • build-tools

  • platform-tools

  • tools
    如果出现了工具的缺失,可以去上面的sdk manager 里下载。其中,build-tools包含不同版本的安卓版本的工具,每个版本一个文件夹,配置的时候将版本号文件夹配置上类似于:build-tools/xxx;platform-tools存放着adb等工具的,tools存放着uiautomatorviewer等工具。这里要注意build-tools/下的版本不要使用>=30版本的 build-tools/

  • sdk 配置环境变量:
    注意:环境变量不要有空格,中文 或者特殊字符等。
    首先配置好 android_home:


    image

    再到Path中添加下列信息,其中安卓版本build-tools目录下的数字配置为自己电脑上存在的版本。


    image

第二种方式:先下载Android Studio, 利用 Android Studio 下载安装 SDK

参考贴子:https://ceshiren.com/t/topic/4001

注意: sdk 无论使用哪种安装方式,最后都要配置环境变量ANDROID_HOME, 和 Path 。

.net framework 安装

windows 安装 appium desktop 需要依赖 .net framework 必须保证 版本是大于 4.0 的即可。现在目前windows大部分默认的 .net framework 版本都是大于 4.0 的,可以通过下面的方式查看一下,如果不是则需要手动安装。

控制面板–程序–程序和功能 勾选 .net framework 4 确定即可

image

mac OS / Linux 忽略这一步。

安装 appium client

appium client 是我们编写脚本必调的api包,写脚本一定要安装这个包才能引用appium, from appium import webdriver这行代码。

由于是python的第三方库,直接使用Pip 安装即可:

pip install appium-python-client

安装模拟器

目前市面上模拟器类型比较多, mumu, 夜神,雷电,逍遥,genimotion,android sdk中也有自带的emulator模拟器。学习过程中推荐大家使用mumu模拟器,也可以使用 genimotion模拟器和 android sdk 自带的 emulator。

  • 安装mumu模拟器,练习足够用,但做移动端的 web 测试需要使用genimotion 或者 sdk自带的emulator
  • android sdk 里面自带的模拟器也可以,只不过要下载android的开发工具来管理这些模拟器 - android studio,不用也可以不装,
  • genimotion (自行百度)

模拟器安装好之后,命令行里直接 输入命令adb devices即可查看模拟器的状态。

对于第三方模拟器(mumu, 夜神等),windows需要手动连接。
mumu模拟器,需要手动输入下面的连接命令:

adb connect 127.0.0.1:7555

上面的 127.0.0.1:7555 作为一个整体,是 模拟器的名称,也叫序列号(serial number)。是根据本地的 IP 和端口号生成的, 不同的模拟器对应的端口不一样,具体用的哪个端口可以去百度搜索一下或者官网查看 。

mac上直接执行 adb devices 。如果没有识别,需要重启 adb server,执行下面两条命令即可。

adb kill-server
adb devices

不同厂商的模拟器需要连接的名是不一样的,需要查看官网说明。上面仅提供了mumu的连接方式,其它的模拟器自行百度。

mac 上 Appium 环境搭建

安装 nodejs 与 npm

  • 安装方式与 windows 类似 ,官网下载对应的 mac 版本的安装包,双击即可安装,无须配置环境变量。
  • 官方下载地址:
    https://nodejs.org/en/download/

安装 appium

Appium 分为两个版本,一个是有界面的Appium(下载安装文件即可安装),一个是无界面的命令行版本(需要命令安装),建议都安装上。

  • 有界面的Appium Desktop:包含 appium 服务,录制工具,查看页面布局及查找元素的功能。
  • 无界面的Appium:只提供了appium服务功能

方法一: 官方推荐直接,(网络环境要求高,如果出现超时,下载不下来,不推荐)

npm install -g appium

方法二:先安装cnpm 再安装 appium (曲线救国,推荐),一定要加上 -g 参数

npm install -g cnpm --registry=https://registry.npm.taobao.org #挂载淘宝源
cnpm install -g appium@1.15 #全局安装appium

3、安装 appium-doctor,检查你的appium环境是否安装成功

cnpm install -g appium-doctor

安装完成,可以打开一个新的命令行窗口(windows上cmd,Mac 上是Terminal),输入 appium-doctor,会出现如下提示,红框里面没有报错即可, 其它的画叉的暂时可以不用安装。

image

4、运行 appium server

有界面的,打开界面,点击 Start Server, 不报错说明成功,如下图:

image

打开terminal,输入 appium回车,不报错说明安装成功。

image

运行,验证环境

上面安装完成就可以运行一个简单的appium demo 脚本,能够启动起来应用说明安装成功。

创建测试文件 test_demo.py

from appium import webdriver
desired_caps={}
desired_caps['platformName']='Android'
desired_caps['platformVersion']='6.0'
desired_caps['deviceName']='emulator-5554'
desired_caps['appPackage']='com.android.settings'
desired_caps['appActivity']='com.android.settings.Settings'
driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)

IOS配置

环境搭建

  • xcode

依赖工具包

  • brew install --HEAD ideviceinstaller

  • brew install --HEAD libimobiledevice

  • brew install ios-deploy

  • brew install carthage

github项目

xocode相关

  • bundle identifier:类似于android的包名,如果本地调试可以随便填写,如果要发布则不能随便填写。

  • signing:签名需要证书才能构建编译,在模拟器和真机上运行。

  • .app文件:项目编译后生成的项目打包代码,其实是一个目录,zip文件

  • .ipa文件:经过签名后的打包文件,本质是一个zip文件

基本操作

  • 查看模拟器列表:instruments -s devices

  • 查看真机列表:idevice_id -l

  • 安装APP:ideviceinstaller -i demo.app 高版本使用:ios-deploy

  • 查看app的bundleid:ideviceinstaller -l

命令行编译

  • xcodebuild -scheme UICatalog -target iOS clean build

  • xcodebuild -scheme UICatalog -target iOS archive

  • 证书相关

  • team id:注册成为开发者,付费后才有;真机测试需要,模拟器不需要(如果只是需要一个证书,用自己的appid登录即可)

ios模拟器测试

  • Capabilitie参数
{

"platformName": "ios",

"app": "/Users/jaxon/Library/Developer/Xcode/DerivedData/UIKitCatalog-batnzjgnhedojmafwlejnamdeeup/Build/Products/Debug-iphonesimulator/UIKitCatalog.app",

"automationName": "XCUITest",

"deviceName": "iPhone 11 Pro",

"platformVersion": "13.3"

}

app: xcode选择模拟器编译后的app位置

[
image

遇到的问题

  • 编译WDA报错:RoutingHTTPServer/RouteResponse.h’ file not found

  • /usr/local/lib/node_modules/appium/node_modules/appium-webdriveragent,执行
    sh ./Scripts/bootstrap.sh

  • 然后在wda项目路径下执行sh ./Scripts/bootstrap.sh

ios真机测试

  • Capabilitie参数
{

"platformName": "ios",

"app": "/Users/jaxon/Library/Developer/Xcode/DerivedData/UIKitCatalog-batnzjgnhedojmafwlejnamdeeup/Build/Products/Debug-iphoneos/UIKitCatalog.app",

"automationName": "XCUITest",

"deviceName": "iPhone",

"udid": "auto",

"xcodeOrgId": "7******S",

"xcodeSigningId": "iPhone Developer"

}

app: xcode选择真机编译后的app位置

xcodeOrgId:Team ID

udid:auto会根据deviceName返回的参数自动获取udid

注意:编译成功后需要在手机里信任证书

WDA项目配置(自行下载的WDA):

  • 选择WebDriverAgentLib,设置对应的team、certificate
image
  • 选择com.facebook.WebDriverAgentRunner,设置对应的team、certificate
image
  • com.facebook.IntegrationApp,设置对应的team、certificate
image

ps:设置过程中可能会报错Failed to register bundle identifier.

解决办法:因bundle identifier不是唯一的,修改为唯一的即可

  • 选择WDA-真机,进行build

    image

appium-WDA项目配置(appium自带的WDA):

  • 选择WebDriverAgentLib,设置对应的team、certificate

    image
  • com.facebook.IntegrationApp,设置对应的team、certificate
image
  • com.facebook.IntegrationApp,设置对应的team、certificate

    image
  • 选择WDA-真机,进行build

    image

注意:需对证书进行信任

构建完成后,点击product-test,在真机上安装WDA,启动appium即可

遇到的问题

image

根据Appium日志内关键词 xcodebuild build-for-testing test-without-building -project查找appium自带的WDA路径,打开后检查对应的team、certificate,正确配置完成后,重新编译,安装即可

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351

推荐阅读更多精彩内容

  • 夜莺2517阅读 127,717评论 1 9
  • 版本:ios 1.2.1 亮点: 1.app角标可以实时更新天气温度或选择空气质量,建议处女座就不要选了,不然老想...
    我就是沉沉阅读 6,886评论 1 6
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,531评论 28 53
  • 兔子虽然是枚小硕 但学校的硕士四人寝不够 就被分到了博士楼里 两人一间 在学校的最西边 靠山 兔子的室友身体不好 ...
    待业的兔子阅读 2,594评论 2 9