共计 4070 个字符,预计需要花费 11 分钟才能阅读完成。
保持原创输入,点击蓝字关注我吧
作者:清菡
博客:oschina、云 + 社区、知乎等各大平台都有。
目录
-
一、Appium 的理念
- 四个准则
- 1.Web-Selenium 的运行原理
- 2.Appium 运行原理
- 二、Appium 面板
-
三、一段简略的代码来关上利用
- 1. 前提条件
- 2. 怎么辨认 app?
- 3. 查看安卓 App 包名的链接
- 4.Appium 官网介绍
- 5. 为什么有平台版本号?
- 6.aapt 命令获取利用包名和入口 activity
- 7. 代码
一、Appium 的理念
四个准则:
- 你没有必要为了自动化而从新编译你的利用或者以任何的形式批改它。
- 你不应该被限度在特定的语言或框架上来编写运行测试。
- 挪动端自动化框架在自动化接口方面不应该从新造轮子。
(Appium 中没必要把 http 通信过程,命令的执行过程以及点击输出等专用的操作再写一遍,Appium 间接继承 Selenium, 把现有的货色全副拿过去) - 挪动端自动化框架应该开源,岂但在名义上而且在精神上和实际上都要实至名归。
1.Web-Selenium 的运行原理:
通过 Http 通信,没有扭转浏览器拜访零碎的属性,只有拜访就能够了。
Appium 做自动化也是如此。
2.Appium 运行原理:
安卓和 Ios 都有本人自带的自动化测试框架。
因为 Ios 和安卓是不同的语言编写的,所以用 Appium(Appium 是跨平台跨语言)。
版本不一样,用的自动化框架也不一样。自动化框架不一样,API 接口也不一样。
Appium server
去跟挪动端的货色通信,首先的确是 Ios 还是安卓。即便确认了是安卓,也得确认下是 UiAutomator
的 Api 还是 Instrumentation
的 Api。
个别只反对支流版本,其它版本须要用户本人反对了。
启动一个模拟器或者真机就有一套自带的自动化框架。
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 客户端的介绍。
二、Appium 面板
高级选项分为 3 大板块:根本配置 -Ios 配置 - 安卓配置。
日志文件十分有用,如果你在 App 自动化的过程中遇到了什么问题报错了,很多时候都要进入 Appium 的日志当中来剖析的。
这个服务端的日志,它做的十分的全面。包含 Python 代码向它发送的申请,以及在它收到申请后做的一系列的解决,到底用的 Adb 还是什么货色,还是和谁通信等都形容得十分分明。
所以默认的日志级别是 debug,把整个过程中做的很多操作全副都打印进去了。
日志门路本人配置一个,例如我配置在 D 盘的根目录下。D://appium.log
这里有些选项,这些选项什么都不选的时候,启动 Server。这样操作是没有工夫的。
后续运行代码的时候,面板上的日志会刷个不停。所以有些日志要滚动很久能力看到,所以点击 Get Raw Logs 按钮。失去一个这样的文件:
这个文件中有时候很多货色显示的不对。所以配置一个日志寄存门路,将日志输入到对应的门路保留就好了。
三、一段简略的代码来关上利用
App 自动化最根本的货色:Adb 命令。
Adb 命令是用来调试真机或者模拟器的。adb devices
这条命令辨认以后电脑连贯的设施(模拟器也能辨认)。真机必须开启 Usb 调试模式,在开发者选项当中勾选 Usb 调试模式。
1. 前提条件
- 平台类型
- 平台版本号
- app 包名
- app 入口 activity
- 设施名称
2. 怎么辨认 app?
.apk
的后缀名。
开发把包给你的时候都会先打包成一个 apk,而后你去装置,装置后在安卓零碎上不再是.apk
,会对它进行解压。解压后在特定的零碎中特定的目录上面会有本人的包名。
包名–安卓零碎当中的标识(相当于惟一代号)
有雷同的包名,就是利用已装置。卸载的时候能找到这个包名就能卸载,找不到就不能卸载。
模拟器和安卓真机都是基于 Liunx 内核的。在 Liunx 中都是以文件的模式来治理的。各种文件门路,和 Windows 零碎一样。文件门路来治理各种外部的数据,包含零碎装置的一些货色。须要相熟 Liunx 的常用命令。
个别安卓手机都有个零碎文件夹。很多产商基于安卓的原生零碎做了很多丑化工作,所以很多文件目录会有所扭转,每个品牌的手机,文件所放的目录都不一样。
3. 查看安卓 App 包名的链接:
https://blog.csdn.net/qq_4128…
adb shell pm list packages -3
而后你进本人手机零碎文件夹下能够找到对应的包名。
activity 就是页面,安卓设施上每一个页面都能够叫做一个 activity,它们的名字都是不一样的。入口 activity 就是关上这个 app 的时候,默认是进入哪个页面的,默认是哪个 activity 名称。
想装置的时候能够提供 apk 的名字。
4.Appium 官网介绍
http://appium.io/docs/cn/abou…
automationName 是自动化测试的一个引擎。
后面的货色叫做 键名 ,既然这个货色是从客户端编写的,须要把这样的一个信息发给 Appium Server 服务端。 键名是不能够轻易改的。 不然是解析不了的。这个是人家定义好的申请的标准。
5. 为什么有平台版本号?
因为要做平台版本匹配。平台版本号意味着应用的自动化框架 API 是不一样的,这样发送到终端下面会调用不同的。
写的代码换到 Ios 也是能够用的,只是要筹备 Ios 的环境,这个须要苹果零碎才能够。
.apk
是安卓的。Appium 会将这个 App 给到的安装包门路,去将这个包装置到对应的设施下面去。如果你给定的是 App 这个字段,它会被动向你的真机或者模拟器去装这个 App。然而如果你的真机或者模拟器中曾经装好了,再去装就会报错。
如果没有这个app 参数
,只有 APP 包和 appActivity,就证实设施上曾经存在,只有依据包名和入口去关上对应的利用就能够了。
做浏览器版本的 App 测试,就不须要 app 参数了,间接用 browserName 参数就能够了。
如果连贯了好几台设施,实际上只对一台设施进行操作的时候,通过 udid 去连贯设施。
noReset 重置利用的状态,也就是复原到默认设置。相当于第一次装置它,将所有的用户数据都革除。
在利用中革除缓存数据或者利用数据。例如在安卓上输出用户名明码,当前不须要输出了。除非把系统重装了,用户的账号密码登录后就记住了,如果把所有用户的记录全副删除就相当于第一次下载下来第一次应用。
做自动化的过程中是不须要重置的。依照用户的习惯来测试。
安卓的一些内核是 chrome,因为安卓零碎是谷歌提供的。
activity
:有一些是开发在代码中指定了这个入口页面是什么。用另外一个命令 aapt 获取
6.aapt 命令获取利用包名和入口 activity
把门路配置到零碎变量 -path 中。
apk 的利用名称不是包名。
输出aapt dump badging 包名
,间接把 apk 拖拽过去就能够啦。
7. 代码
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+ 原创文章,欢送关注、交换,禁止第三方擅自转载。
感激反对清菡原创,欢送点击在看和转发!