Appium 自动化测试之python

时间:2024-01-20 19:26:04

1、Appium项目历史

Appium是一个开源、跨平台的测试框架,可以用来测试原生及混合的移动端应用。它支持IOS、Android及FirefoxOS平台。

Appium的前身是一个名为“iOSAuto”的项目,完全用C#编写,由一个名为Dan Cuellar的开发人员于2011年设计并实现。2012年8月,Cuellar和他的团队使用Apache2许可证将Appium作为开源产品发布。

到了2013年,Appium从一家领先的开发公司获得了资金,并由团队使用Node.js平台进行了完全重写和更新。项目开始几周后,Jonathan Lipps被指定为项目负责人。几天之后,该团队就有了一个新版本的Appium,该版本增加了以前版本所缺少的功能。

2014年,Appium获得了综合应用程序测试最佳开源软件奖。

Appium框架它是一个非常强大的工具,可用于跨各种平台自动测试移动和web应用程序。

参考资料

Appium官网:http://appium.io/ Appium GitHub主页:https://github.com/appium Appium官方论坛:http://discuss.appium.io/latest 官方中文文档:http://appium.io/docs/cn/about-appium/intro/ 开源项目兼容性矩阵:【Appium Python Client&Selenium binding&Python version】 https://pypi.org/project/Appium-Python-Client/

2、Appium 自动化原理

Appium 是一个开源自动化测试框架,用于对移动应用程序进行自动化测试。它支持 iOS 和 Android 平台,可以在多个设备和模拟器上进行测试。Appium 的设计目标是使移动应用程序的测试变得简单、灵活和可扩展。

2.1跨平台:

Appium 支持 iOS 和 Android 平台,可以在不同的设备和模拟器上进行测试。

2.2语言支持:

Appium 支持多种编程语言,包括 Java、Python、Ruby、C#、JavaScript 等,使得测试人员可以使用自己熟悉的编程语言进行测试。

2.3客户端驱动:

Appium 提供了一个客户端库,可以与测试框架进行通信。测试人员可以使用客户端库编写测试脚本,并将脚本发送到服务器进行执行。 简单易用:Appium 的 API 设计简单易用,使得测试人员可以快速上手并编写高效的测试脚本。

2.4可扩展性:

Appium 的架构可扩展,可以轻松地添加新的功能和测试库。 总之,Appium 是一个功能强大的自动化测试框架,适用于对移动应用程序进行全面、可靠的测试。

对于Android自动化,Appium主要有三个driver程序: Appium-android-driver:用于驱动UIAutomator1。 Appium-uiautomator2-driver:用于驱动UIAutomator2。 Appium-espresso-driver:用于驱动Espresso。

f18ed9784520251cf80c034fdd81d2d0.jpeg

Appium 自动化方案的特点

  • 开源免费
  • 支持多个平台
  • iOS (苹果)、安卓 App 的自动化都支持。
  • 支持多种类型的自动化
  • 支持 苹果、安卓 应用 原生界面 的自动化
  • 支持 应用 内嵌 WebView 的自动化
  • 支持 手机浏览器 中的 web网站自动化
  • 支持 flutter 应用的自动化
  • 支持多种编程语言
  • 像 Selenium 一样, 可以用多种编程语言 调用它 开发自动化程序。

2.5Appium通信原理:

Client端发送自动化指令给Appium server,Appium Server接收到client发送的指令后,转换为移动端能够识别的指令,然后发送给移动端设备,并对移动端设备进行操作。

c95608d66f74bfe2e10206f8af7829873b0ac4.png

3、appium生态工具

adb:Android的控制工具,用于获取Android的各种数据和控制 appium Desktop:内嵌套了appium server和Inspector的综合 appium server:appium的核心工具,命令行工具 appium clients:各种语言的客户端封装库,用于连接appium server Java、Python、Ruby、Robotframework-appium AppCrawler:自动遍历工具

4、运行原理

  1. 客户端(电脑)运行自动化测试脚本,该脚本使用Appium的WebDriver接口。
  • 客户端可以是任何可以运行自动化测试脚本的设备,如电脑、平板电脑或手机。
  • 自动化测试脚本使用Appium的WebDriver接口来与Appium服务器进行通信。
  1. 客户端将测试脚本和相关命令发送到服务器(Appium Server)。
  • 客户端通过与Appium服务器的通信,将测试脚本和相关命令发送到服务器。
  • 服务器接收来自客户端的命令,并将其转换为UIAutomator可以识别的命令。
  1. Appium Server接收到来自客户端的命令后,将这些命令转换为UIAutomator可以识别的命令。
  • Appium服务器是一个中间件,它接收来自客户端的命令,并将其转换为UIAutomator可以识别的命令。
  • 这个转换过程是基于Appium的协议和UIAutomator的能力进行的。

5、Appium环境安装:

在这次项目中我们为了满足自动化巡检功能,结合了Appium-windows-1.15.1.exe、androidsdk.zip、jdk-8u211-windows-x64.exe、python3.7.9、chromedriver-win64-119、selenium 4.10.0、appium-python-client2.10.0进行安装配置实现自动化测框架。

基础组件安装:

  • 安装 selenium # pip install selenium==4.10.0 -i https://pypi.douban.com/simple/

  • 安装 Chrome浏览器 # wget https://www.google.cn/chrome/

  • 安装 Chrome Driver Chrome 115版本以后, Chrome Driver下载网站变了! Chrome driver现在的下载地址:https://googlechromelabs.github.io/chrome-for-testing/

Chrome 114以前的 版本访问下面的链接。 Chrome driver 老版的下载地址: https://chromedriver.storage.googleapis.com/index.html

第一步 安装appium桌面版客户端

# 执行windows-1.15.1.exe(Win10环境)

第二步 安装Appium-Python-Client (client编程库)

# pip install appium-python-client 或者用国内的源进行安装 pip install appium-python-client==2.10.0 -i https://pypi.douban.com/simple

第三步 安装JDK

# JAVA_HOME d:\tools\java\jdk1.8.0_211 安卓APP的自动化,必须要安装安卓SDK,而安卓SDK需要 JDK 环境。

第四步 安装Android SDK文件包 # 解压androidsdk.zip(Win10环境) 解压完成后,需要配置一下添加一个环境变量 ANDROID_HOME,设置值为sdk包解压目录,比如 d:\tools\androidsdk 配置环境变量PATH,加入adb所在目录, # d:\tools\androidsdk\platform-tools\

第五步 安装雷电模拟器 # 雷电模拟器ldinst_9.0.62.2.0.exe(Win10环境)

第六步 设置开发者模式,连接手机。 # 进入 手机设置 -> 关于手机 ,不断点击 版本号 菜单(7次以上),

第七步 启动Appium QQ浏览器截图20231121140016.pngQQ浏览器截图20231121140039.png

QQ浏览器截图20231121140156.png 点击启动会话

注意: Appium 2 的 find_element写法 注意:Appium Python 现在已经升级到 2.x 大版本,依赖 Selenium 4 以后, 下面这种 find_element_by* 方法都作为过期不赞成的写法 driver.find_element_by_id('username').send_keys('byhy') 运行会有告警,都要写成下面这种格式 from selenium.webdriver.common.by import By wd.find_element(By.ID, 'username').send_keys('byhy')

而后续还有 Appium独有的查找方式,比如 driver.find_element_by_accessibility_id('byhy') driver.find_element_by_android_uiautomator(code) 要改成

from appium.webdriver.common.appiumby import AppiumBy

driver.find_element(AppiumBy.ACCESSIBILITY_ID, 'byhy') driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, code)

这样也可以根据ID wd.find_element(AppiumBy.ID, 'username').send_keys('byhy')

Appium是一个C/S结构,就像我们浏览器访问网页,浏览器是客户端,通过操作发送请求服务器来获取数据。我们可以使用不同的客户端浏览器(IE,Firefox,Chrome)访问一个网站。Appium客户端可以使用不同的语言来实现,如Python,java等。具体详见下表: Language/Framework Github Repo and Installation Instructions Ruby https://github.com/appium/ruby_lib Python https://github.com/appium/python-client Java https://github.com/appium/java-client JavaScript (Node.js) https://github.com/admc/wd Objective C https://github.com/appium/selenium-objective-c PHP https://github.com/appium/php-client C# (.NET) https://github.com/appium/appium-dotnet-driver RobotFramework https://github.com/jollychang/robotframework-appiumlibrary