本文章转载于搜狗测试

基于Appium的Android自动化测试(一)

项目技术结构:Java + Appium + TestNG + Maven

Appium

Appium是一个开源、跨平台的自动化测试工具,用于测试原生和轻量移动应用,支持iOS,Android和FirefoxOS平台。Appium驱动Android的UiAutomator框架,使用Selenium的WebDriver JSON协议。

相比其他的移动自动化测试工具,Appium测试由于调用了Selenium的client库使其可以使用任意的语言,包括Python、Ruby、Node.js、Objective-C等。

Appium——C/S构架

Appium的核心是一个web服务器,提供了一套REST接口。它收到客户端的连接,监听到命令,接着在移动设备上执行这些命令,然后将执行结果放在HTTP响应中返还给客户端。特点:多语言编写测试代码;可以将服务器放在不同的机器上;

在这里client其实就是发起command的设备,一般来说就是我们代码执行的机器,执行appium测试代码的机器。只要client能够发送http请求给server,只要它实现了webdriver标准协议就可以,故appium及webdriver可以支持多语言。

server的功能:监听一个端口,然后接收由client发送来的command,解释这些command,把这些command转成移动设备可以理解的形式发送给移动设备,然后移动设备执行完这些command后把执行结果返回给appium server,appium server再把执行结果返回给client。

Session

session是一个会话,自动化总在一个session的上下文中运行。在webdriver/appium,所有工作永远都是在session start后才可以进行的。客户端初始化一个seesion(会话)来与服务端交互。不同语言有不同的实现方式,但最终都是发送为一个“desired capabilities”的JSON对象参数的POST请求”/session”给服务器,然后传入Desired Capabilities,服务器会开始一个自动化的session,然后返回一个全局唯一的sessionID。以后几乎所有的请求都必须带上这个session id,因为这个seesion id代表了你所打开的浏览器或者是移动设备的模拟器。

Desired Capabilities

是一些key-value(键值对)的集合(比如map或者hash)。可理解成是java里的map,python里的字典,ruby里的hash以及js里的json对象。实际上Desired Capabilities在传输时就是json对象。

Desired Capabilities最重要的作用是告诉server本次测试的上下文。客户端将这些键值对发给服务端,告诉服务端我们想要启动怎样的自动化session。根据不同的capabilities 参数,服务端会有不同的行为。

举个栗子

capabilities.setCapability("platformName capability","Android");

capabilities.setCapability("platformVersion","4.3");

capabilities.setCapability("appPackage","com.sogou.map.android.maps");

capabilities.setCapability("appActivity",".MainActivity");

platformName capability 设置为Android,要启动一个Android的session;本次测试是启动andorid移动设备;app的package是com.sogou.map.android.maps;启动android时,app的activity是MainActivity

Appium真正的工作引擎是第三方自动化框架,Android使用的第三方框架:为UiAutomator(Android 4.2+)。借助第三方框架,建立了服务器和设备之间的连接。

API Level对应关系如下:

平台版本

API级别

Android 7.1

25

Android  7.0

24

Android  6.0

23

Android  5.1

22

Android  5.0

21

Android 4.4W

20

Android  4.4

19

Android  4.3

18

不同版本,通过UiAutomator可以获取设备属性不同(例如:Android4.3以上版本支持source-Id,之前的版本不支持此字段,即API Level大于或者等于18才能够获取)。

更多相关文章

  1. python专项测试——Android(安卓)App自动化测试框架
  2. 【android】view.getRootView()的真正含义及测试
  3. android中scrollview与webview冲突事件
  4. Android(安卓)Espresso
  5. Android(安卓)自动化测试(2)根据ID查找对象(java)
  6. appium 自动化测试之知乎Android客户端
  7. TQ210搭载Android(安卓)4.0.3测试Google Maps API V2(一.获取地
  8. 正在学习 android 开发,开发环境已搭建完毕,第一个测试程序已在模
  9. Android(安卓)测试工具------ monkeyrunner工具

随机推荐

  1. Android 如何实现带滚动条的TextView,在更
  2. 性能优化系列总篇
  3. Android如何通过shareduserid获取系统权
  4. Android的按键处理
  5. Android(安卓)NDK隐藏jni动态库的内部符
  6. Android中pm命令用法详解
  7. Android SDK content Loader has encount
  8. 总结android中Intent的用法
  9. GridView的属性
  10. android混淆出错更新progurad