移动端测试之Appium

微信搜一搜公众号【窗外红叶】点下关注,关注后回复【资料】有我准备的全套测试自学资料和测试工具哦。

Appium简介

  • Appium 是一个自动化开源工具,支持 iOS 、 Android 和 Windows 桌面平台上的原生、移动 Web 和混合应用的自动化 。「原生应用」指那些用 iOS、 Android 或者 Windows SDKs 编写的应用。「移动 Web 应用」是用移动端浏览器访问的应用( Appium 支持 iOS 上的 Safari 、Chrome 和 Android 上的内置浏览器)。「混合应用」带有一个「webview」的包装器——用来和 Web 内容交互的原生控件。

  • 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实现了真正的跨平台自动化测试。

App自动化测试工具对比

iOS

官方:

  • Uiautomation/XCUITest: 白盒, UI测试, JS
  • 其他:FastMonkey: 性能(仿Monkey),
Andorid

官方:

  • Uiautomator/Uiautomtor2: UI测试, Java
  • Monkey: app性能/稳定性测试, 随机操作
  • MonkeyRunner: UI测试, Jpython, 只能通过坐标定位
  • Robotium: 白盒, UI测试, Java, 支持Webview/Toast/menu/Dialog等, 无法跨进程* Espresso: 官方推荐扩展测试包, 白盒,ui, 一般开发自测使用CTS: 兼容性测试, Java

其他:

  • Python-Uiautomotor2: UI测试, 使用简单, 支持无线连接设备及使用weditor查看元素定位
  • Adb-For-Test/adb-For-Robotium: 个人, 基于adb命令的封装

Appium实现原理

  • Appiums是由Nodejs编写的,集成了现有优秀框架,以Selenium WebDriver的协议统一起来,遵循RESTful设计风格web 服务器,它接受客户端的连接,接收客户端的命令,在手机设备上执行命令,然后通过HTTP的响应收集命令执行的结果。这种架构给我们提供了很好的开放特性:只要某种语言有http 客户端的api,我们就可以通过这个语言写我们的测试代码,当然了我们为了方便大家使用,提供了多种语言的客户端库供使用。

  • JsonWireProtocol(以下简称JWP)是通过使用webdriver与remote server进行通信的web service 协议。通过http请求,完成和remote server的交互。

  • 安卓实现架构
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fr56FkEU-1608303170308)(en-resource://database/1923:1)]

  • ios实现架构
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dfgpn4FF-1608303170312)(en-resource://database/1925:1)]

  • JsonWireProtocol说明JsonWireProtocol(以下简称JWP)是通过使用webdriver与remote server进行通信的web service 协议。通过http请求,完成和remote server的交互。

Appium安装以及环境变量的配置(这个就不多说了,很简单)

jdk下载安装及环境配置
sdk下载安装以及环境配置(将SDK 内的 tools 路径复制, 以及platform-tools的路径复制 添加在系统变量中的PATH中即可)
下载安装Appium-desktop

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vWGgSL6l-1608303170322)(en-resource://database/1927:1)]

下载安装安卓夜神模拟器(如果有需要)
安装后夜神模拟器可能会出现的问题?
  • sdk 中adb和夜神模拟器中adb版本不匹配问题(adb server version (31) doesn’t match this client (36))。看报错信息即可,解决的方法就是将现在SDK版本的adb.exe,覆盖模拟器安装文件中的adb.exe(夜神模拟器的是nox_adb.exe),重启模拟器即可
成功连接夜神模拟器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s3j45710-1608303170339)(en-resource://database/1929:1)]

安装python相关的包
  • 在安装了pip为前提,打开cmd命令输入,pip install selenium 和pip install python-appium-client

pip install selenium pip install python-appium-client

ADB介绍

  • Adb(Android Debug Bridge): Andoid设备调试桥梁, 可以再PC端通过命令调试Android设备, 如获取设备状态, 安装/卸载app, 上传/下载文件等操作

Adb常用命令(后面补充)

Appium使用

获取app的Packaage和Activity
desired_caps
Appium instpector的使用(与位于sdk中的UI Automator Viewer类似 )
启动和配置
打开inspector

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DgNZciyM-1608303170342)(en-resource://database/1947:1)]

Appium环境的配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rzcKKv1O-1608303170345)(en-resource://database/1951:1)]

DesiredCapabilities的作用:
  • 负责启动服务端时的参数设置,启动session的时候是必须提供的。
  • 告诉appiun server如下的信息:
    本次测试是启动浏览器还是启动移动设备?
    是启动andorid还是启动ios?
    启动android时,app的package是什么?
    启动android时,app的activity是什么?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gg3Io0bz-1608303170347)(en-resource://database/1953:1)]

元素定位
  • 通过resource_id:find_element_by_id
  • 通过content-desc:find_element_by_accessibility_id
  • 通过xpath:结合属性/上下级节点/索引定位
  • 重复元素+索引定位:| =find_elements_by_…| [1].click()
  • 逐级定位:driver.find.element_by_id(…).find_element_by_classname()
  • 使用By及元素定位器

使用uiautomator的原始定位方式

  • 1、通过id定位
  • 2、通过text定位
  • 3、通过class属性定位
  • 4、多属性定位
  • 5、过滤条件(后补充)
元素操作
  • click()
  • send_keys()
  • clear()
  • is_displayed()/is_enabled()/is_checked()
  • get_attribute();获取属性文本/状态/是否可操作
  • set_value():设置text值
  • text:元素的文本
  • location:获取元素坐标值
  • size:获取元素大小
按键操作
  • driver.keyevent()
  • driver.press_keycode()
屏幕操作
  • tap:触控(点击指定坐标),支持多点触控
  • swipe:滑动
  • flick:快滑
  • pinch
  • zoom
  • get_screenshot_as_file:截图
  • width = driver.get_window_size()[‘width’]
  • height = driver.get_window_size()[‘height’]
文件操作
  • driver.pull()
  • driver.push()
app操作
  • driver.is_app_installed()
  • driver.install_app()
  • driver.remove_app()
  • driver.launch_app()
  • driver.start_activity()driver.current_activity()
  • driver.background_app(3)driver.close_app()
网络状态
  • driver.network_connection
  • 录制
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值