Appium是一款开源的Appium自动化工具, 基于Webdriver协议, 主要有以下3个特点:
全能: 支持iOS/Andorid/H5/混合App/WinApp
通用: 支持Win/Linux/Mac, 支持Java/Python/Ruby/Js/PHP等各种语言
开源: 免费
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命令的封装
多平台支持
Calabash: iOS/Andriod/混合app, Ruby, BDD模式, Api丰富
Appium: iOS/Andriod/混合app/H5, Java/Python/Ruby/JS..
Macaco: 阿里基于Appium进行的精简封装的一套框架, 支持Electron应用, 包含app-inspector和ui-recorder, 统一了iOS/Android操作的Api, 目前坑比较多, 环境搭建较麻烦
Airtest(ATS): 网易推出的一款基于截图对比的App自动化测试工具, 可用于App游戏UI测试, 支持iOS/Android
云平台
Sauce Labs: Appium官方推荐, 应用最广的云测平台, 收费
Testin/腾讯云测等: 国内云平台, 收费
OpenSTF: 开源手机集群管理平台, 免费
Andorid(uiautomator)
调用Android adb完成基本的系统操作
向Android上部署bootstrap.jar
bootstrap.jar Forward Android的端口到PC机器上
PC上监听端口接收请求,使用webdriver协议
分析命令并通过forward 端口发给bootstrap.jar
bootstrap.jar接收请求并把命令发给uiautomator
ui automator执行命令
Andorid-uiautomator2-driver: bootstrap.jar改为使用uiautomato2 server apk, 使用netty server代替原来的websocket与PC端通信
iOS
client端 依然是 test script是我们的webdriver测试脚本。
中间是起的Appium的服务,Appium在服务端起了一个Server(4723端口),跟selenium Webdriver测试框架类似, Appium⽀持标准的WebDriver JSONWireProtocol。在这里提供它提供了一套REST的接口,Appium Server接收web driver client标准rest请求,解析请求内容,调⽤用对应的框架响应操作。
appium server调用instruments.js 启动⼀一个socket server,同时分出一个⼦子进程运⾏instruments.app,将bootstrap.js(一个UIAutomation脚本)注⼊入到device⽤于和外界进行交互
最后Bootstrap.js将执行的结果返回给appium server
appium server再将结果返回给 appium client。
安装JDK, 配置环境变量
安装Android SDK, 配置环境变量
安装Appium-Windows-Desktop
安装Appium-Python-Client
安装模拟器
Mac Android/iOS环境搭建
线性布局: LinerLayout
相对布局: RelativeLayout
帧布局: FrameLayout, 叠放
普通视图: View
切换视图: ListView, 注意, 其中的元素会动态变化
HierarchyViewer, uiautomatorviewer
TextView: 文本
Button: 按钮
EditText: 输入框
ImageView: 图片
其他: Alert(警告框)/Toast(提示消息)/SeekBar(滑块)/Webview(嵌入网页)
index: 索引, 用于排序
text: 控件名称(显示文本)
resource-id: 资源id
class: 控件类型(文本/按钮/输入框等)
content-desc: 控件描述
package: 所属包(一个包就是一个apk)
enabled: 是否可用
clickable: 是否可点击
focused: 是否聚焦状态
bounds: 坐标
add-ons: 附加库
build-tools: 编译工具
platform: 各版本sdk
platforms-tools: 平台通用工具, 如adb
tools: 常用工具
Adb(Android Debug Bridge): Andoid设备调试桥梁, 可以再PC端通过命令调试Android设备, 如获取设备状态, 安装/卸载app, 上传/下载文件等操作
开启/关闭服务
adb start-server: 开启服务
adb kill-server: 关闭服务
连接设备/获取连接状态(自动开启服务)
adb connect/disconnect 设备名或uuid: 连接/断开连接设备
adb devices: 查看连接的设备
安装/卸载app
adb install 安装包路径.apk
adb uninstall apk包名
通过uiautomatorviewer可以获取获取apk包名
上传/下载文件
上传: adb push 本地文件 设备目录
下载: adb pull 设备文件 本地目录
Copyadb push 1.txt /sdcard/
adb pull sdcard/1.txt .
adb shell: 可用于查看设备中的文件, exit退出
强大的adb shell
pm: 应用及权限管理 adb shell pm list packages
am: Activity操作 adb shell am start -n 包名/包名.主Activity名
input: 模拟按键/输入
点击(触控)指定坐标: adb shell input tap 50 250
输入文字: adb shell input text hello
按键: adb shell input keyevent 3
滑动: adb shell input swipe 300 1000 300 500
logcat: 日志查看及过滤(问题定位)
monkey: 性能/稳定性测试
dumpsys: 性能分析
screencap: 截图 adb shell screencap -p /sdcard/01.png
screenrecord: 录屏 adb shell screenrecord --time-limit 10 /sdcard/demo.mp4
使用aapt获取包名, 主Activity(aapt位于Androidsdk/build-tools下)
Copyaapt dump badging app-debug.apk
Copypackage: name='com.lqr.wechat'
...
launchable-activity: name='com.lqr.wechat.ui.activity.SplashActivity'
...
name中包含 包名.主Acitivty名
示例:
配合uiautomatorviewer查看元素坐标, 使用bounds中x,y的平均值, 屏幕分辨率1280*760, 滑动时可取平均值
安装高仿微信app
启动app
点击登录按钮
输入18010181267
按TAB键
输入123456
Copyadb install app-debug.apk
adb am start -n com.lqr.wechat/com.lqr.wechat.com.lqr.wechat.ui.activity.SplashActivity
adb shell input tap 170 1197
adb shell input text 18010181267
adb shell input keyevent KEYCODE_TAB
adb adb shell input tap 360 498
adb shell input swipe 700 540 10 540 # 滑动时离开一定边界
adb shell screencap -p /sdcard/01.png
adb shell input keyevent 3 # 按HOME键
adb pull /sdcard/01.png . # 下载图片
支持的KEYCODE
0 --> "KEYCODE_UNKNOWN"
1 --> "KEYCODE_MENU"
2 --> "KEYCODE_SOFT_RIGHT"
3 --> "KEYCODE_HOME"
4 --> "KEYCODE_BACK"
5 --> "KEYCODE_CALL"
6 --> "KEYCODE_ENDCALL"
7 --> "KEYCODE_0"
8 --> "KEYCODE_1"
9 --> "KEYCODE_2"
10 --> "KEYCODE_3"
11 --> "KEYCODE_4"
12 --> "KEYCODE_5"
13 --> "KEYCODE_6"
14 --> "KEYCODE_7"
15 --> "KEYCODE_8"
16 --> "KEYCODE_9"
17 --> "KEYCODE_STAR"
18 --> "KEYCODE_POUND"
19 --> "KEYCODE_DPAD_UP"
20 --> "KEYCODE_DPAD_DOWN"
21 --> "KEYCODE_DPAD_LEFT"
22 --> "KEYCODE_DPAD_RIGHT"
23 --> "KEYCODE_DPAD_CENTER"
24 --> "KEYCODE_VOLUME_UP"
25 --> "KEYCODE_VOLUME_DOWN"
26 --> "KEYCODE_POWER"
27 --> "KEYCODE_CAMERA"
28 --> "KEYCODE_CLEAR"
29 --> "KEYCODE_A"
30 --> "KEYCODE_B"
31 --> "KEYCODE_C"
32 --> "KEYCODE_D"
33 --> "KEYCODE_E"
34 --> "KEYCODE_F"
35 --> "KEYCODE_G"
36 --> "KEYCODE_H"
37 --> "KEYCODE_I"
38 --> "KEYCODE_J"
39 --> "KEYCODE_K"
40 --> "KEYCODE_L"
41 --> "KEYCODE_M"
42 --> "KEYCODE_N"
43 --> "KEYCODE_O"
44 --> "KEYCODE_P"
45 --> "KEYCODE_Q"
46 --> "KEYCODE_R"
47 --> "KEYCODE_S"
48 --> "KEYCODE_T"
49 --> "KEYCODE_U"
50 --> "KEYCODE_V"
51 --> "KEYCODE_W"
52 --> "KEYCODE_X"
53 --> "KEYCODE_Y"
54 --> "KEYCODE_Z"
55 --> "KEYCODE_COMMA"
56 --> "KEYCODE_PERIOD"
57 --> "KEYCODE_ALT_LEFT"
58 --> "KEYCODE_ALT_RIGHT"
59 --> "KEYCODE_SHIFT_LEFT"
60 --> "KEYCODE_SHIFT_RIGHT"
61 --> "KEYCODE_TAB"
62 --> "KEYCODE_SPACE"
63 --> "KEYCODE_SYM"
64 --> "KEYCODE_EXPLORER"
65 --> "KEYCODE_ENVELOPE"
66 --> "KEYCODE_ENTER"
67 --> "KEYCODE_DEL"
68 --> "KEYCODE_GRAVE"
69 --> "KEYCODE_MINUS"
70 --> "KEYCODE_EQUALS"
71 --> "KEYCODE_LEFT_BRACKET"
72 --> "KEYCODE_RIGHT_BRACKET"
73 --> "KEYCODE_BACKSLASH"
74 --> "KEYCODE_SEMICOLON"
75 --> "KEYCODE_APOSTROPHE"
76 --> "KEYCODE_SLASH"
77 --> "KEYCODE_AT"
78 --> "KEYCODE_NUM"
79 --> "KEYCODE_HEADSETHOOK"
80 --> "KEYCODE_FOCUS"
81 --> "KEYCODE_PLUS"
82 --> "KEYCODE_MENU"
83 --> "KEYCODE_NOTIFICATION"
84 --> "KEYCODE_SEARCH"
85 --> "TAG_LAST_KEYCODE"
uiautoviewer
id: resource_id
name: text/content-desc
xpath:
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
电商项目实战
web测试项目
web+App+h5+小程序 测试项目
接口自动化测试实战项目
Linux实战项目
我们进阶学习自动化测试必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
以上资料,对于想要测试进阶的朋友们来说应该会很有帮助,需要的小伙伴可以后台私信找我免费领取。
我见过很多leader在面试的时候,遇到处于迷茫期的大龄程序员,比面试官年龄都大。这些人有一些共同特征:可能工作了好几年,更夸张的是7、8年工作内容的重复性比较高,没有什么技术含量的工作。
凡事要趁早,特别是技术行业,一定要提升技术功底,丰富自动化项目实战经验,这对于你未来几年职业规划,以及测试技术掌握的深度非常有帮助。
如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。
如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步
在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。
我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,
测试开发视频教程、学习笔记领取传送门!!!