认识Fiddler抓包工具
抓包介绍
抓包到的数据,包括请求数据和响应数据
请求数据
-
完整请求数据由三部分组成:请求行,请求头,请求体
-
重要的请求数据:
-
URL:请求行的第二组数据
-
请求方法:请求行的第一组数据
-
请求体:空白行后面
-
响应数据
-
完整响应数据由三部分组成:响应行(别称:状态行),响应头,响应体
-
重要的响应数据:
-
状态码:相应行的第二组数据(三位数字组成)
-
响应体:空白行后面
-
URL
-
统一的资源定位符
什么是资源?网络中的图片、网页、视频.....
如何理解定位?通过URL找到网络中的资源
-
URL组成部分有哪些?
-
协议部分:规范数据传递的格式
http,https,ftp,dubbo
-
域名部分:定位资源所在哪一台服务器
-
说明:本质服务器的ip地址
-
-
端口号部分:定位资源所在服务器的哪一个程序中
-
请求/资源路径:定位资源所在服务器的具体位置
-
查询参数:传递对于资源进行何种操作(传递业务数据)
-
解释:(什么是业务数据?)访问登录页面,传入业务数据就是登录的用户名和密码
-
-
Get和Post区别
-
核心区别:Get没有请求体,Post有请求体
-
前置知识:(请求体作用)传递业务数据
-
具体区别:
-
安全性:
GET:只能使用URL中的查询参数传递业务数据,会暴露在浏览器中
Post:可以在请求体中传递业务数据,不会暴露在浏览器中
-
长度限制
GET:业务数据只能在查询参数中传递,但是URL有长度限制的
Post:业务数据通过请求体传递,是没有长度限制(请求体)
请求方法介绍: 常见请求方法: 前置条件--接口使用restful接口风格(接口设计的风格,并不是标准) get:查询 post:新增 put:修改 delete:删除
-
响应状态码
分类: - 2XX:成功 - 3XX:重定向(页面跳转) - 4XX:客户端错误(重点关注:后端开发可能产生BUG了) - 5XX:服务器错误
响应体
常见的响应体的数据类型:json(最主要),Html,图片...
抓到数据后怎么进行前后端定位
1.进行抓包,没有抓到包---结论:前端问题(前端在用户点击登录时,没有进行登录接口的调用) 2.进行抓包,抓到了接口请求数据,但请求数据错误---结论:前端问题(没有按照后端要求进行数据传递) 3.进行抓包,又抓到请求数据且正确,但响应数据错误---结论:后端问题 4.进行抓包,抓到请求数据且正确,查看响应数据正确---结论:前端问题(前端获取接口返回的响应数据,但在页面展示出现问题)
弱网测试
1.设置模拟网速
-
点击 fiddler中的 “rules”---“customize rules” 菜单(或者直接 CTRL+R),会打开一个脚本文件
-
在脚本文件中,按ctrl+f进行搜索,搜索的关键字为300 。并修改对应的上传和下载的时间。
2.开启限速
-
在rules菜单中,选择Perormance---Simulate Modem Speeds即可
3.进行弱网测试
计算延迟时间
断点测试
目的:绕过前端限制(修改请求的数据和响应的数据) 实现步骤: 1.修改请求数据 1.1 开启请求断点 1.2 在浏览器中操作对应的功能,发送请求 1.3 发送的请求被抓包工具拦截,拦截之后可以在抓包工具中修改对应的请求数据 2.修改响应数据 2.1 开启响应断点 2.2 操作浏览器,发送对应的请求 2.3 拦截返回的响应数据,针对响应数据进行修改
修改请求数据
目的:传入无法通过UI界面,传入的请求数据 使用场景:校验后端接口,是否实现需求的功能
-
开启请求断点
在浏览器中操作对应的功能,发送请求
-
发送的请求被抓包工具拦截,拦截之后可以在抓包工具中修改对应的请求数据
关闭断点
修改响应数据
使用场景:(提高效率)后端接口返回各种场景响应数据,前端UI界面展示的实际结果是否与预期一致
-
开启响应断点
-
操作浏览器,发送对应的请求
-
拦截返回的响应数据,针对响应数据进行修改
app与web测试区别
1.相同点
1.App与web的后端系统是相同的
2.APP与web都是通过http或者https协议来进行数据交互的
2.不同点
1.app是C/S(client客户端/server服务器)架构。web是B/S(browser浏览器/server服务器)架构
2.app与后端的数据交互格式主要为json,web与后端的数据交互格式主要为json/html
app测试范围
1.app的功能测试与web端一样,只是点的地方不一样
2.App的专项测试:
1.安装、卸载、升级测试
2.兼容性测试
3.push推送测试
4.交叉事件测试
5.用户体验测试
3.App性能测试:监控App使用过程中,性能指标是否满足预期要求
说明:通常我们说的性能测试,指的是接口的性能测试。App性能测试是专属于App客户端的
1.CPU、内存的使用率
2.流量、电量的消耗情况
3.流畅度测试
4.启动速度测试
5.稳定性测试
(面试)项目的迭代周期是多久?
1.之前项目还没有成型之前,大迭代(瀑布模型),迭代周期为2个月
2.之后项目成型,小迭代(敏捷开发),迭代周期为两周
项目发布策略
APP安装测试关注点
升级、卸载测试点
APP测试测什么
APP测试怎么测
PUSH消息推送
交叉测试
APP稳定性测试
介绍
· 稳定性测试:通过长时间对应用程序进行无序操作,校验应用程序是否会出现异常。如闪退crash、无响应ANR等
说明:(稳定性测试时机)在app系统功能稳定之后才会做稳定性测试
monkey工具:测试人员可以同过 Monkey来模拟用户的触摸、点击、滑动以及系统按键等操作(操作事件都是随机的),从而实现对APP压力的测试和稳定性测试。
常用参数
monkey命令参数介绍
完整的命令:
adb shell monkey -p 包名 -v -v -s 伪随机数 --throttle 间隔时间 随机事件次数>log.log
案例练习:adb shell monkey -p com.tpshop.malls -v -s 1 --throttle 1000 20>路径.log
App性能测试
App性能测试目标
-
知道需要收集哪些App性能指标
-
能够使用Solopi完成App性能指标的收集
Solopi工具介绍
-
solopi是针对安卓系统的app性能测试工具
-
说明1:Jmeter,LoadRunner是针对接口的性能测试工具
-
说明2:面试中问的性能测试能力,如果没有特别强调,都是问的接口性能测试
-
-
solopi安装:使用下来的apk工具直接在手机或者模拟器中进行安装
-
solopi权限确认:
-
步骤一:在模拟器的安装目录下,进入CMD命令界面
-
步骤二:输入命令adb tcpid 5555
-
-
solopi使用:
内存测试
app应用程序在使用过程中,必须将其加载到手机的运行内存中才能正常运作。
-
运行内存
private dirty:私有内存。app进程独占的内存空间
PSS:实际使用内存。私有内存+操作系统运行该app项目所占用内存(收集对象)
-
内存存在的问题
-
内存泄漏:当应用程序在内存空间中运行完成之后,并没有从其中完成释放。(离开时,留了点东西没带走)
-
内存溢出:当将要运行应用程序时,内存空间不足导致运行失败。(想进去,没位子)
-
-
内存问题,在手机上表现
-
内存泄漏:PSS内存不停往上增长。(注:及其缓慢过程,收集X小时才能被察觉)
-
内存溢出:app出现崩溃或者闪退
-
-
判断应用程序是否存在内存问题:应用程序运行过程中,PSS占实际内存长时间80%以上(判定为异常)
CPU测试
app应用程序的功能被执行,都是依靠CPU来完成
-
CPU单位:赫兹(理解为CPU完成功能执行,最多可以使用时间片段)
-
CPU运行方式:
-
串行:程序依次执行
-
并行:多个程序可以同时执行(只有多核CPU的手机,才能并行)
-
-
CPU有问题的表现:
-
CPU的使用率长期在80%以上
-
手机会发热、耗电量增加
-
app页面变慢或者出现ANR(application Not responding)的情况
-
-
实际工作测试中,如果CPU的值长期处于80%以上,那就说明有问题。
流量测试
-
流量:
通过数据网络访问互联网所产生的数据报文的总和,称之为流量。
流量可以分为上下行的报文数据。
-
solopi里面提供了网络(指流量)监控指标。
-
流量的优化
-
数据压缩之后,再进行传递
-
电量消耗
-
电量测试: 就是测试移动设备电量消耗快慢的一种测试方法。
-
测试电量消耗时把以下场景加进去:
-
定位,开启GPS
-
开启各种网, 4G、WIFI,蓝牙
-
屏幕亮度
-
CPU的运算
-
-
结果分析:
与竞品进行比较,有差距就优化
启动速度
-
app启动:
冷启动: 指app被后台杀死后,在这个状态打开app,这种启动方式叫做冷启动。
热启动: 指app没有被后台杀死,仍然在后台运行,通常我们再次去打开这个app,这种启动方式叫热启动。
启动速度的测试主要测试的是冷启动时间
-
冷启动速度的测试是通过adb命令来实现的。
命令:adb shell am start -W -n 包名/Activity
-
说明:Activity是Android中最基本的四大组件(Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器)之一 。为了负责与用户交互的组件,也可以理解为展示的页面。
adb shell am start -W -n com.tpshop.malls/com.tpshop.malls.SplashActivity
执行完该命令后,会获取以下三个关键指标(单位是ms),重点要关注的是totalTime(单位ms)
三个指标:
-
ThisTime:进入到app程序页面的时间
-
TotalTime:app程序全部完成启动所需要的时间
-
WaitTime:从结束上一个app程序到完全进入到使用app程序的时间
-
-
注意事项:
启动速度的测试需要测试多次(20次左右),再取totalTime的平均值。
只要启动速度的时间在3S以下,就是正常的
流畅度
-
流畅度: 每秒的帧率(FPS)
-
流畅度指标要求:
-
如果画面要达到连续的效果,FPS值为10-12
-
如果想要达到浏畅的效果,FPS的值为24以上
-
如果想要达到最佳的浏畅效果,FPS的值为60以上,
-
测试过程中,尽量不要有停留,因为页面一旦静止,FPS的值为0.
-
结果分析:浏畅度的指标值正常应该都是在24以上。取FPS的平均值。
易错点:solopi收集帧率需要选择测试对象
ADB常用命令
ADB命令介绍
-
针对android系统进行调测使用的
-
作用:辅助完成app测试(安装卸载、启动软件,管理android系统、实现抓取日志等功能)
连接设置(重要)
-
命令:adb devices
-
使用场景:查看当前连接的设备
-
命令:adb start-server / adb kill-server
-
使用场景:如果设备状态为offline,那么需要先执行: adb kill-server, 再启动:adb start-server
-
-
命令: adb connect IP地址 / adb disconnect IP地址
-
使用场景:
如果用的是mumu模拟器,需要在执行adb devices之前,先执行此命令:adb connect 127.0.0.1:7555
如果用的是夜神模拟器,需要执行adb devices之前,先要执行此命令: adb connect 127.0.0.1:62001
-
安装、卸载
-
命令:adb install apk安装包的路径
-
使用场景:通过adb命令,安装app系统
-
案例练习:adb install C:\Users\死猪不怕开水烫\Desktop\手工阶段安装工具\TPshop-debug.apk
-
-
命令:adb uninstall app包名
-
使用场景:通过adb命令,卸载app系统
-
案例练习:adb uninstall com.tpshop.malls
-
获取软件包名(重要)
在手机里面,是通过包名来区分不同的应用程序。每个应用程序的包名是不一样的。跟人的身分证类似。
-
命令:adb shell dumpsys window |findstr mCurrentFocus
-
使用场景:在windows系统中,获取当前正打开应用程序的包名
-
-
命令:adb shell dumpsys window | grep mCurrentFocus
-
使用场景:在mac/linux系统中,获取当前正打开应用程序的包名
-
扩展:
-
命令:adb shell pm list packages
-
使用场景:获取手机上所有的应用程序的包名
-
-
命令:adb shell pm list packages -s
-
使用场景:获取手机上系统自带的应用程序的包名
-
-
命令:adb shell pm list packages -3
-
使用场景:获取手机用户安装的应用程序的包名
-
针对APP操作
-
命令:adb shell pm clear (apk包名)
-
使用场景:清理指定app系统的缓存
-
目的:当发现BUG时,再次确认可以先清理缓存,确保其他数据对测试对象无干扰
-
-
案例练习: adb shell pm clear com.tpshop.malls
-
-
命令: adb shell am start 包名/界面名
-
使用场景:启动app系统
-
案例练习: adb shell am start com.tpshop.malls/com.tpshop.malls.SplashActivity
-
-
命令:adb shell am force-stop 包名
-
使用场景:强制杀掉app的进程
-
目的:当app系统卡死的时候,可以这么干
-
-
案例练习:adb shell am force-stop com.tpshop.malls
-
获取APP日志信息(重要)
-
使用场景:当测试过程中,出现了问题(闪退、崩溃),需要获取手机的日志信息进行问题分析与定位。
-
说明1:如果出现其他的BUG,怎么进行问题定位?
使用抓包工具,进行前后端问题定位
-
说明2:为什么闪退、崩溃不能使用抓包工具,进行前后端问题定位?
因为闪退和崩溃是没有办法抓取到接口。它是APP运行过程中出现了问题,而不是接口传输数据出的问题。
-
-
命令:adb logcat > 路径\文件名称.log
-
抓取日志的步骤:
-
进入到操作出现问题的页面。(在首页面)
-
在dos窗口执行adb logcat > log.log
-
操作出现问题的步骤。(点击 我的 菜单)
-
停止日志抓取即可。(按Ctrl+c)
-
-
扩展:如何通过日志确认问题?
通过关键字来进行定位:error,crash,ANR
获取内存、CPU数据
获取内存数据
-
命令:adb shell dumpsys meminfo <包名>
-
使用场景1:通过Native/Dalvik的Heap信息,判断程序是否存在内存泄漏
-
说明:如果该值一直增加,说明存在内存泄漏
-
-
使用场景2:通过Toal的PSS信息,查看哪个程序占用内存多
-
案例练习:adb shell dumpsys meminfo com.tpshop.malls
-
获取CPU数据
-
命令:adb shell top
-
使用场景:查看当前系统中,各个程序的CPU使用情况
-
-
说明:重点查看%CPU指标(表示:当前CPU使用率)
-
扩展1(排序):adb shell top -s (序号)
-
扩展2(获取指定程序):
window:adb shell top |findstr com.tpshop.malls
MAC:adb shell top |grep com.tpshop.malls
获取APP使用流量
-
命令1:adb shell ps | findstr 包名
-
使用场景:获取对应app的进程id
-
案例练习:
windows: adb shell ps |findstr com.tpshop.malls
MAC: adb shell ps |grep com.tpshop.malls
-
-
命令2:adb shell cat /proc/{PID}/net/dev
-
说明:{PID} 表示它是一个变量,是从第一个命令中获取的PID的值
-
使用场景:通过cat命令查看进程的网络流量
-
案例练习:adb shell cat /proc/XXXX/net/dev
-
-
扩展:真实手机操作:
-
用数据线连接手机和电脑(数据线不能充电线)
-
手机上要把USB调试打开(每一款手机开启USB调试的方法是不一样的。)
-
回顾_获取启动时间
命令:adb shell am start -W -n 包名/Activity 案例练习:adb shell am start -W -n com.tpshop.malls/com.tpshop.malls.SplashActivity
总结
ADB命令使用场景:
1.app测试过程中发现BUG,先清除缓存,再进行复现 1.确认手机连接成功 adb devices 2.获取当前程序的包名 adb shell dumpsys window |findstr mCurrentFocus 3.通过包名,清除缓存 adb shell pm clear 包名 2.app测试过程中操作某个步骤,出现闪退、白屏、崩溃,需要抓取日志 1.确认手机连接成功 2.抓取程序的日志 adb logcat > 路径\文件名称.log 3.app性能测试,获取冷启动时间 1.确认手机连接成功 2.获取当前程序的包名 adb shell dumpsys window |findstr mCurrentFocus 3.干掉程序 adb shell am force-stop 包名 4.获取冷启动时间 adb shell am start -W -n 包名/页面名称
APP稳定性测试
介绍
-
稳定性测试: 通过长时间对应用程序进行无序操作,检验应用程序是否会出现异常。如闪退crash、无响应ANR等
-
说明:(稳定性测试时机)在app系统功能稳定之后才会做稳定性测试。
-
-
monkey工具: 测试人员可以通过Monkey来模拟用户的触摸、点击、滑动以及系统按键等操作(操作事件都是随机的),从而实现对APP压力的测 试和稳定性测试。
常用参数
monkey命令参数介绍:
-
完整的命令:
adb shell monkey -p 包名 -v -v -s 伪随机数 --throttle 间隔时间 随机事件次数 > log.log
-
案例练习:adb shell monkey -p com.tpshop.malls -v -s 1 --throttle 1000 20 > C:\Users\死猪不怕开水烫\Desktop\demo\TPshop.log
Monkey finished后无内容,表示稳定性通过 CRASH:出现闪退、崩溃。稳定性测试不通过 ANR:页面、对象出现无响应。稳定性测试不通过
-
-
-p 包名 : 指定测试的app应用程序
例子: adb shell monkey -p com.tpshop.malls 10 (10表示10次随机事件)
说明:模拟app操作的事件只有三类 ACTION_DOWN:按下; ACTION_UP:抬起; ACTION_MOVE:移动
-
-v : 表示日志的级别(-v 、 -v -v(工作中使用的日志级别)、 -v -v -v)
例子: adb shell monkey -p com.tpshop.malls -v -v 10 (-v -v表示日志级别为高级别, 10表示10次随机事件)
-
--throttle 间隔时间间: 表示设置一个操作的间隔时间。(单位是ms)
一个操作包含多个事件(点击是一个操作, 它是由 按下 和抬起 两个事件组成)
adb shell monkey -p com.tpshop.malls --throttle 1000 -v -v 10 (对tpshop的每次操作,间隔时间为1s)
强调:throttle间隔的是操作,而一个操作包含多个事件 比如: 1.触摸的操作,包含:1个"按下"事件 + 1个"抬起"事件 2.滑动的操作,包含:1个"按下"事件 + 1个"移动"事件 + 1个"抬起"事件
-
-s 伪随机数(整数):类似标记符,用来记录该次执行的随机事件。当下次再使用相同数字-- 标记符,就会执行相同的随机事件
-
强调:每一次执行稳定性测试,该参数必填
原因:如果执行随机事件出现异常,那么需要复现操作来定位问题
adb shell monkey -p com.tpshop.malls -v -v --throttle 1000 -s X 10
-
-
日志收集:> 路径+存放日志名称.log
-
说明:相同日志名称,会覆盖上一次收集到的日志信息(相当于删除文件,再创建文件,最后写入日志信息)
-
面试题
如果工作中要做8个小时的稳定性测试,需要如何进行设置?
-
通过 throttle的间隔时间(1S)和 执行时间计算出来
-
具体说明:
总结
APP稳定性测试什么时候做? 怎么做? 如何判断是否测试通过? 如何测试不通过,你会怎么办?
APP手机抓包
前置条件: 抓包的电脑和运行app的手机必须是在同一个局域网(电脑和手机连接的是同一个无线路由器)
当前两个主流抓包工具:Fiddler和Charles
-
说明:Charles支持windows,mac,linux;Fiddler支持windows,在mac和linux使用需要很复杂的设置
如果windows首选Fiddler,如果Mac只能选Charles
设置步骤
-
抓包工具中生成并导出证书
-
设置手机代理
-
将证书上传到手机中,并进行安装