使用fiddler抓取手机APP的包

认识Fiddler抓包工具

抓包介绍

抓包到的数据,包括请求数据和响应数据

请求数据

  • 完整请求数据由三部分组成:请求行,请求头,请求体

  • 重要的请求数据:

    • URL:请求行的第二组数据

    • 请求方法:请求行的第一组数据

    • 请求体:空白行后面

响应数据

  • 完整响应数据由三部分组成:响应行(别称:状态行),响应头,响应体

  • 重要的响应数据:

    • 状态码:相应行的第二组数据(三位数字组成)

    • 响应体:空白行后面

URL

  • 统一的资源定位符

    什么是资源?网络中的图片、网页、视频.....

    如何理解定位?通过URL找到网络中的资源

  • URL组成部分有哪些?

    • 协议部分:规范数据传递的格式

      http,https,ftp,dubbo

    • 域名部分:定位资源所在哪一台服务器

      • 说明:本质服务器的ip地址

    • 端口号部分:定位资源所在服务器的哪一个程序中

    • 请求/资源路径:定位资源所在服务器的具体位置

    • 查询参数:传递对于资源进行何种操作(传递业务数据)

      • 解释:(什么是业务数据?)访问登录页面,传入业务数据就是登录的用户名和密码

Get和Post区别
  • 核心区别:Get没有请求体,Post有请求体

  • 前置知识:(请求体作用)传递业务数据

  • 具体区别:

    1. 安全性:

      GET:只能使用URL中的查询参数传递业务数据,会暴露在浏览器中

      Post:可以在请求体中传递业务数据,不会暴露在浏览器中

    2. 长度限制

      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界面,传入的请求数据
使用场景:校验后端接口,是否实现需求的功能
  1. 开启请求断点

    在浏览器中操作对应的功能,发送请求

  2. 发送的请求被抓包工具拦截,拦截之后可以在抓包工具中修改对应的请求数据

    关闭断点

修改响应数据
使用场景:(提高效率)后端接口返回各种场景响应数据,前端UI界面展示的实际结果是否与预期一致
  1. 开启响应断点

  2. 操作浏览器,发送对应的请求

  3. 拦截返回的响应数据,针对响应数据进行修改

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

  • 抓取日志的步骤:

    1. 进入到操作出现问题的页面。(在首页面)

    2. 在dos窗口执行adb logcat > log.log

    3. 操作出现问题的步骤。(点击 我的 菜单)

    4. 停止日志抓取即可。(按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

  • 扩展:真实手机操作:

    1. 用数据线连接手机和电脑(数据线不能充电线)

    2. 手机上要把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:页面、对象出现无响应。稳定性测试不通过
  1. -p 包名 : 指定测试的app应用程序

    例子: adb shell monkey -p com.tpshop.malls 10 (10表示10次随机事件)

    说明:模拟app操作的事件只有三类
        ACTION_DOWN:按下;
        ACTION_UP:抬起;
        ACTION_MOVE:移动
  2. -v : 表示日志的级别(-v 、 -v -v(工作中使用的日志级别)、 -v -v -v)

    例子: adb shell monkey -p com.tpshop.malls -v -v 10 (-v -v表示日志级别为高级别, 10表示10次随机事件)

  3. --throttle 间隔时间间: 表示设置一个操作的间隔时间。(单位是ms)

    一个操作包含多个事件(点击是一个操作, 它是由 按下 和抬起 两个事件组成)

    adb shell monkey -p com.tpshop.malls --throttle 1000 -v -v 10 (对tpshop的每次操作,间隔时间为1s)

    强调:throttle间隔的是操作,而一个操作包含多个事件
    比如:
        1.触摸的操作,包含:1个"按下"事件 + 1个"抬起"事件
        2.滑动的操作,包含:1个"按下"事件 + 1个"移动"事件 + 1个"抬起"事件
  4. -s 伪随机数(整数):类似标记符,用来记录该次执行的随机事件。当下次再使用相同数字-- 标记符,就会执行相同的随机事件

    • 强调:每一次执行稳定性测试,该参数必填

      原因:如果执行随机事件出现异常,那么需要复现操作来定位问题

    adb shell monkey -p com.tpshop.malls -v -v --throttle 1000 -s X 10

  5. 日志收集:> 路径+存放日志名称.log

    • 说明:相同日志名称,会覆盖上一次收集到的日志信息(相当于删除文件,再创建文件,最后写入日志信息)

面试题

如果工作中要做8个小时的稳定性测试,需要如何进行设置?

  • 通过 throttle的间隔时间(1S)和 执行时间计算出来

  • 具体说明:

总结
APP稳定性测试什么时候做?
    
怎么做?
    
如何判断是否测试通过?
    
如何测试不通过,你会怎么办?
    

APP手机抓包


前置条件: 抓包的电脑和运行app的手机必须是在同一个局域网(电脑和手机连接的是同一个无线路由器)

当前两个主流抓包工具:Fiddler和Charles

  • 说明:Charles支持windows,mac,linux;Fiddler支持windows,在mac和linux使用需要很复杂的设置

    如果windows首选Fiddler,如果Mac只能选Charles

设置步骤
  1. 抓包工具中生成并导出证书

  2. 设置手机代理

  3. 将证书上传到手机中,并进行安装

易错点

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值