做者:清菡
博客:oschina、云+社区、知乎等各大平台都有。web
你没有必要为了自动化而从新编译你的应用或者以任何的方式修改它。chrome
你不该该被限制在特定的语言或框架上来编写运行测试。shell
移动端自动化框架在自动化接口方面不该该从新造轮子。
(Appium 中不必把 http 通讯过程,命令的执行过程以及点击输入等公用的操做再写一遍,Appium 直接继承 Selenium,把现有的东西所有拿过来)浏览器
移动端自动化框架应该开源,不但在名义上并且在精神上和实践上都要实至名归。缓存
经过 Http 通讯,没有改变浏览器访问系统的属性,只要访问就能够了。
Appium 作自动化也是如此。网络
安卓和 Ios 都有本身自带的自动化测试框架。
由于 Ios 和安卓是不一样的语言编写的,因此用 Appium(Appium 是跨平台跨语言)。app
版本不同,用的自动化框架也不同。自动化框架不同,API 接口也不同。框架
Appium server
去跟移动端的东西通讯,首先确实是 Ios 仍是安卓。即便确认了是安卓,也得确认下是 UiAutomator
的 Api 仍是 Instrumentation
的 Api。测试
通常只支持主流版本,其它版本须要用户本身支持了。.net
启动一个模拟器或者真机就有一套自带的自动化框架。
Appium 发送命令到手机,手机上有个 Bootstrap 接收命令。Bootstrap 是一个服务:Ip 地址和端口作的一个监听。
Appium server 启动后获得代码发送的命令后,不会直接发给手机。
好比你在安卓 8 的设备上作个什么操做,打开一个 APP,Appium server 检查下目前设备上有没有安卓 8 的。若是有,它就把这个命令发送给手机端。
Bootstrap 获得命令后,在本系统中调用 UIAutomator 提供的 API 去作一些实际的操做。就实现了经过 Python 代码去驱动移动端作一堆的事情。
Bootstrap.jar
就是利用了 UIAutomator
一个测试类在这个当中写了 Ip 地址和端口,启动这个服务就结束了。固然也会传达命令,调用 UIAutomator 等。
Appium server 是个服务,移动终端上面也放了一个服务。做为服务主要接收别人向咱们发送的命令,实际上就是通讯。
Appium server 这个中间件支持 Ios、安卓。
移动端不只有 Web 网页的操做,还有本身特性的操做。移动端的特色:手指触屏操做、多点触控、混合应用。移动端特有的操做,把命令加进来,作一个扩充就行了。
装了 Appium 没有装 Selenium 是确定会报错的。由于 Appium 是基于 Selenium 的,Appium 作了些拓展。
不少东西和 Web 自动化,包括从概念上都是同样的。虽说,它作了拓展,它也是基于如今的基础。如今通讯原理的基础上增长了一些原理,增长了一些操做,核心是没有变的。缘由很简单:你们都是界面操做。本质上是差很少的,就是在不一样的平台上来作这些事情。
不少方面基本上都是这种思想来作的。如今开源的东西愈来愈多,不少实现思想就是这种分层、独立、兼容不少语言,能够不限定客户端是谁的。
Appium 原本就是开源的,是 Js 实现的。
以上是 Appium 客户端的介绍。
高级选项分为 3 大板块:基本配置-Ios 配置-安卓配置。
日志文件很是有用,若是你在 App 自动化的过程当中遇到了什么问题报错了,不少时候都要进入 Appium 的日志当中来分析的。
这个服务端的日志,它作的很是的全面。包括 Python 代码向它发送的请求,以及在它收到请求后作的一系列的处理,到底用的 Adb 仍是什么东西,仍是和谁通讯等都描述得很是清楚。
因此默认的日志级别是 debug,把整个过程当中作的不少操做所有都打印出来了。
日志路径本身配置一个,例如我配置在 D 盘的根目录下。D://appium.log
这里有些选项,这些选项什么都不选的时候,启动 Server。这样操做是没有时间的。
后续运行代码的时候,面板上的日志会刷个不停。因此有些日志要滚动好久才能看到,因此点击 Get Raw Logs 按钮。获得一个这样的文件:
这个文件中有时候不少东西显示的不对。因此配置一个日志存放路径,将日志输出到对应的路径保存就行了。
App 自动化最基本的东西:Adb 命令。
Adb 命令是用来调试真机或者模拟器的。adb devices
这条命令识别当前电脑链接的设备(模拟器也能识别)。真机必须开启 Usb 调试模式,在开发者选项当中勾选 Usb 调试模式。
.apk
的后缀名。
开发把包给你的时候都会先打包成一个 apk,而后你去安装,安装后在安卓系统上再也不是.apk
,会对它进行解压。解压后在特定的系统中特定的目录下面会有本身的包名。
包名–安卓系统当中的标识(至关于惟一代号)
有相同的包名,就是应用已安装。卸载的时候能找到这个包名就能卸载,找不到就不能卸载。
模拟器和安卓真机都是基于 Liunx 内核的。在 Liunx 中都是以文件的形式来管理的。各类文件路径,和 Windows 系统同样。文件路径来管理各类内部的数据,包括系统安装的一些东西。须要熟悉 Liunx 的经常使用命令。
通常安卓手机都有个系统文件夹。不少产商基于安卓的原生系统作了不少美化工做,因此不少文件目录会有所改变,每一个品牌的手机,文件所放的目录都不同。
https://blog.csdn.net/qq_41282136/article/details/100265002
adb shell pm list packages -3
而后你进本身手机系统文件夹下能够找到对应的包名。
activity 就是页面,安卓设备上每个页面均可以叫作一个 activity,它们的名字都是不同的。入口 activity 就是打开这个 app 的时候,默认是进入哪一个页面的,默认是哪一个 activity 名称。
想安装的时候能够提供 apk 的名字。
http://appium.io/docs/cn/about-appium/intro/#appium_1
automationName 是自动化测试的一个引擎。
前面的东西叫作键名,既然这个东西是从客户端编写的,须要把这样的一个信息发给 Appium Server 服务端。键名是不能够随便改的。 否则是解析不了的。这个是人家定义好的请求的规范。
由于要作平台版本匹配。平台版本号意味着使用的自动化框架 API 是不同的,这样发送到终端上面会调用不一样的。
写的代码换到 Ios 也是能够用的,只是要准备 Ios 的环境,这个须要苹果系统才能够。
.apk
是安卓的。Appium 会将这个 App 给到的安装包路径,去将这个包安装到对应的设备上面去。若是你给定的是 App 这个字段,它会主动向你的真机或者模拟器去装这个 App。可是若是你的真机或者模拟器中已经装好了,再去装就会报错。
若是没有这个app参数
,只有 APP 包和 appActivity,就证实设备上已经存在,只要根据包名和入口去打开对应的应用就能够了。
作浏览器版本的 App 测试,就不须要 app 参数了,直接用 browserName 参数就能够了。
若是链接了好几台设备,实际上只对一台设备进行操做的时候,经过 udid 去链接设备。
noReset 重置应用的状态,也就是恢复到默认设置。至关于第一次安装它,将全部的用户数据都清除。
在应用中清除缓存数据或者应用数据。例如在安卓上输入用户名密码,之后不须要输入了。除非把系统重装了,用户的帐号密码登陆后就记住了,若是把全部用户的记录所有删除就至关于第一次下载下来第一次使用。
作自动化的过程当中是不须要重置的。按照用户的习惯来测试。
安卓的一些内核是 chrome,由于安卓系统是谷歌提供的。
activity
:有一些是开发在代码中指定了这个入口页面是什么。用另一个命令 aapt 获取
把路径配置到系统变量-path 中。
apk 的应用名称不是包名。
输入aapt dump badging 包名
,直接把 apk 拖拽过来就能够啦。
from appium import webdriver desired_caps={} # 平台类型 desired_caps["platformName"]="Android" # 平台版本号 desired_caps["platformVersion"]="10" # 设备名称 desired_caps["deviceName"]="2NSDU20410017297" # app 包名 desired_caps["appPackage"]="填对应的package name信息" # app 入口 acitivity desired_caps["appActivity"]="填对应的launchable-activity name信息" # 链接Appium server。前提:appium desktop要启动。有监听端口。 # 将desired_caps发送给appium server。打开app driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps) # 运行代码以前: #1.appium server启动成功。处于监听状态 #2.模拟器/真机必须可以被电脑识别。即adb devices可以识别到要操做的设备。
运行代码,成功打开应用。
公众号 清菡软件测试 首发,更多原创文章:清菡软件测试 84+原创文章,欢迎关注、交流,禁止第三方擅自转载。
感谢支持清菡原创,欢迎点击在看和转发!