前言

Appium是移动端的UI自动化测试框架,基于C/S模式,特点是支持跨平台(安卓,ios),支持多语言(对java,python都有支持的API)。本文系博主对于该框架的部分学习记录。

一、什么是Appium

Appium是一个开源、跨平台的测试框架,可以用来测试原生及混合的移动端应用。Appium支持IOS、Android及FirefoxOS平台。Appium使用WebDriver的json wire协议,来驱动Apple系统的UIAutomation库、Android系统的UIAutomator框架。Appium对IOS系统的支持得益于Dan Cuellar’s对于IOS自动化的研究。Appium也集成了Selendroid,来支持老android版本。

Appium支持Selenium WebDriver支持的所有语言,如java、Object-C、JavaScript、Php、Python、Ruby、C#、Clojure,或者Perl语言,更可以使用Selenium WebDriver的Api。Appium支持任何一种测试框架。如果只使用Apple的UIAutomation,我们只能用javascript来编写测试用例,而且只能用Instruction来运行测试用例。同样,如果只使用Google的UIAutomation,我们就只能用java来编写测试用例。Appium实现了真正的跨平台自动化测试。

appium选择了client-server的设计模式。只要client能够发送http请求给server,那么的话client用什么语言来实现都是可以的,这就是appium及webdriver如何做到支持多语言的;

下面这段介绍来自于appium的官网。

Appium is an open-source tool you can use to automate mobile native, mobile web, and mobile hybrid applications on iOS and Android platforms. “Mobile native apps” are those written using the iOS or Android SDKs. “Mobile web apps” are web apps accessed using a mobile browser (Appium supports Safari on iOS and Chrome on Android). “Mobile hybrid apps” have a native wrapper around a “webview” – a native control that enables interaction with web content. Projects like Phonegap, for example, make it easy to build apps using web technologies that are then bundled into a native wrapper – these are hybrid apps. Importantly, Appium is “cross-platform”: it allows you to write tests against multiple platforms (iOS, Android), using the same API. This enables a large or total amount of code reuse between iOS and Android testsuites.

二、搭建Appium+Python自动化测试环境

1、安装JDK并配置JDK的环境变量。

(1) JDK的下载

下载地址:
https://www.oracle.com/java/technologies/javase-downloads.html

下载版本选择主流的jdk1.8的版本:jdk-8u241-windows-x64.exe

(2) 配置JDK的环境变量:

我的电脑右键属性-->高级系统设置-->高级-->环境变量-->系统变量:

1、新建系统变量:

变量名:JAVA_HOME

变量值:C:\Program Files\Java\jdk1.8.0_211 (这里是jdk的实际安装路径)

2、新建系统变量:

变量名:CLASSPATH

变量值:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar; (前面有一点和冒号不能少)

3、编辑PATH变量,在PATH的最后面添加:

%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;(PATH中原来的路径不要去掉哦)

4、验证是否安装并配置成功:

在dos中输入javac和java -version验证。(分别出现一堆英文和jdk的版本信息则说明安装配置成功!)

如果基础太弱请点击:
https://blog.csdn.net/pengjiangchun/article/details/105419683 里面有很详细的步骤和截图!

2、安装SDK并配置SDK的环境变量。

(1) SDK的下载

下载地址:
http://tools.android-studio.org/index.php/sdk/

下载版本选择:
android-sdk_r24.4.1-windows.zip

(2) SDK的安装

进入D:\android-sdk-windows目录,双击SDK Manager.exe下载对应的包:

a.以下三个Android工具包必须安装:只需要下载最新的版本就行了。

b.Extras(附加设备)

c.安卓版本:安装和模拟器安卓版本一致的SDK。现在android 5开发的场景多一些

夜神模拟器查看Android版本:设置左边的三横->关于我们->Android版本

(3) 配置SDK的环境变量

我的电脑右键属性-->高级系统设置-->高级-->环境变量-->系统变量:

1、新建:

变量名:ANDROID_HOME

变量值:D:\android-sdk-windows (SDK的实际安装路径)

2、编辑PATH,在最后面添加:

%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools;%ANDROID_HOME%\build-tools\29.0.3;

(如果原来PATH路径最后不是;则加一个;再添加上面的内容)

3、验证是否安装并配置成功:

在dos中输入adb验证。在最上面出现Android Debug Bridge version版本信息,如下图表示成功!

3、安装夜神模拟器并在模拟器上安装被测app

(1) 夜神模拟器的下载

下载地址:https://www.yeshen.com/

版本选择:最新版

(2) 夜神模拟器的安装

下一步下一步傻瓜式安装。

(3) 被测app的安装

把apk包直接拖拽到夜神模拟中安装

(4) 设置模拟器/真机的环境

1.启用设备的开发者选项,启动调试功能。

夜神模拟器:设置->多次点击版本号直到出现提示【开发者选项】->返回上一步能看到【开发者选项】->USB调试。

2.输入命令前:因为SDK下的adb[在SDK安装目录的platform-tools目录下]和模拟器的nox_adb[在夜神安装目录的bin目录下]版本不一致,所以需要把SDK路径下的abd.exe复制到模拟器的bin路径下,重命名为nox_adb.exe,原来的nox_adb.exe先备份。

4.安装和配置Appium

(1) 下载和安装appium-desktop。

下载地址:(强烈建议使用迅雷下载)

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

(2) 打开appium输入:127.0.0.1和4723登录,如下图:

如果此端口被占用:可以使用此命令检查端口是否被占用:netstat -ano | findstr 4723

(3) 配置Appium检查器:

A.Appium右上角有三个选项分别为:

start inspector session 开始检查回话(点击它)

Get Raw Logs 获得原生日志

Stop Server 停止服务

B.点击Automatic Server(自动化服务)

在Desired Capabilities选项中输入如下内容,如图:

deviceName:设备名称

获取方式:通过adb devices获取。输入adb devices后出现

值为:127.0.0.1:62001

platformName:操作系统名称

可填写:Android和IOS

值为:Android

platformVersion:操作系统版本

查看天天模拟器的anroid版本获取得到。

夜神模拟器查看Android版本:设置左边的三横->关于我们->Android版本

appPackage:包名

通过aapt.exe获取:aapt dump badging apk包的路径。

值为:找到package后面的值,一般在第一行。如:tv.danmaku.bili

appActivity:activity程序主入口

通过aapt.exe获取:aapt dump badging apk包的路径,

找到launchable-activity后面的值,如:
tv.danmaku.bili.ui.splash.SplashActivity

第一种可以取全部的值,第二种也可以只取包名以后的内容:

第一种值为:
tv.danmaku.bili.ui.splash.SplashActivity

第二种值为:.ui.splash.SplashActivity (注意:前面有个点不能省略)

保存后点击"Start Session"如出现:unkown... 错误,是因为模拟器中没有安装apk包。

如果正常在模拟器里启动app则表示appium自动化测试环境搭建成功!

三、工作原理

Appium的构成

  • Appium 客户端 -- java写的,运行在PC上,开启后就可以提供Appium服务。
  • Appium 服务器 -- Appium Server,运行在PC上,监听端口,发送指令到移动设备。
  • 安卓模拟设备(Android SDK)-- 运行在设备上,用来执行自动化操作。

Appium工作流程(Android为例)

  • 测试脚本调用Appium Server提供的API,发送请求到Appium Server
  • Appium Server接收到脚本的请求后,发送指令到手机设备
  • 手机设备会安装一个Bootstrap.jar,作为中间件,会开启一个基于Appium服务的Socket,监听4724端口,将Appium Server发送的指令转为UIAutomator指令
  • UIAutomator指令执行操作后,响应原路返回

Appium源码分析(Python为例)

我们打开Appium客户端后,会开启Appium Server服务,默认会去监听4723端口,此时,脚本会通过该端口去和Appium Server通信,这个通信过程本质上是脚本发送 HTTP request请求到Appium Server。由于我们的目的是要通过脚本去操作手机设备,所以需要把设备的一些信息告诉给Appium Server,则需要传入个字典参数,即 desired Capabilities,以下是该参数的可取值表。

Appium Server是具备会话机制的,在接收到desired Capabilities后,会开启一个会话(调用start_session方法),此时会调用android driver向设备发送请求session的指令,由于第一次请求是不携带sessionid的,则响应会返回一个携带sessionid,client端则会存起来,然后下次请求时,会自动携带上这个sessionid,这里的sessionid作用是标志所打开的设备。

当调用quit方法时,会关闭session所关联的窗口。需要获取实战视频可以私信我,发送555既可!

Appium - 自动化测试框架 - 工作原理、环境搭建相关推荐

  1. Appium自动化测试框架的原理、安装以及使用

    appium是一个开源的移动端自动化测试框架,可以测试原生的.混合的以及移动端的web项目,appium是跨平台的,可以运行在osx.windows以及linux桌面系统上,用来测试ios.andro ...

  2. IT:前端进阶技术路线图(初级→中级→高级)之初级(研发工具/HTML/CSS/JS/浏览器)/中级(研发链路/工程化/库/框架/性能优化/工作原理)/高级(搭建/中后台/体验管理等)之详细攻略

    IT:前端进阶技术路线图(初级→中级→高级)之初级(研发工具/HTML/CSS/JS/浏览器)/中级(研发链路/工程化/库/框架/性能优化/工作原理)/高级(搭建/Node/IDE/中后台/体验管理/ ...

  3. python +appium实现原理_Appium+python自动化(四十)-Appium自动化测试框架综合实践 - 代码实现(超详解)...

    #coding=utf-8#1.先设置编码,utf-8可支持中英文,如上,通常放在第一行 #2.注释:包括记录建立时间,建立人,项目名称. '''Created on 2019-11-18 @auth ...

  4. Appium自动化测试框架

    Appium自动化测试框架 环境搭建 adb 构成和原理 连接 包名,界面名 文件传输 获取APP启动时间 获取手机日志 安装和卸载APP 进入到安卓手机内部的Linux系统命令行 启动和停止adb服 ...

  5. Appium+python自动化(三十八) - Appium自动化测试框架综合实践 - 框架简介-助你冲击高薪,迎娶白富美(超详解)...

    简介 好久没有更新博客了,博友们是不是有点等不及了.不好意思啊,中秋节过后太忙了,这篇是好不容易抽点零碎时间写的.从这一篇开始小伙伴或者童鞋们,就跟随宏哥的脚步,一步步的从无到有,从0到1的搭建一个完 ...

  6. appium自动化的工作原理

    appium自动化的工作原理 1. Appium组件 Appium Server Appium是一个C/S结构,包括Server和Client.Appium Server是Appium的服务端,作为一 ...

  7. Python Appium自动化测试框架 综合实践案例(中)

    Time will tell. 本篇章紧接上一篇继续来分享关于 Appium 自动化测试框架综合实践案例代码.框架所需要的代码实现都已基本完成. data数据封装 1.使用背景 在实际项目过程中,我们 ...

  8. Appium+python自动化(四十一)-Appium自动化测试框架综合实践 - 即将落下帷幕(超详解)

    1.简介 今天我们紧接着上一篇继续分享Appium自动化测试框架综合实践 - 代码实现.到今天为止,大功即将告成:框架所需要的代码实现都基本完成. 2.data数据封装 2.1使用背景 在实际项目过程 ...

  9. pythonappium自动化框架_Appium+python自动化(三十九)-Appium自动化测试框架综合实践 - 代码实现(超详解)...

    简介 前边一直在分享testng的相关文章,看了点赞量和阅读数不是很高,宏哥猜测估计是大家确实是用不到或者不喜欢吧!不过宏哥经过一段时间的准备,appium的自动化测试框架完善的差不多了,那么接下来宏 ...

最新文章

  1. python队列线程池_实例详解:python高级编程之消息队列(Queue)与进程池(Pool)
  2. leetcode 983. Minimum Cost For Tickets | 983. 最低票价(动态规划)
  3. 看完这篇,你应该知道什么是Linux了~
  4. java字节码_好的,每个接触Java字节码的人
  5. 深度学习TF—8.经典CNN模型—LeNet-5、VGG13、AlexNet、GoogLeNet、ResNet、DenseNet
  6. python数组下标用变量_你所不知道的Python奇技淫巧13招【实用】
  7. matlab分析傅里叶级数
  8. 知网一键下载PDF文献
  9. java判断浏览器杂项_杂 项 - HelloJava菜鸟社区
  10. 谷粒学院P21所需的maven jar包
  11. 职能部门绩效考核指标设置
  12. linux uefi iso,支持UEFI启动的GRUB2 ISO光盘镜像的制作
  13. 软件测试面试题:请对这个系统做出测试用例:一个系统,多个摄像头,抓拍车牌,识别车牌,上传网上,网上展示?
  14. spring 调用python_引用spring
  15. IGRP和EIGRP的无缝结合
  16. Java网络爬虫(三)爬取网络小说
  17. php.ini中文翻译-转载
  18. 计算机基础之Linux
  19. DRL经典文献阅读(二):确定性策略梯度(DPG+DDPG)【附代码】
  20. Python+我的世界=Mcpipy

热门文章

  1. 学习3D视觉太痛苦了,有哪些高效地学习方法呢?
  2. 游戏服务器怎么设置防护?游戏服务器安全防护策略
  3. Bootstrap实战---Dplayer播放器(影片)
  4. html背景图片带边框,在线给图片加边框和背景
  5. 字符1到数字1的路线指南
  6. 4K投影仪哪款性价比最高,当贝X3 Pro高亮128G存储618值得看
  7. chatgpt赋能python:Python开立方函数math:让数学计算更加简单
  8. ST-P3:首篇基于环视相机的端到端自动驾驶框架!(ECCV2022)
  9. 面试中如何去回答原型链这个问题的思考
  10. 【规划】近一个月的规划