App 自动化测试的价值与体系
UI自动化价值
- 提高效率
- 融入企业迭代流水线,与 CI/CD/DevOps 结合
- 回归测试、功能测试加速
- 提高质量:
app 测试的时代背景
- 按月发布->按周发布->按小时发布
- 多端发布:Android、iOS、微信小程序、h5
- 多环境发布:联调环境、测试环境、预发布环境、线上环境
- 多机型发布:众多设备型号、众多系统版本
- 多版本共存:用户群体中存在多个不同的版本
- 历史回归测试任务:成百上千条业务用例如何回归
技术选型
- Appium
- Airtest
- 其他框架:calabash macaca atx
- iOS:KIF WDA XCUITest
- Android:Robotium Uiautomator2
自动化测试框架选择
- 推荐 Appium
- 跨语言:Java、Python、nodejs 等
- 跨平台
- 底层多引擎可切换
- 生态丰富,社区强大
- iOS:KIF WDA XCTest
- Android:Robotium Uiautomator
- 其他框架:calabash macaca atx
Appium 环境安装与架构介绍
目前 mobile 自动化解决方案
- iOS:
- calabash-ios
- Frank
- UIAutomation
- ios-driver
- KeepItFunctional
- Android:
- calabash-android
- MonkeyTalk
- Robotium
- UiAutomator
- selendroid
Appium 介绍
- Appium是一个移动端的自动化测试框架 ,可用于测试原生应用,移动网页应用和混合应用,且是跨平台的。可用于iOS和Android操作系统。原生应用是指用android或iOS编写的应用,移动网页应用是指网页应用,类似于iOS中safari应用或者Chrome应用或者类似浏览器的应用。混合应用是指一种包裹webview的应用,原生应用网页内容交互性的应用。重要的是Appium是跨平台的。何为跨平台,意思是可以针对不同平台用一套api来编写脚本。
- 推荐Appium原因:
- 跨语言:Java、Python、nodejs等
- 跨平台:
- 底层多引擎切换
- 生态丰富,社区强大
Appium 引擎列表
- iOS
- The XCUITest Driver(推荐)
- (DEPRECATED)The UIAutomation Driver
- Android
- (BETA)The Espresso Driver
- The UiAutomator2 Driver(推荐)
- (DEPRECATED) The UiAutomator Driver
- (DEPRECATED) The Selendroid Driver
- Windows:The Windows Driver(for Windows Desktop apps)
- Mac:The Mac Driver(for Mac Desktop apps)
Appium安装-Julia的实践
获取 app 的信息
- app 入口,两种方式获取:
- 1、通过 logcat 日志获取
- Mac/Linux:
adb logcat ActivityManager:I | grep “cmp"
- Windows:
adb logcat ActivityManager:I | findstr "cmp"
- 2、通过 aapt 获取
- Mac/Linux:
aapt dump badging wework.apk | grep launchable-activity
- Windows:
aapt dump badging wework.apk | findstr launchable-activity
- 启动应用命令
adb shell am start -W -n <package-name>/<activity-name> -S
配置待测应用
-
platformName
:平台,Android/iOS
-
deviceName
:设备名
-
appPackage
:应用的包名
-
appActivity
:应用的页面名 Activity
-
noReset
: 防止清空缓存信息
Appium Inspector 功能键
-
SelectElements
:选中元素,查看层级和属性
-
Swipe By Coordinates
:通过坐标点滑动
-
Tap By Coordinates
:通过坐标点点击
-
Back
:返回
-
Refresh Source & Screenshot
:刷新页面
-
StartRecording
:开始录制脚本
-
Search for element
:搜索元素
-
Copy XML Source to Clipboard
:复制 xml 结构
-
Quit Session & Close Inspector
:退出当前 Session
Capability 简介
- 功能:配置 Appium 会话,告诉 Appium 服务器需要自动化的平台的应用程序
- 形式:键值对的集合,键对应设置的名称,值对应设置的值
- 主要分为三部分
Session
- Appium 的客户端和服务端之间进行通信的前提
- 通过
Desired Capabilities
建立会话
公共部分参数配置
键 |
描述 |
值 |
platformName |
使用的手机操作系统 |
iOS,Android,或者 Firefox0S |
platformVersion |
手机操作系统的版本 |
例如 7.1 , 4.4
|
deviceName |
使用的手机或模拟器类型 |
iPhone Simulator , iPad Simulator , iPhone Retina 4-inch , Android Emulator , Galaxy S4 , 等等…. 在 iOS 上,使用 Instruments的 instruments -s devices 命令可返回一个有效的设备的列表。在 Andorid 上虽然这个参数目前已被忽略,但仍然需要添加上该参数 |
automationName |
使用哪个自动化引擎 |
android 默认使用uiautomator2 ,ios 默认使用XCUTest
|
noReset |
在当前 session 下不会重置应用的状态。默认值为 false
|
true , false
|
udid |
连接的真实设备的唯一设备编号 (Unique device identifier) |
例如 1
|
Android 部分特有参数配置
键 |
描述 |
值 |
appActivity |
Activity 的名字是指从你的包中所要启动的 Android acticity。他通常需要再前面添加. (例如 使用 .MainActivity 代替 MainActivity ) |
MainActivity , .Settings
|
appPackage |
运行的 Android 应用的包名 |
com.example.android.myApp , com.android.settings
|
appWaitActivity |
用于等待启动的 Android Activity 名称 |
SplashActivity |
unicodeKeyboard |
启用 Unicode 输入,默认为 false |
true or false
|
resetKeyboard |
|
true or false
|
dontStopAppOnReset |
首次启动的时候,不停止 app |
true or false
|
skipDeviceInitialization |
跳过安装,权限设置等操作 |
true or false
|
iOS 独有
键 |
描述 |
值 |
bundleId |
被测应用的 bundle ID 。用于在真实设备中启动测试,也用于使用其他需要 bundle ID 的关键字启动测试。在使用 bundle ID 在真实设备上执行测试时,你可以不提供 app 关键字,但你必须提供 udid 。 |
例如 io.appium.TestApp
|
autoAcceptAlerts |
当 iOS 的个人信息访问警告 (如 位置、联系人、图片) 出现时,自动选择接受( Accept )。默认值 false |
true 或者 false |
showIOSLog |
是否在 appium 日志中显示从设备捕获的任何日志。默认 false |
|
配置优化
{
"noReset": "true", // 不清空缓存信息
"dontStopAppOnReset": "true", // 首次启动的时候,不停止app
"skipDeviceInitialization": "true", // 跳过安装,权限设置等操作
"unicodeKeyBoard": "true" // 输入中文
}
回到笔记汇总