Python 测开27期 - julia - 学习笔记 - app自动化测试基础

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 等
    • 跨平台
      • Andoid、iOS
      • Windows、Mac
    • 底层多引擎可切换
    • 生态丰富,社区强大
  • 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
      image

Appium 介绍

  • Appium是一个移动端的自动化测试框架 ,可用于测试原生应用,移动网页应用和混合应用,且是跨平台的。可用于iOS和Android操作系统。原生应用是指用android或iOS编写的应用,移动网页应用是指网页应用,类似于iOS中safari应用或者Chrome应用或者类似浏览器的应用。混合应用是指一种包裹webview的应用,原生应用网页内容交互性的应用。重要的是Appium是跨平台的。何为跨平台,意思是可以针对不同平台用一套api来编写脚本。
  • 推荐Appium原因:
    • 跨语言:Java、Python、nodejs等
    • 跨平台:
      • Android、iOS
      • Windows、Mac
    • 底层多引擎切换
    • 生态丰富,社区强大

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)
    image

Appium 安装

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 服务器需要自动化的平台的应用程序
  • 形式:键值对的集合,键对应设置的名称,值对应设置的值
  • 主要分为三部分
    • 公共部分
    • ios 部分
    • android 部分

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默认使用uiautomator2ios默认使用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" // 输入中文
}

回到笔记汇总