Python+Appium运行简单的demo,你需要理解Appium运行原理!

254 篇文章 9 订阅
190 篇文章 3 订阅

目录
一、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_41282136/article/details/100265002

adb shell pm list packages -3

然后你进自己手机系统文件夹下可以找到对应的包名。在这里插入图片描述
在这里插入图片描述
activity 就是页面,安卓设备上每一个页面都可以叫做一个 activity,它们的名字都是不一样的。入口 activity 就是打开这个 app 的时候,默认是进入哪个页面的,默认是哪个 activity 名称。

想安装的时候可以提供 apk 的名字。

4.Appium 官网介绍
http://appium.io/docs/cn/about-appium/intro/#appium_1在这里插入图片描述
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能够识别到要操作的设备。

运行代码,成功打开应用。

最后:【可能给予你一定的帮助】

在这里插入图片描述

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!
关注我的微信公众号【软件测试小dao】免费获取~

我的学习交流群:644956177 群里有技术大牛一起交流分享~

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

Appium 是一个开源工具,用于自动化 iOS、Android 和 Windows 应用程序。它允许开发者编写自动化测试脚本,这些脚本可以模拟用户与移动应用程序交互的各种行为。Appium 与语言无关,支持多种编程语言,包括 Python。当使用 Python 实现 UI 自动化测试时,主要原理包括: 1. 客户端-服务器模型:Appium 服务器是一个中间件,它基于 WebDriver 协议,提供了一个 RESTful JSON 接口。Appium 客户端(如 Python 的 `appium-python-client` 库)通过这个接口与服务器通信,发送测试命令。 2. WebDriver 协议:Appium 服务器实现了 WebDriver 协议,这个协议定义了一组标准化的接口,可以用来控制浏览器或者移动应用的行为。客户端通过调用这些接口来实现自动化测试的功能,如点击、输入文本、滑动等。 3. 原生、混合和移动 Web 应用程序的支持:Appium需要对应用程序进行任何修改即可运行测试,它可以直接与应用程序的原生组件、混合或移动 Web 应用程序交互。 4. 平台兼容性:Appium 支持跨平台的自动化测试,意味着同样的测试脚本可以在多个操作系统和设备上执行,提高了测试的复用性。 5. 设备和模拟器:Appium 支持在真实设备和模拟器/模拟器上运行测试。它提供了丰富的 API 来管理和配置这些设备或模拟器。 6. 自动化测试生命周期:Appium 提供的接口允许自动化整个测试生命周期,包括初始化会话、执行测试脚本、截图、获取日志以及关闭会话等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值