一、APP自动化测试介绍

1、什么是APP自动化测试

  • APP 自动化测试就是通过自动化工具或框架,让计算机模拟人类用户在 APP 上的操作,对 APP 进行测试的过程,这样可以节省人力、提高测试效率和准确性。
  • 自动化测试可以快速执行重复的测试用例,发现潜在的问题,还能在不同的设备和环境中进行测试。而且,它可以在开发过程的早期就开始进行测试,及时发现问题并修复,从而减少后期的维护成本。
  • 在进行 APP 自动化测试时,通常会使用特定的测试工具和框架,编写测试脚本,模拟用户的操作行为,比如点击、滑动、输入等。这些工具会捕获 APP 的界面元素,并与之进行交互,然后检查 APP 的响应是否符合预期。

二、APP自动化测试基础

1. APP自动化框架

1.1. 推荐-APP自动化测试工具-Appium

  • Appium Appium 是一个开源的移动应用自动化测试框架,支持 iOS 和 Android 平台。它提供了一个跨平台的 API,可以使用多种编程语言(如 Python、Java、JavaScript 等)来编写自动化测试脚本。Appium 支持模拟用户操作,如点击、滑动、输入等,并且可以与各种测试工具和持续集成系统集成。

1.2. Appium特点

  1. 跨平台支持:Appium 支持 iOS 和 Android 平台,使得可以使用同一套工具和代码来测试不同操作系统的应用。
  2. 多语言支持:Appium 可以使用多种编程语言来编写测试脚本,如 Python、Java、JavaScript 等,方便不同技术背景的开发人员使用。
  3. 模拟用户操作:Appium 提供了丰富的 API,可以模拟用户在应用中的各种操作,如点击、滑动、输入文本等,从而实现对应用的自动化测试。
  4. 支持原生应用和混合应用:无论是原生的 iOS 或 Android 应用,还是使用跨平台技术开发的混合应用,Appium 都可以进行测试。
  5. 可视化交互:通过与 Appium 服务器的交互,可以实时查看应用的状态和元素信息,方便调试和故障排查。
  6. 元素定位:Appium 提供了多种元素定位方法,如 ID、XPath、UI 自动化工具提供的属性等,帮助准确找到应用中的元素进行操作。
  7. 与测试框架集成:Appium 可以与各种测试框架和持续集成工具集成,如 JUnit、TestNG、Jenkins 等,方便测试的组织和执行。
  8. 社区支持和文档:Appium 有活跃的社区,提供了丰富的文档和示例,方便学习和解决问题。

1.3. Appium-官网

  • 官网:访问Appium官网(Redirecting)可以了解最新的版本、文档、API参考和示例代码等

1.4. Appium自动化原理

  • Appium 的自动化原理可以简单理解为“模拟人类操作”。它通过驱动移动设备或模拟器,使用相应的 API 来与应用进行交互。
  • 具体来说,Appium 会启动一个服务器,测试脚本通过与服务器进行通信,发送操作指令。服务器再将这些指令转换成设备或模拟器能理解的命令,从而实现对应用的操作。
  • 在这个过程中,Appium 会自动识别应用中的元素,比如按钮、文本框等,并提供相应的方法来操作这些元素。测试人员可以通过编写脚本,模拟用户在应用中的点击、滑动、输入等操作,然后检查应用的响应是否符合预期。

1.5. Appium自动化环境需要的工具

    • JDK (JDK的全称是Java SE Development Kit,也就是Java 开发工具箱,SE表示标准版)
    • SDK(adb集成在android-sdk中) 【Android SDK(Software Development Kit)是Google提供的软件开发工具包,专为开发基于Android操作系统的应用程序而设计】
  • Appium服务器安装
  • 基于python的Appium客户端(appium-client-python)

2. Appium自动化环境搭建

注意:环境搭建过程中,同学们可能会遇到各类异常问题,大家一定要学会习惯于在在网上寻求类似问题的解决方法,快速解决自己遇到的问题,加油!

2.1.1. 参考教程:
2.2.1. 异常处理

安装appium后,打开提示【无法打开“Appium Server GUI”,因为Apple无法检查其是否包含恶意软件。】

  • 输入命令:sudo spctl --master-disable(复制粘贴进去终端)
  • 回车!然后输入电脑密码回车即可(密码输入是看不见的,无视继续输入),然后再去打开软件即可

三、adb工具

adb:官网文档:https://developer.android.com/tools/adb?hl=zh-cn

Mac系统下利用ADB命令使用:https://blog.51cto.com/u_5513510/6922543

1. adb工具构成及原理

  • adb  包含了三个部分
    • adb 客户端    用来下发adb的指令工具
    • Server 服务端   adb.exe执行之后的进程,表示adb的服务端,通过服务端与手机上的adb守护进程进行通信
    • adb守护进程   随着android系统的启动而启动,当android系统关闭之后它才会关闭。

2. adb常用命令

2.1.1. 查看设备、启动关闭adb服务

如果是真机,不要 使用一带多接头的数据线,否则找不到手机设备

  • adb devices       查看手机的设备ID名称以及状态
  • DWV6R19A10002101 device        DWV6R19A10002101-5554 表示的是手机设备的ID名称, device表示设备处于在线状态,
    如果adb服务没有启动,下发该命令时,会自动的去启动adb的服务
  • adb start-server   启动adb服务
  • adb kill-server   关闭adb 服务

2.2.1. 获取包名和界面名

自动化过程当中,需要通过app的包名和界面名来启动app。

  • 包名: app包名 ,通过app的包名来区分不同的app,app包名是唯一的
  • 界面名(启动名): 相当于web页面当中的链接地址,在app当中,每个界面都有一个名字
  • 操作步骤:  adb命令
    • 在手机或者模拟器上面打开app
    • windows命令一:adb shell dumpsys window windows | findstr  mFocusedApp
    • windows命令二:   adb shell dumpsys window |findstr "usedApp"
    • MacOS命令一:   adb shell dumpsys window |grep  "usedApp"
    • com.baidu.homework/.activity.index.IndexActivity
      • com.baidu.homework 是包名
      • .homework/.activity.index.IndexActivity 是界面名
      • 通过 /  分隔包名和界面名
    • MacOS命令二: adb shell dumpsys window | grep mCurrentFocus

2.3.1. 安装卸载app

  • adb install xxx.apk , 安装一个apk
    • xxx.apk 需要为绝对路径,实际操作中直接将apk拖到终端中即可。
  • adb install -r xxx.apk
    • 重新安装此apk,但是保留原有的数据和缓存文件
  • adb install -s xxx.apk
    • 安装apk到sd卡中,默认为安装到机身内存中
  • adb uninstall (-k)
    • 卸载apk(-k表示保留数据和缓存文件)
  • app卸载    adb uninstall 包名
    • 卸载,不保留数据

2.4.1. 设备相关
  • adb get-serialno 获取序列号
  • adb shell getprop ro.product.model 查看设备型号
  • adb shell getprop ro.build.version.release 查看Android系统版本
  • adb shell wm density 查看屏幕密度
  • adb shell wm size 查看屏幕分辨率

2.5.1. 上传下载文件

  • 上传  将电脑上的文件上传到手机
    • adb push  电脑上的文件路径    手机的路径
    • 例子:adb push ./simple.txt  /sdcard
       
  • 下载文件   从手机上下载文件到本地
    • adb pull  手机的文件路径     电脑的文件夹路径
    • 例:adb pull /sdcard/simple.txt e:\rename.txt

2.6.1. 查看日志信息

获取日志信息:用来给开发定位问题。

adb  logcat    来查看相关的日志信息

2.7.1. 测试app的启动速度(性能测试)

测试app启动速度的命令:

  • adb shell am start -W 包名/界面名
  • 需要关注的是TotalTImie的时间值,在实际的测试过程当,会进行多次测试,然后取平均值。

3. 手势操作命令

  • 模拟点击事件
    adb shell input tap x y          
    • #  x y表示的是坐标点    参数之间用空格隔开
  • 模拟滑屏事件(参数之间用空格隔开)
    adb shell input swipe   start_x start_y  end_x  end_y    
    • # start_x, start_y 表示的是起始点坐标,end_x,end_y表示的是终点坐标
    • 注意Windows与Mac的上滑、下滑可能是反的,实际使用过程中注意调试一下
  • 模拟键盘操作
    adb shell input keyevent  键值  
    • (3   表示的HOME键    4 表示的返回键    66表示的回车键)
  • 模拟输入操作
    adb shell input text  内容  
    •  内容表示要输入的内容(不要输入中文)
  • 如果电脑上面连接了多个模拟器或者是手机。需要加上一个参数  -s  device_name  
    例:adb -s DWV6R19A10002101 shell  input keyevent 4

4. 稳定性测试  (一般持续进行8-10个小时,数据比较置信)

  • monkey   集成在adb工具当中,主要用来做稳定性测试用的, monkey是通过java语言编写的一种稳定性测试工具。
    主要用来测试app会不会出现crash(崩溃)的情况。
    相当于让一只猴子来随机操作app,所有的操作都有可能出现,长时间的操作来测试app会不会出现问题。
  • monkey常用的参数
    • -p 参数   对指定的app进行随机操作
      • adb shell monkey -p com.baidu.homework  100    (100次随机事件)
    • -v 参数   表示的是记录信息的级别
      • level 0:adb shell monkey -p com.baidu.homework  -v 100   默认级别
      • level 1:  adb shell monkey -p com.baidu.homework  -v  -v 100 打印出来的信息会比较详细,只打印跟本程序相关的日志信息
      • level 2:  adb shell monkey -p com.baidu.homework  -v  -v -v 100  打印出来的信息会更多,会显示出其他程序运行的信息
    • -s 参数  用于指定伪随机数。如果两次的伪随机数相同,那么两次的操作步骤、流程、操作事件完全一样。
      • 主要的作用,就是用来复现上次的问题
        adb shell monkey -p com.baidu.homework  -v  -v  -s 10  100
    • --throttle 参数 用于指定随机事件的间隔时间, 单位是毫秒
      • adb shell monkey -p com.baidu.homework  -v  -v  --throttle 3000 -s 10  100
         
    • --pct-touch   10       触模(10表示的是整个随机同件中的百分比)
    • --pct-motion  50      滑屏(50表示的是整个随机同件中的百分比)
       
  • 组合使用:
    • adb shell monkey -p com.baidu.homework  --throttle 500 --pct-touch 10   --pct-motion 50  -v -v -s 100 300>/Users/example/Desktop.error.txt
    • 注意:/Users/example/Desktop.error.txt 这个文件需要提前手动创用于接收日志信息
       
  • 日志分析
    • 如果在日志里面出现了 ANR(application not responsing)说明应用程序无响应。
    • 如果日志中出现了Exception,可能程序崩溃。

未完待续……

Logo

科技之力与好奇之心,共建有温度的智能世界

更多推荐