写点什么

App 自动化测试|Appium 工作原理及 Desired Capbilities 配置

  • 2023-07-23
    北京
  • 本文字数:2650 字

    阅读完需:约 9 分钟

Appium 工作原理及 Desired Capbilities 配置

Appium 工作原理


脚本请求——>4723 端口 appium server——>解析参数给 PC 端 4724 端口——>发送给设备 4724 端口——>通过设备 4724 端口发给 bootstrap.jar——>Bootstrap.jar 把命令发给 uiautomator


  • JsonWireProtocol:它是一种协议,遵循 REST 风格,以 JSON 方法进行传输,是一系列的键值对,遵循 W3C WebDriver Spec 设计风格;appium 中的 Json wire protocol 继承自 selenium 的 webdriver wire protocol,并进行了扩展,使得 Json wire protocol 能够控制不同的移动设备的行为。

  • bootstrap:bootstrap 在 appium 中是以 jar 包的形式存在的,它的功能是作为一个 socket 服务,把 Appium sever 发送的请求转化成 uiautomator 的命令来让 uiautomator 进行处理。 在创建 session 成功之前,appium 就已将 bootstrap.jar 放入手机中,并开启设备上的基于 appiumbootstrap 的 socket 服务,绑定本机和 boostrap 通信的端口号 4724 用于和 Android 设备通讯,默认监听 4724 端口,等待 client 的连接。

  • Uiautomator:UiAutomator 是 Google 提供的用来做安卓自动化测试的一个 Java 库,基于 Accessibility 服务。功能很强,可以对第三方 App 进行测试。它的初始版本发布在 Android4.3(APIlevel18)及以上的 android 系统版本。

  • Selendroid:Selendroid 和 UiAutomator 类似,也是 Google 提供的一个安卓自动化测试软件,适用于 Android 系统的本地应用程序和移动 web 的 UI 混合测试。它主要应用在 Android4.2(APIlevel17)及以下的 android 系统版本。

  • Instruments:Instruments 一个很灵活的、强大的工具,是性能分析、动态跟踪和分析 OSX 以及 iOS 代码的测试工具,appiumios 封装了 apple 的 Instruments 框架,主要使用 Instruments 里的 UIAutomation(Apple 的自动化测试框架),然后在设备中注入入 bootstrap.js 进行行监听。

Desired Capabilities 配置

Desired Capabilities 携带了一些配置信息。从本质上讲,它是 key-value 形式的对象。可以理解成是 java 里的 map,python 里的字典,ruby 里的 hash 以及 js 里的 json 对象。实际上 Desired Capabilities 在传输时就是 json 对象。


DesiredCapabilities 最重要的作用是告诉 appium server 本次测试的上下文。


比如:


  • 本次测试是启动浏览器还是启动移动设备?

  • 是启动 andorid 还是启动 ios?

  • 启动 android 时,app 的 package 是什么?

  • 启动 android 时,app 的 activity 是什么?


appium server 的这些疑问 Desired Capabilities 都必须给予解答,否则 appium server 就无法完成移动 app 或者是浏览器的启动。


Desired Capabilities 常用键值对介绍:


automationName:使用哪种自动化引擎。appium(默认)还是 Selendroid。


platformName:平台的名称,iOS,Android,FirefoxOS


platformVersion:移动设备的系统版本号,7.1,4.4


deviceName:设备名称,Android:可随意填写;IOS:instruments -s devices


udid:连接的物理设备的唯一设备标识 adb devices 可获取


app:本地绝对路径_或_远程 httpURL 所指向的一个安装包(.ipa,.apk,或.zip 文件)。Appium 将其安装到合适的设备上。如果指定了 appPackage 和 appActivity 参数,Android 则不需要此参数了。该参数也与 browserName 不兼容。(一般和 noSign 属性一起使用)


browserName:测试的 H5 web 浏览器,如果是测 app 则忽略


newCommandTimeout:用于客户端在退出或者结束 session 之前,Appium 等待客户端发送一条新命令所花费的时间(秒为单位)


noReset:在当前 session 前不重置 app 状态,默认值为 false


fullReset:(iOS)删除所有的模拟器文件夹。(Android)要清除 app 里的数据,请将应用卸载才能达到重置应用的效果。在 Android,在 session 完成之后也会将应用卸载掉。默认值为 false


Desired Capabilities android 特有键值对介绍:


appPackage:运行的 Android 应用的包名;如果是测试 H5 网页则忽略该属性


appActivity:Activity 的名字是指从你的包中所要启动的 Androidacticity。通常需要再前面添加‘.’;如果是测试 H5 网页则忽略该属性


unicodeKeyboard:使用 Unicode 输入法。默认值为 false


resetKeyboard:在设定了 unicodeKeyboard 关键字的 Unicode 测试结束后,重置输入法到原有状态。如果单独使用,将会被忽略。默认值为 false


noSign:跳过检查和对应用进行 debug 签名的步骤。仅适用于 UiAutomator,不适用于 selendroid。默认值为 false;(一般和 app 属性一起使用)


DesiredCapabilities 使用实例:


  1. 定义一个 Desired Capabilities 配置的字典


from appium import webdriver
# 1、定义一个DesiredCapabilities配置的字典des = { 'automationName':'appium', 'platformName':'Android', # 平台的名称,iOS,Android,FirefoxOS 'platformVersion':'9.1.0', # 填写android虚拟机/真机的系统版本号 'deviceName':'huawei', # 填写安卓虚拟机/真机的设备名称 'appPackage':'com.sky.jisuanji', # 填写被测app包名 'appActivity':'.JisuanjizixieActivity', # 填写被测app的Activity入口 'udid':'HBSBB18821510293', # 填写通过命令行 adb devices 查看到的udid 'noReset':True, # 是否 不重置APP 'noSign':True, # 是否 不签名 'unicodeKeyboard':True, # 是否支持中文输入 'resetKeyboard':True, # 是否支持重置键盘 'newCommandTimeout': 30 # 30秒没发送新命令就断开连接 }
# 2、把配置的字典作为请求参数发送给appium服务器driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',des)
复制代码


  1. H5 网页的 Desired Capabilities 配置:


from appium import webdriver
# 1、定义一个DesiredCapabilities配置的字典des = { 'automationName':'appium', 'platformName':'Android', # 平台的名称,iOS,Android,FirefoxOS 'platformVersion':'9.1.0', # 填写android虚拟机/真机的系统版本号 'deviceName':'huawei', # 填写安卓虚拟机/真机的设备名称 'browserName': 'chrome', # 浏览器的设备名称 'udid':'HBSBB18821510293', # 填写通过命令行 adb devices 查看到的udid 'noReset':True, # 是否 不重置APP 'noSign':True, # 是否 不签名 'unicodeKeyboard':True, # 是否支持中文输入 'resetKeyboard':True, # 是否支持重置键盘 'newCommandTimeout': 30 # 30秒没发送新命令就断开连接 }
# 2、把配置的字典作为请求参数发送给appium服务器driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',des)
复制代码


获取更多技术资料,请点击!

用户头像

社区:ceshiren.com 微信:ceshiren2021 2019-10-23 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料,实时更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬。

评论

发布
暂无评论
App自动化测试|Appium工作原理及Desired Capbilities配置_Python_霍格沃兹测试开发学社_InfoQ写作社区