App测试入门

569 阅读16分钟

1.App测试要点

图片.png

2.App测试版本

当App开发完成,相应的开发人员会打出App包,由测试人员安装进行测试。

如果是Android平台,直接使用开发打出的APK包,即可在任意Android设备进行安装测试 如果是IOS平台则比较麻烦,苹果不允许未上架的App直接安装到设备中,我们可以通过ios企业签名来对App添加信任,让App能够免上架AppStore,直接在ios设备上进行内测。

2.1 IOS使用测试版本的方式

  • 本地打ipa包:测试人员需要先收集测试设备的UDID提供给开发,开发人员在开发者中心申请证 书并添加设备UDID(UniqueDeviceIdentifier),在本地打成ipa包。缺点是:最多支持添加 100台设备,有新的设备加进来需要重新打包。
  • 使用TestFlight:苹果官方App分发平台,测试人员只需要提供AppleID邮箱,由开发登录iTunes Connect给测试人员发送邀请,测试者接受邀请,然后通过TestFlight下载安装程序。TestFlight 分为内部和外部测试,内部测试的话不需要走苹果审核,但是可以添加的测试人员只有25个(通 过appleID邮箱进行添加);外部测试需要通过苹果审核后可以开放给至多10000人测试,不过 要经过苹果的审核,时间一般是1~2天。

2.2 第三方APP内测分发平台

内测分发平台是将开发好的软件不通过各大应用市场发布即可通过链接/扫码进行下载,这样该应用就无 需审批,可以节约很多精力和时间,方便App测试包的安装和管理。

  • 蒲公英
  • fir.im

好处:

  • 方便APP测试版本的管理和迭代
  • 可以通过多种方式分发APP安装包,便于开发与测试的对接过程

2.3 App应用发布上线

App开发完成,内测没有问题之后,下一步就需要将App上架到各大应用市场供用户进行下载使用


  • Android:豌豆荚、腾讯应用宝、360手机助手、手机内置的应用商城(华为、小米、oppo、 vivo...)

基本流程:

  1. 注册应用市场账号,完成实名认证;
  2. 申请软件著作权登记证书、安全评估报告、ICP备案
  3. 不同分发渠道的需要在App打上对应渠道码,重新打包。
  4. 上传到应用市场,提交App相关信息

  • IOS:AppleStore,苹果官方审核

基本流程:

  1. 注册Apple开发者账号
  2. 创建AppID、发布证书、Profiles文件;
  3. 打包成ipa包,上传AppStore等待审核

3.adb命令

3.1概述

adb(Android Debug Bridge)是Android SDK的一个工具,可以通过它来操作Android设备。它是Android App客户端测试的必备工具,无论是App功能测试、自动化测试还是性能测试,都需要使用它。

3.2主要功能

  • 安装和卸载应用
  • 拷贝和推送文件
  • 查看应用程序占用的资源
  • 执行shell命令

跨平台支持

adb支持跨平台,可以在以下操作系统上运行:

  • Windows
  • Mac
  • Linux

3.3 配置Android SDK环境

3.3.1 什么是Android SDK?

Software Development Kit(软件开发套件)是一组被软件工程师用于特定软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。Android SDK提供了构建Android应用程序所需的API库和开发工具,用于测试和调试应用程序。

3.3.2 下载SDK包

下载网站

1.本次选择windows的zip包

图片.png

2.选择该文件 图片.png

3.下载所需的包即可

4.配置环境变量

步骤
  1. 新建系统变量

    • 在系统变量中,新建一个名为 ANDROID_HOME 的变量。
    • 变量值为Android SDK的安装路径(例如:C:\Android\sdk)。
  2. 配置Path变量

    • 在系统变量中找到 Path 变量,点击编辑。
    • Path 值的末尾追加以下内容: %ANDROID_HOME%\platform-tools %ANDROID_HOME%\tools

5.检验adb命令,安装成功!

图片.png

3.4 adb连接模拟器

以夜神模拟器为例:
  1. 替换ADB文件

    • 将Android SDK中的 adb.exe 文件复制到夜神模拟器的 bin 目录下,替换原有的 adb.exe
    • 同时,将 nox_adb.exe 也替换为Android SDK中的 adb.exe
  2. 验证连接

    • 打开命令行工具,输入以下命令验证连接:
      adb devices
      
    • 如果设备列表中显示模拟器设备,则表示连接成功。
连接真机

不同品牌、型号的手机可能存在一些差异,但大体步骤如下:

  1. 通过USB连接设备

    • 使用USB线将手机连接到PC端。
  2. 打开开发者选项

    • 进入手机 -> 设置 -> 关于手机 -> 连续点击五次“版本号”,即可打开开发者选项。
  3. 启用USB调试

    • 进入开发者选项,勾选“USB调试”选项。
    • 当弹出“允许调试”弹窗时,选择【是】。
  4. 允许计算机调试

    • 勾选【一律允许使用该台计算机进行调试】选项。
  5. 验证连接

    • 打开命令行工具,输入以下命令验证连接:
      adb devices
      
    • 如果设备列表中显示真机设备,则表示连接成功。

3.5 adb常用命令

  1. 查看设备

    • adb devices:查看当前连接的设备列表。
  2. 安装应用

    • adb install [apk文件路径]:安装一个应用程序。
    • adb install -r [apk文件路径]:覆盖安装。
  3. 卸载应用(注意此处需要获取包名)

    • adb uninstall [包名]:卸载一个应用程序。
  4. 获取前台运行应用的包名

    • windows系统使用findstr过滤关键字,Mac/Linux系统使用grep过滤关键字
    • Android 7.0 以下:adb shell dumpsys activity | grep "mFocusedActivity"
    • Android 7.0 以上:adb shell dumpsys activity | grep "mResumedActivity" 图片.png 此处包名为:tv.danmaku.bili
  5. 启动/终止服务

    • adb start-server:启动 ADB 服务。
    • adb kill-server:终止 ADB 服务。
  6. 传输文件

  • 从手机中拉取文件到本地电脑

    • 命令格式:adb pull <拉取文件所在的手机路径> <本机路径>
    • 示例:adb pull /sdcard/example.txt /Users/username/Desktop/
  • 从本地推送文件到手机

    • 命令格式:adb push <本机路径> <手机路径>
    • 示例:adb push /Users/username/Desktop/example.txt /sdcard/
  1. 远程连接
    1. 连接USB数据线,在命令行中输入 adb devices 确认设备已连接。
    2. 输入 adb tcpip 5555 开启TCP/IP连接,端口5555是默认端口,也可以选择其他端口。
    3. 断开USB数据线,在设备上查看IP地址或使用 ifconfig 命令查看。
    4. 使用命令adb connect 设备IP地址,例如 adb connect 192.168.1.100 ,实现远程连接。
    5. 连接成功后,可以使用 adb shell 等命令进行远程调试。
  2. 获取日志
    • adb logcat
    • windows系统使用findstr过滤关键字,Mac/Linux系统使用grep过滤关键字
    • adblogcat|findstr"xxx"
    • adblogcat|grep"xxx"

3.6 adb shell常用命令

3.6.1 ADB 命令与 ADB Shell 命令的区别
  • ADB 命令:是 ADB 程序自带的一些参数,用于完成不同的功能。
  • ADB Shell 命令:是通过调用 Android 系统中的命令,这些命令存放于 Android 系统的 /system/bin 目录下。
3.6.2 登录设备 Shell 模式
adb shell

图片.png

3.6.3 包管理

pm(Package Manager)是 Android 系统的内置命令,用于获取 Android 上的应用程序信息。

包管理常用命令
  1. 列出所有应用的包名 adb shell pm list packages
  2. 列出系统级别的应用 adb shell pm list packages -s
  3. 列出第三方应用 adb shell pm list packages -3
  4. 列出对应应用的安装路径 adb shell pm path <应用包名>
  5. 获取应用的详细信息 adb shell pm dump <应用包名>
  6. 清除应用的数据 adb shell pm clear <应用包名>
3.6.4 应用活动管理

am(Activity Manager)是 Android 系统的内置命令,用于启动 Activity、打开或关闭进程。

常用命令
  1. 启动应用 adb shell am start -n <应用包名>/<应用启动入口>
  2. 停止目标应用,再启动 adb shell am start -S <应用包名>/<应用启动入口>
  3. 启动应用,并且等待应用完成启动 adb shell am start -W <应用包名>/<应用启动入口>
  4. 强制停止应用 adb shell am force-stop <应用包名>

案例:控制应用启动

  • 执行 adb logcat |findstr "START"然后再模拟器打开一个应用 图片.png
  • cmp后面得到了包名和启动入口,再通过 adb shell am start -n <应用包名>/<应用启动入口>启动应用 图片.png
3.6.5 按键事件(此操作等价于按物理按键)

通过该命令可以向 Android 设备发送按键事件。 Android-Keyevent对应键值记录

常用命令
  1. 向输入框输入文本内容(不支持中文)

    adb shell input text <文本内容>
    
  2. 发送按键事件操作 adb shell input keyevent <按键事件>

  3. 发送触摸事件

    adb shell input tap <x轴坐标> <y轴坐标>
    
  4. 发送滑动事件

    adb shell input swipe <起始点x轴坐标> <起始点y轴坐标> <终止点x轴坐标> <终止点y轴坐标>
    
3.6.6 截屏/录制
  1. 截屏

    adb shell screencap -p /sdcard/xx.png
    
  2. 录制视频(使用 Ctrl+C 组合键结束录制)

    adb shell screenrecord /sdcard/xx.mp4
    
3.6.7 设置输入法
  • 列出所有的输入法 adb shell ime list -S
  • 设置输入法 adbshell ime set com.baidu.input_mi/.ImeService
3.6.8 获取系统服务信息
  • 获取CPU信息 adb shell dumpsy scpuinfo
  • 获取内存信息 adb shell dumpsys meminfo
  • 获取activity信息 adb shell dumpsys activity
  • 获取package信息 adb shell dumpsys package<应用包名>
  • 获取wifi信息 adb shell dumpsys wifi

4.移动端日志分析

4.1 Android App 常见异常

在移动应用开发中,日志分析是定位和解决问题的重要手段。Android 应用中常见的异常主要包括 CRASHANR,以下是对这两种异常的详细说明。


CRASH(崩溃)

定义:
在应用程序代码中出现了未捕获的异常,导致程序异常退出,具体表现为闪退或 App 停止运行。

发生原因:
CRASH 通常是由于业务代码中的异常情况导致的,常见的异常包括:

  • 空指针异常(NullPointerException) :尝试访问一个空对象的成员。
  • 索引越界(IndexOutOfBoundsException) :访问数组或列表时超出了其范围。
  • 内存溢出(OutOfMemoryError) :应用程序占用的内存超过了系统分配的限制。
  • 类型转换异常(ClassCastException) :尝试将对象强制转换为不兼容的类型。
  • 其他未捕获的异常:如网络请求失败、文件读取失败等。

影响:
CRASH 会导致用户体验急剧下降,用户可能会直接卸载应用。因此,开发者需要通过日志分析及时定位并修复这些问题。


ANR(Application Not Responding,应用程序无响应)

定义:
当应用程序在 5 秒内没有响应用户的输入操作时,Android 系统会判定为 ANR,并弹出一个对话框,提示用户选择继续等待或关闭应用程序。

发生原因:
ANR 通常是由于主线程(UI 线程)被阻塞导致的。Android 的主线程负责处理 UI 更新和用户交互,如果在主线程中执行了耗时操作,会导致 UI 无法及时响应。常见的耗时操作包括:

  • 数据库读取:在主线程中执行复杂的数据库查询操作。
  • 文件读取/写入:在主线程中读取或写入大文件。
  • 网络请求:在主线程中执行网络请求,尤其是网络状况不佳时。
  • 复杂计算:在主线程中进行大量的数据处理或计算。

影响:
ANR 会导致用户无法正常使用应用,严重影响用户体验。为了避免 ANR,开发者应确保耗时操作在后台线程中执行,并通过异步任务或线程池来管理这些操作。

4.2 Logcat 日志

Logcat 是 Android 系统中用于查看日志的命令行工具。Android 在运行时会记录系统和应用程序的日志,并将其保存到 Logcat 中。开发者可以通过 adb logcat 命令查看这些日志,帮助定位问题和调试应用。

4.2.1 adb logcat 命令格式

adb logcat <参数>... <过滤器>
  • 参数:用于控制日志输出的格式、内容等。
  • 过滤器:用于过滤特定标签或优先级的日志。

4.2.2 日志组成

一条典型的 Logcat 日志如下:

02-10 10:13:14.234 21857 18515 E AndroidRuntime: FATAL EXCEPTION: URGENT_THREAD_540

日志由以下几部分组成:

  1. 日期时间
    日志记录的时间戳,格式为 MM-DD HH:MM:SS.milliseconds
    例如:02-10 10:13:14.234 表示 2 月 10 日 10 点 13 分 14 秒 234 毫秒。

  2. PID(进程 ID)
    生成日志的进程 ID,用于标识日志所属的进程。
    例如:21857

  3. TID(线程 ID)
    生成日志的线程 ID,用于标识日志所属的线程。
    例如:18515

  4. 优先级
    日志的优先级,表示日志的重要程度。Android 中日志的优先级从低到高分为以下几种:

    • V (Verbose) :啰嗦,最低级别,用于开发调试中的详细信息,仅在开发中使用,不应在发布版本中输出。
    • D (Debug) :调试,用于调试信息,可以在发布版本中关闭,比较常见。
    • I (Info) :信息,一般提示性的消息,用于记录程序运行中的关键信息。
    • W (Warning) :警告,表示可能存在潜在问题,但不会导致程序崩溃。
    • E (Error) :错误,表示发生了错误,可能会影响程序运行。
    • F (Fatal) :致命错误,表示发生了严重错误,通常会导致程序崩溃。
    • S (Silent) :静默,最高级别,通常不显示。

    例如:E 表示错误级别的日志。

  5. 标签(Tag)
    日志的标签,用于标识日志的来源。通常是类名或功能模块名。
    例如:AndroidRuntime

  6. 正文
    日志的具体内容,描述事件或错误的详细信息。
    例如:FATAL EXCEPTION: URGENT_THREAD_540

4.2.3 Logcat 缓冲区

Logcat 日志是保存在缓冲区中的,Android 系统使用环形缓冲区来存储日志。由于日志是实时不断生成的,当缓冲区写满时,最旧的日志会被删除,以便为新日志腾出空间。开发者可以通过 adb logcat 命令查看和使用这些缓冲区。


1. 缓冲区的基本概念
  • 环形缓冲区
    Android 使用环形缓冲区存储日志。当缓冲区写满时,最旧的日志会被覆盖,确保最新的日志能够被记录。
  • 缓冲区大小
    在开发者选项中,有一个名为 “日志记录器缓冲区大小” 的选项,默认大小为 256KB。开发者可以根据需要调整缓冲区大小。

2. 缓冲区的类型

由于 Android 系统日志输出量非常大,为了便于管理和查看,Android 将不同类型的日志输出到不同的缓冲区中。主要的缓冲区包括:

  1. Radio

    • 包含与通信系统相关的日志,例如:蓝牙、Wi-Fi、3G/4G 等。
    • 查看命令: adb logcat -b radio
  2. System

    • 包含系统组件的日志,例如:系统服务、底层系统事件等。
    • 查看命令: adb logcat -b system
  3. Event

    • 包含事件相关的日志,例如:触摸事件、按键事件等。
    • 查看命令: adb logcat -b events
  4. Main

    • 包含 Java 层的日志,是开发者最常关注的缓冲区,尤其是应用程序的日志。
    • 查看命令: adb logcat -b main

3. 默认日志输出

如果不指定缓冲区,adb logcat 默认会输出 MainSystem 缓冲区的日志。例如:

adb logcat

这条命令会同时显示 Main 和 System 缓冲区的日志。

4.2.4 Logcat 参数

选项参数功能描述
-b<buffer>指定查看的日志缓冲区,例如 eventradio。默认值为 main
-c清除缓冲区中的全部日志并退出(清除后可使用 -g 查看缓冲区)。
-g打印日志缓冲区的大小并退出。
-d将缓冲区的日志输出到终端然后退出。
-S设置过滤器。

4.2.5 logcat 过滤器

为了减少不想要日志的输出,可以建立一个过滤器。

过滤语法
<tag>:<priority>
  • <tag> :日志的标签(tag),用于标识日志来源。可以使用 * 表示所有标签。
  • <priority> :日志的优先级,用于过滤日志级别。优先级从低到高包括:
示例
  1. 仅输出 tag"ActivityManager" 且优先级大于等于 "Info" 的日志: adb logcat -s ActivityManager:I

  2. 显示所有优先级大于等于 "Warning" 的日志: adb logcat -s *:W

4.2.6 logcat日志分析

1.如果是CRASH问题,搜索"Exception"关键字,快速定位到关键信息。 2.如果是ANR问题,则搜索"anrin"关键字,快速定位到关键信息。

可以将日志重定向到本地文件,再用文本查看工具进行搜索 adb logcat > D:\0517.1ogcat

4.2.7 traces 日志

当 Android 系统发生 ANR(Application Not Responding)时,会在 /data/anr/ 目录下生成一个 traces.txt 文件。该文件记录了发生问题进程的虚拟机信息和线程的堆栈信息,通过分析这些信息,可以定位 ANR 的原因。


获取 traces.txt 文件
  1. Android 10 以下系统:

    • 使用以下命令将 traces.txt 文件导出到本地电脑:

      adb pull /data/anr/traces.txt <本地电脑路径>
      
    • 示例:

      adb pull /data/anr/traces.txt C:\Users\YourName\Desktop
      
  2. Android 10 及以上系统:

    • 从 Android 10 开始,系统对 traces 文件进行了优化:

      • 每次 ANR 会根据时间戳生成单独的 traces 文件,避免文件覆盖问题。
      • 文件命名格式为:traces_<进程ID>_<时间戳>.txt
    • 注意:

      • 直接使用 adb pull 导出 traces 文件时,可能会提示 Permission denied(权限不足)。

      • 解决方法:

        1. 使用 adb shell 进入设备:

          adb shell
          
        2. 切换到 /data/anr/ 目录:

          cd /data/anr/
          
        3. 使用 cat 命令查看或复制文件内容:

          cat traces_<进程ID>_<时间戳>.txt
          
        4. 将内容重定向到本地文件:

          adb shell "cat /data/anr/traces_<进程ID>_<时间戳>.txt" > <本地电脑路径>
          

4.2.7 Bugreport 日志

描述:
Bugreport 文件中记录了系统运行过程中的各种 log 信息。Bugreport 包含了设备日志、堆栈轨迹和其他诊断信息,可以帮助开发人员查找和修复应用中的错误。

获取 Bugreport 日志的方法:

第一种方法:
  1. 在开发者选项中,选择“生成 bugreport”。
  2. 选择 bugreport 类型,稍等片刻后,通知栏会收到一个报告准备好的通知。
第二种方法:

使用 ADB 命令获取 bugreport 日志:

adb bugreport D:\log\bugreport

D:\log\bugreport 为本地电脑目录)

参考资料

APP测试视频教学

Android-Keyevent对应键值记录