微信搜一搜公众号【窗外红叶】点下关注,关注后回复【资料】有我准备的全套测试自学资料和测试工具哦。
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的交互。
-
安卓实现架构
-
ios实现架构
-
JsonWireProtocol说明JsonWireProtocol(以下简称JWP)是通过使用webdriver与remote server进行通信的web service 协议。通过http请求,完成和remote server的交互。
Appium安装以及环境变量的配置(这个就不多说了,很简单)
jdk下载安装及环境配置
sdk下载安装以及环境配置(将SDK 内的 tools 路径复制, 以及platform-tools的路径复制 添加在系统变量中的PATH中即可)
下载安装Appium-desktop
下载安装安卓夜神模拟器(如果有需要)
安装后夜神模拟器可能会出现的问题?
- sdk 中adb和夜神模拟器中adb版本不匹配问题(adb server version (31) doesn’t match this client (36))。看报错信息即可,解决的方法就是将现在SDK版本的adb.exe,覆盖模拟器安装文件中的adb.exe(夜神模拟器的是nox_adb.exe),重启模拟器即可
成功连接夜神模拟器
安装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
Appium环境的配置
DesiredCapabilities的作用:
- 负责启动服务端时的参数设置,启动session的时候是必须提供的。
- 告诉appiun server如下的信息:
本次测试是启动浏览器还是启动移动设备?
是启动andorid还是启动ios?
启动android时,app的package是什么?
启动android时,app的activity是什么?
元素定位
- 通过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
- 录制