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

前言

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自动化测试环境

Appium - 自动化测试框架 - 工作原理、环境搭建_第1张图片

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工具包必须安装:只需要下载最新的版本就行了。

Appium - 自动化测试框架 - 工作原理、环境搭建_第2张图片

b.Extras(附加设备)

Appium - 自动化测试框架 - 工作原理、环境搭建_第3张图片

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

Appium - 自动化测试框架 - 工作原理、环境搭建_第4张图片

夜神模拟器查看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

Appium - 自动化测试框架 - 工作原理、环境搭建_第5张图片

(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登录,如下图:

Appium - 自动化测试框架 - 工作原理、环境搭建_第6张图片

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

(3) 配置Appium检查器:

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

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

Get Raw Logs 获得原生日志

Stop Server 停止服务

Appium - 自动化测试框架 - 工作原理、环境搭建_第7张图片

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

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

Appium - 自动化测试框架 - 工作原理、环境搭建_第8张图片

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 - 自动化测试框架 - 工作原理、环境搭建_第9张图片

Appium工作流程(Android为例)

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

Appium - 自动化测试框架 - 工作原理、环境搭建_第10张图片

Appium源码分析(Python为例)

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

Appium - 自动化测试框架 - 工作原理、环境搭建_第11张图片

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

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

你可能感兴趣的:(自动化测试,接口自动化测试,软件测试,python,开发语言,Python,软件测试,面试)