软件测试所有内容笔记正在陆续更新中,笔记已经在本地记录,全部为自己手动记录的笔记及总结,正在开始更新中,后续会逐步更新并完善到 软件测试学习内容总结 专栏。
本节内容:app测试方法与技术

文章目录

  • 1. app结构讲解
    • 1. apk 包结构
    • 2. app 页面结构
      • 移动端app分类
      • 界面元素查看工具 - `uiautomatorviewer`
  • 2. adb常用命令
    • 1. Android 环境搭建
    • 2. adb简介
    • 3. adb常用命令
  • 3. app常见bug解析
    • 1. 功能 bug
    • 2. 崩溃 bug
    • 3. 性能 bug
  • 4. 知名app测试实战1
    • 项目背景
      • ☆ app测试流程
    • 需求分析
    • 接口文档分析
    • 测试用例设计
  • 5. 知名app测试实战2
    • app 测试思路总结
    • Android 模拟器
    • Android 开发者选项
    • adb 常用命令
    • app 压力测试

1. app结构讲解

1. apk 包结构

什么是apk

  • apk 是 Android Package 的缩写,即Android安装包
  • apk 文件其实是 zip 格式,但后缀被修改为 apk

apk结构

  • lib/    # so文件,armeabi-v7a,x86
  • res/    # 资源目录
  • assets/    # 配置文件
  • classes(n).dex    # 虚拟机执行文件
  • resources.arsc
  • AndroidManifest.xml    # 每个应用都有,放Android清单

2. app 页面结构

移动端app分类

  • Native App:原生APP手机应用
  • Hybrid App:混合型APP手机应用程序
  • Web App:基于Web的APP手机应用程序

Native App

  • Activity 展示与用户交互的界面
  • Window 窗口
  • View 视图对象
  • ViewGroup 多个view

界面元素查看工具 - uiautomatorviewer

  • 工具:uiautomatorviewer

元素属性

index 元素索引
text 显示的文本
resource-id 元素id
class 元素类名
package 包名
content-desc 元素的描述文案

2. adb常用命令

1. Android 环境搭建

安装jdk

  • 环境搭建帖子:<4001>
  • 安装过程全程默认即可,不需要更改
  • 安装完毕后需要配置环境变量
    • 新建变量JAVA_HOME:jdk 安装根目录
    • Path变量中添加
      • %JAVA_HOME%
      • %JAVA_HOME%\bin
      • %JAVA_HOME%\jre\bin
    • 验证环境:java -version

安装Android Studio

  • 下载:https://developer.android.google.cn/studio/#downloads
  • 默认安装,没有特殊操作

安装 sdk

  • 安装

    • Android SDK Build-Tools(29版本)
    • Android Emulator
    • Android SDK Platform-Tools
    • Android SDK Tools

配置 sdk 环境变量

  • 新建ANDROID_HOME:sdk 安装根目录
  • Path 变量中添加
    • %ANDROID_HOME%\emulator
    • %ANDROID_HOME%\tools
    • %ANDROID_HOME%\tools\bin
    • %ANDROID_HOME%\platform-tools
  • 环境验证:adb version

2. adb简介

adb简介

  • Android Debug Bridge(Android调试桥)简称adb
  • Android sdk 中提供的用于管理模拟器或真机状态的工具
  • 命令行工具

adb组成

采用了客户端-服务器(C/S)模型,包括三个部分:

  • 客户端 client # 运行在电脑上,shell
  • 服务端 server # 运行在电脑上
  • 守护进程 daemon # 运行在Android设备

adb 工作原理

左边为电脑,右边为Android设备,
每一个设备占用2个端口,5554,5555为1个设备
原生adb,扫描端口范围为5555-5585,只能提供16个模拟器同时连接

启用adb调试

  • 模拟器:不需要手动设置
  • 真机:
    • 通过USB连接设备与电脑
    • 安装android手机驱动
    • 设备启动usb调试

3. adb常用命令

adb 命令格式

  • adb [-d | -e |-s <serialNumber>] <command>
  • -d:指定当前唯一通过USB连接的Android设备为命令目标
  • -e:指定当前唯一运行的模拟器为命令目标
  • -s:指定相应serialNumber号的设备/模拟器为命令目标

[] 表示可选,<>表示必填
一般用-s,通过序列号指定设备

查询设备

  • 连接模拟器端口:adb connect 127.0.0.1:xxxx(xxxx为模拟器的端口)
  • 列出已连接的设备:adb devices

真机直接执行adb devices
模拟器先执行adb connect 127.0.0.1:xxxx,再执行adb devices
mumu模拟器端口号:7555 # adb connect 127.0.0.1:7555

安装卸载应用

  • 普通安装:adb install <apk路径>
  • 覆盖安装:adb install -r <apk路径>
  • 完全卸载:adb uninstall <包名>
  • 保留配置文件:adb uninstall -k <包名>

安装时直接拖拽安装包到命令行得到路径
安装时使用apk路径,卸载时使用包名

设备与电脑传输文件

  • 从电脑上传文件至设备:adb push <电脑路径> <设备路径>
  • 从设备复制文件至电脑:adb pull <设备路径> <电脑路径>

push pull

adb shell 命令

  • 登录设备 shell
  • 相当于远程登录了 Android 系统,可以执行 Linux 命令
  • 直接发出 adb shell 命令:
    • adb [-s serial_number] shell command
  • 交互式 shell:
    • adb [-s serial_number] shell
    • 要退出交互式 shell,请按 Ctrl + D 键或输入 exit

执行adb shell 进入手机内部
android底层为Linux,进入adb shell后,Linux命令都可以执行。
退出交互式shell用Ctrl+d

设备截图/录屏

  • 截图:adb shell screencap <设备路径>
  • 录屏:adb shell screenrecord <设备路径>

调用 Activity 管理器

Activity 管理器(am)工具发出命令以执行各种系统操作

  • 启动应用:adb shell am start -n <包名>/<Activity名> #包名+activity名
  • 强制停止应用:adb shell am force-stop <包名>

adb shell am

调用 软件包 管理器

软件包管理器(pm)工具发出命令,对设备上安装的应用软件包进行操作和查询。

  • 显示所有应用:adb shell pm list packages #显示包名
  • 只显示系统应用:adb shell pm list packages -s
  • 只显示第三方应用:adb shell pm list packages -3
  • 列出所有测试软件包:adb shell pm list instrumentation
  • 删除与软件包关联的所有数据:adb shell pm clear <包名>

adb shell pm

adb shell dumpsys

调用dumpsys,获取在连接的设备上运行的所有系统服务的诊断输出

  • 获取前台包名:adb shell dumpsys activity | grep mFocusedActivity
    #Windows用adb shell dumpsys activity | findstr mFocusedActivity
  • 检查输入诊断:adb shell dumpsys input
  • 测试界面性能:adb shell dumpsys gfxinfo <包名>
  • 检查电池诊断:adb shell dumpsys batterystats --charged <包名>
  • 查看CPU信息:adb shell dumpsys cpuinfo
  • 查看内存信息:adb shell dumpsys meminfo
  • 获取内存占有情况统计信息:adb shell dumpsys procstats --hours 3

adb shell dumpsys

adb logcat

打印链接设备的log信息

  • 屏幕输出日志:adb logcat
  • 通过标签过滤:adb logcat -s 标签
  • 显示时间:adb logcat -v time
  • 输出所有信息:adb logcat -v long
  • 输出日志到文件:adb logcat -v time >log.txt
  • 清除旧日志信息:adb logcat -c

adb logcat

adb shell uiautomator

dump出当前窗口的UI布局信息

  • 前窗口的UI布局简化信息:adb shell uiautomator dump --compressed #默认将xml文件保存到sdcard下
  • 指定输出文件:adb shell uiautomator dump file <设备路径> #指定输出文件路径

adb shell uiautomator
输出的UI布局信息,可以用uiautomatorviewer工具打开,查看当前页面的各个元素的属性

3. app常见bug解析

1. 功能 bug

  • 内容显示错误 – 接口出错

  • 功能错误 – 后端问题

  • 界面展示错乱 – 前端问题

  • 界面展示后台信息 – 后端问题

  • 推送信息错误 – 后端问题

2. 崩溃 bug

Crash

3. 性能 bug

加载速度慢

  • 应用程序第一次启动速度慢
  • 进入到某一个界面加载速度慢
  • 启动某一个有动画效果的界面,动画执行过程加载速度慢并且有卡顿
  • 响应某一个用户事件时,长时间无响应(ANR)

其他

  • 太占用手机内存
  • 太耗电和流量
  • 在使用应用的过程中,点击某一个事件进入的页面出现白屏的闪动等

4. 知名app测试实战1

重点

  • app 测试流程
  • 了解需求文档和接口文档
  • 掌握 app 测试用例编写

PPT:

项目背景

项目介绍

  • 雪球 APP

模块介绍

  • 发讨论模块

app服务架构

☆ app测试流程

  • 需求分析
  • 测试计划编写
  • 测试用例设计
  • 测试用例评审
  • 用例执行
  • 回归测试
  • 非功能测试
  • 走查验收(UI、产品)
  • 灰度发布 #进行3轮
  • 上线
  • 测试总结报告

需求分析

需求分析步骤

  • 明确测试范围
  • 明确功能点
  • 明确业务流程
  • 明确输出结果
  • 分析异常流程
  • 预估测试需要的时间和资源

需求分析实战

  • 雪球app

    • 发讨论

分析需求文档
(https://ceshiren.com/uploads/default/original/2X/8/849ac3df40ceadffc95f6c9c1fa9605f501b1aba.png)


接口文档分析

接口文档

  • 接口请求地址(url)
  • 接口请求方式(get/post)
  • 输入参数(请求参数)
  • 输出结果(响应)

测试用例设计

测试用例设计实战

链接: https://pan.baidu.com/s/1rhzbrSC6EYZkaBM9Bw7Oow 密码: luqi

5. 知名app测试实战2

重点

  • 掌握 app 测试思路
  • 掌握 Android 模拟器的使用方法
  • 了解 Android 开发者选项
  • 掌握常用 adb 命令
  • 掌握 app 压测方法

PPT:


参考资料

  • android 环境搭建贴:Android Studio安装(推荐使用这种方法安装SDK)
  • emulator 使用贴:Android Studio模拟器创建和使用
  • mumu 官网:http://mumu.163.com
  • mumu 横竖屏切换贴:uiautomatorviewer将模拟器网易mumu识别为横屏
  • genymotion 下载:https://www.genymotion.com/download/

%ANDROID_HOME%\emulator
%ANDROID_HOME%\tools
%ANDROID_HOME%\tools\bin
%ANDROID_HOME%\platform-tools
emulator的配置必须放在最前面,不然emulator -version会报错,用不了



appium 用15左右的
编译打包生成apk文件 Build -Build apk
apk文件路径:app-build-…-apk-debug-app-debug.apk
生成apk文件后,到处到模拟器或真机安装

gradle下载:https://services.gradle.org/distributions
android studio的安装:https://blog.csdn.net/qq_41976613/article/details/91432304
gradle失败的问题:android studio的安装https://blog.csdn.net/qq_41976613/article/details/104394870


app 测试思路总结

app 测试思路
evernote:///view/21520833/s47/f48fb10e-0beb-4de7-ba52-2153423cab1c/f48fb10e-0beb-4de7-ba52-2153423cab1c/
APP测试设计

https://pan.baidu.com/s/1rhzbrSC6EYZkaBM9Bw7Oow 密码: luqi

测试角度看 Android 和 iOS 的区别 --面试

  • 物理按键:android 返回按钮
  • 安装:不同安装渠道
  • 兼容:兼容方案不一样
  • 手势操作:操作手势有区别
  • 系统底层运行机制:android 虚拟机运行机制,iOS 沙盒运行机制
  • 程序后台运行机制:android 所有程序都可在后台运行,iOS 第三方程序不可以在后台运行
  • 消息推送渠道:android 第三方平台,iOS 官方渠道
  • 页面渲染机制不同
  • 系统的开源不同:android 开源,iOS 非开源
  • 扩展:android 支持 sd 卡,iOS 不支持

app 测试与 web 测试的区别 --面试

仅仅从功能测试的层面上来讲的话,在流程和功能测试上是没有区别的

  • 架构不同:web 是 B/S 架构,app 是 C/S 架构
  • 性能关注内容不同:web 更关注响应时间,app 关注响应时间、流量、电量、CPU、内存
  • 兼容方案不同:web 关注浏览器,app 关注厂商、设备、分辨率、系统
  • app 多了专项测试:健壮性、安装、卸载、更新
  • 界面操作不同:app 关注手势操作
  • 测试工具不同:web 自动化用 selenium,app 自动化用 appium
  • 上线方式不同:app 需要发版

APP测试执行

Android 模拟器

Android studio 和 java 1.8 安装包
https://pan.baidu.com/s/1N3vUu_kespj0PCTpMcX4sw 密码: ljk4

emulator [ˈemjuleɪtə®]
<topic/4012>

  • 查看帮助:emulator -help
  • 查看模拟器列表:emulator -list-avds
  • 启动模拟器:emulator @avd_name

AVD设置中选择Android6.0的,6.0以上的提高了安全性,很多想看到的信息看不到了。adb很多信息看不到,抓包很多抓不到。6.0方便学习

mumu (推荐安装)

  • 下载地址:http://mumu.163.com

进入设置为竖屏,自定义 宽720 高1280
横竖屏设置 <topic/931>
不能定义其他的系统版本,只是Android6.0

genymotion (不推荐)

  • 下载地址:https://www.genymotion.com/download
  • 选择个人版本

课后任务

在自己本地搭建好Android环境

  1. 搭建 java
  2. 安装 Android studio
  3. 安装 Android SDK
  4. 配置环境变量

参考:<topic/4001>

Android 开发者选项

开启开发者选项

设置 -> 关于手机 -> 连续点击 N 次 MIUI 版本,即可开启开发者模式了

常用选项

  • 开启开发者选项
  • 不锁定屏幕
  • USB 调试
  • 选择模拟位置信息应用
  • 显示触摸操作
  • 指针位置
  • 调试 GPU 过渡绘制
  • 显示所有“应用程序无响应”

adb 常用命令

adb使用场景

  1. 连接设备

adb kill-server #停止adb服务
adb connect 127.0.0.1:7555 #win 系统执行(mumu模拟器)
adb devices #启动adb服务

  1. 指定设备

adb -s xxxx <命令>

adb -s 设备号 shell #进入指定的设备号的Android系统内部

  1. 安装 apk

adb install <apk路径>

  1. 进入设备内部

adb shell

  1. 查看包名

adb shell pm list packages -3 #查看安装的三方应用
adb shell dumpsys activity | findstr mFocusedActivity #查看当前打开窗口的APP的包名,activity名 --Android6以上用不了,
adb logcat | findstr ActivityManager #Android6以上用不了

查看雪球入口activity名称:在手机中打开雪球APP,执行adb shell dumpsys activity | findstr mFocusedActivity
mFocusedActivity:当前页面的activity
adb shell dumpsys:打印系统当中所有的server的信息

  1. 启动应用

adb shell am start -n <包名>/<Activity名>

adb shell am start -n com.xueqiu.android/.common.MainActivity
activity名会变化

  1. 强制停止应用

adb shell am force-stop <包名>

adb shell am force-stop com.xueqiu.android

  1. 清除应用数据

adb shell pm clear <包名>

adb shell pm clear com.xueqiu.android

  1. 获取界面布局信息

adb shell uiautomator dump --compressed

  1. 截图/录屏

adb shell screencap <设备中存放图片的路径>
adb shell screenrecord <设备中存放图片的路径>
adb pull <设备路径> <电脑路径>

  1. 抓取日志

adb logcat -s tag名
adb logcat -v time > log.txt

adb logcat -s System.out
可以通过优先级过滤 W V I E F,V最低级别,I-info,W高级别,E-error,F-fail
adb logcat "ActivityManager:I MyApp:D *:S"
过滤grep–android6以上显示不了包名,activity名
adb logcat | findstr ActivityManager

app 压力测试

Monkey 介绍

  • Monkey 是Google 提供的一个用于稳定性与压力测试的命令行工具。
  • 可以运行在模拟器或者实际设备中。
  • 它向系统发送伪随机的用户事件(如按键、手势、触摸屏等输入),对软件进行稳定性与压力测试。

为什么要用 Monkey

  • Monkey 就是像猴子一样上蹿下跳地乱点
  • 为了测试软件的稳定性,健壮性
  • 随即点击比顺序点击更容易发现问题

Monkey 基本用法

  1. 在命令提示符中输入 adb devices 查看有无连接的设备
  2. 确认有设备连接
  3. 获取APP的包名
  4. adb shell monkey [参数] {随机发送事件数}

Monkey 常用选项

  • -v:用于指定反馈信息级别,总共分3个级别
  • -s :用于指定伪随机数生成器的seed(种子)值 #保证每一次执行mokey命令,操作顺序一致
  • -p:用于约束限制,用此参数指定一个或多个包
  • –throttle :每个事件结束后的间隔时间
  • –ignore-crashes:忽略崩溃
  • –ignore-timeouts:忽略超时
  • –ignore-security-exceptions:忽略安全异常
  • –ignore-native-crashes:忽略本地代码导致的崩溃异常
  • –monitor-native-crashes:跟踪本地方法的崩溃问题

Monkey 事件选项

  • –pct-touch:触摸事件 #摁下抬起
  • –pct-motion:滑动事件
  • –pct-appswitch:activity之间的切换 #APP里不同页面的切换
  • –pct-pinchzoom:缩放事件
  • –pct-rotation:屏幕旋转事件
  • –pct-flip:键盘事件
  • –pct-anyevent:任意事件

整个操作比例是100%,可以在参数后面加数字,指定这一类型的事件在整个事件中占得百分比。–pct-touch 30 --pct-motion 20

实例

对雪球进行压力测试

  • 确定测试APP的包名
  • 执行8小时(8*60*60*1000/300=96000)
  • 日志级别
  • 确定雪球中常用的操作类型和比例
  • 确定seed值
  • 确定调试选项
  • 重定向日志到文件中 >

adb shell monkey -p com.xueqiu.android -v -v -v --pct-touch 30 --pct-motion 30 --pct-appswitch 20 --pct-flip 10 --pct-anyevent 10 -s 12345 --throttle 300 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes 100 > monkey_log.txt

100为测试的时间
整个有关pct的操作比例是100%,可以在参数后面加数字,指定这一类型的事件在整个事件中占得百分比。


Monkey 日志分析

  1. 程序无响应,ANR问题:在日志中搜索“ANR”
  2. 崩溃问题:在日志中搜索“CRASH”
  3. 其他问题:在日志中搜索”Exception”

课后作业

设计测试用例(使用思维导图) --面试 ☆

  • 微信发朋友圈功能

14z app测试方法与技术 -软件测试相关推荐

  1. APP移动端测试怎么测试?APP测试方法大全

    由于智能手机时代来临,很多产品都有了APP,作为一个测试人员掌握APP测试是必要的. 在展开APP测试之前,首先了解一下几个点: 1.基于软件测试框架之上.复习下软件测试框架. 2.框架的内容贯穿于A ...

  2. 《软件测试方法和技术》 读书笔记

    <软件测试方法和技术> 读书笔记 2014-07-17 第一章 引论   1.3 什么是软件测试   1.4 软件测试与软件开发的关系 第二章 软件测试基本概念   2.1 软件缺陷   ...

  3. web测试与APP测试方法总结

    web测试方法总结 一.输入框 1.字符型输入框: (1)字符型输入框:英文全角.英文半角.数字.空或者空格.特殊字符"~!@#¥%--&*?[]{}"特别要注意单引号和& ...

  4. 软件测试方法和技术ppt,软件测试方法和技术.ppt

    <软件测试方法和技术.ppt>由会员分享,可在线阅读,更多相关<软件测试方法和技术.ppt(33页珍藏版)>请在人人文库网上搜索. 1.软件测试方法和技术,内容提要,软件缺陷的 ...

  5. 软件测试方法汇总,软件测试方法和技术总结.ppt

    软件测试方法和技术总结 自动化测试万能论 发布之后的软件若有质量问题,并不一定就软件测试人员的职责 用户参与至软件测试中,也可不参与 杭师大软件质量保证和测试教学课件 影响测试策略的因素 1.测试完成 ...

  6. APP测试和传统软件测试有什么区别?

    软件测试从字面意思我们就知道它主要是做软件产品方面的测试,尤其是APP这块,那么很多人就问了APP测试和传统软件测试有什么区别?来看看下面的详细介绍. 软件测试培训分享:APP测试和传统软件测试有什么 ...

  7. APP测试和传统软件测试有什么区别

    APP测试和传统软件测试有什么区别?APP测试和传统测试是有一些区别的,移动APP的特点使得它与传统软件在开发.测试方面都有所不同.比较移动APP测试与传统软件测试的不同,要从以下几个方面进行考虑: ...

  8. windowsphone开发_[app开发定制公司]开发app需要什么技术呢?

    [app开发定制公司]开发app需要什么技术呢?APP开发公司为一些人介绍app开发有哪些开发方式,不同类型的APP需要用到哪些开发语言和开发操作系统,企业或者个人用户可以根据自己的需求选择不同的ap ...

  9. 安卓APP动态调试技术

    0x00 前言 随着智能手机的普及,移动APP已经贯穿到人们生活的各个领域.越来越多的人甚至已经对这些APP应用产生了依赖,包括手机QQ.游戏.导航地图.微博.微信.手机支付等等,尤其2015年春节期 ...

最新文章

  1. 体外反搏做_体外反搏治疗的原理
  2. 006_FastDFS文件上传
  3. uAdmin the Golang Web framework
  4. form表单通过checkbox_飞冰表单解决方案 - FormBinder
  5. 得到IOleInPlaceActiveObject接口,IOleInPlaceActiveObject::TranslateAccelerator(msg);
  6. 自动化测试学习之路--java 数组
  7. 25款.NET开发工具
  8. Python语音识别终极指北,没错,就是指北!
  9. Matlab鲁棒控制工具箱(Robust Control Toolbox)
  10. OpenWrt/Wifidog本地化解决方案
  11. ADDA数模转换(PCF8591)
  12. hexo添加点击爆炸效果 duang duang duang
  13. 暗影精灵双系统(win10和Ubuntu16.04)安装+Cuda和tensorflow安装-深度学习环境配置
  14. sparkSQL操作中spark内报错“拒绝连接”解决方案
  15. 基于rt-thread的udp客户端
  16. hmc如何进入aix系统_HMC配置及操作
  17. PHP 安装包 、文件 下载地址
  18. 打印复印机一直提示稿台上留有原稿怎么办?
  19. CHINA-PUB 网上书店购书优惠券
  20. 【MD5】什么是MD5?md5的简要描述

热门文章

  1. 图像处理中的傅里叶变换
  2. 自动化技术的发展与趋势
  3. Supervisor 安装与配置
  4. JavaScript葵花宝典(基础)
  5. 华为OD机试真题 Python 实现【快递投放问题】【2023 Q1 | 100分】
  6. Linux下常用的编辑文件与保存命令
  7. 使用 FRP 搭建内网穿透,流畅运行远程桌面!
  8. iOS即时语音聊天技术实践
  9. HDFS常用命令汇总
  10. gdkoi 2023