体育网站365-365bet信誉怎么样-线上365bet体育

Appium基础教程

Appium基础教程

目录

Appium环境搭建

Mac iOS环境搭建

Appium基础

Appium进阶

Appium简介

Appium是一款开源的Appium自动化工具, 基于Webdriver协议, 主要有以下3个特点:

全能: 支持iOS/Andorid/H5/混合App/WinApp

通用: 支持Win/Linux/Mac, 支持Java/Python/Ruby/Js/PHP等各种语言

开源: 免费

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命令的封装

多平台支持

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: 开源手机集群管理平台, 免费

Appium实现原理

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环境搭建

Andorid介绍

基本架构

常见布局/视图

线性布局: 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: 坐标

Adb命令基础

Andorid sdk介绍

add-ons: 附加库

build-tools: 编译工具

platform: 各版本sdk

platforms-tools: 平台通用工具, 如adb

tools: 常用工具

Adb介绍

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

Adb常用命令

开启/关闭服务

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 设备文件 本地目录

adb 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下)

aapt dump badging app-debug.apk

package: 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

adb 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"

Appium使用

获取app的Package和Activity

desired_caps

元素定位

uiautoviewer

id: resource_id

name: text/content-desc

xpath: