1. 辅助测试:charles抓包工具
1.1 Web端抓包配置
1.1.1 开启SSL代理
点击代理后,会弹出一个下拉选择框,选择SSL代理设置,在新弹框中点击加号
点击完加号以后,会出现一个弹框,弹框中写*.*,然后点完成
然后再点完成
1.1.2 电脑charles客户端下载SSL证书
点击帮助后,会弹出一个下拉选择框,选择SSL代理,在弹出的新菜单中选择安装charles根证书
弹出弹框如下:选择安装证书
默认为当前用户,点击下一步
然后选中将所有的证书都放入下列存储
然后点击浏览,会弹出以下弹框
在弹框中选择受信任的根证书颁发机构,点击确定
然后点击下一步
最后点完成。
弹出安全警告,选择是!
最后出现导入成功
1.1.3 验证是否成功
打开慕课网:www.imooc.com/
Charles中,出现如下页面,就成功了
1.2 安卓手机抓包配置
完成了Web端的抓包配置,再配置这个,不然没有安装SSL证书,直接安装移动端的也不成功。
1.2.1 安卓手机配置代理
注意:先按照流程走,但有可能不同的安卓手机访问路径会有所不同,如果有哪里不一样的,可以到网上搜索一下你手机的路径。
注意手机连接的Wifi必须与电脑连接的Wifi一致
1.2.2 开始
长按你的wifi连接图标
弹出wifi列表,点击你现在连接的wifi
这个时候会弹出手机里的wifi设置页面
点击设置后,一直向下滑动,有一个代理服务器的设置
点击这个代理服务器的设置,选择手动
接下来在电脑端的Charles上查看你的ip和端口号
查看IP的路径:帮助-->本地IP地址
查看端口号,如果没改的话,默认就是8888,具体查看路径是:代理-->代理设置
在你点击代理服务器的设置,选择手动之后,的输入框中
代理主机名写你的IP
代理服务器端口写你的端口
下图是我的设置
设置完之后,点击保存,电脑端会弹出一个是否允许连接的框,这里必须选允许
然后打开手机浏览器,访问地址:chls.pro/ssl
一个浏览器不行,就换一个浏览器。如果你的能访问到,那么直接安装证书就可以了。 如果你安装成功了,那就直接翻到文档的最后,验证一下。
在我写这个文档的时候,很遗憾,我遇到了问题,手机上访问不到chls.pro/ssl,这样就不能方便的安装证书了,所以我用了以下解决办法。
在电脑上导出 Charles 证书
访问路径:帮助->SSL代理->保存Charles根证书
这个时候把证书保存到你的本地路径,这里你需要注意,选择完路径以后,一定要自己手动输入一个名字,不然它就会把你路径中最后一个当成名字
找到这个文件,把它传输到你的手机上,我这里直接用的微信传过去的
在微信里点这个文件,下载下来,之后选择证书安装程序,点完之后如果让你安装你就直接安装
如果提示你不让你安装,你就把这个证书文件保存到手机的本地
然后从手机的设置里找到安全与隐私,然后选择CA证书(或者直接搜索CA证书)
选择仍然安装,输入你的密码,选择刚刚微信里保存出来的证书文件
到这里就成功了
1.2.3 验证
你用你手机的浏览器,打开:60.205.132.214:8090
如果电脑端的Charles出现了以下画面,就是成功了
1.3 苹果手机抓包配置
完成了Web端的抓包配置,再配置这个,不然没有安装SSL证书,直接安装移动端的也不成功。
1.3.1 苹果手机配置代理
注意手机连接的Wifi必须与电脑连接的Wifi一致
长按你的wifi连接图标,进入到无线局域网列表,点击无线局域网设置
弹出wifi列表,点击你现在连接的wifi
点击后,一直向下滑动,有一个配置代理的设置
点击这个配置代理的设置,选择手动
接下来在电脑端的Charles上查看你的ip和端口号
查看IP的路径:帮助-->本地IP地址
查看端口号,如果没改的话,默认就是8888,具体查看路径是:代理-->代理设置
在你点击代理服务器的设置,选择手动之后,的输入框中
代理主机名写你的IP
代理服务器端口写你的端口
下图是我的设置,然后点存储
设置完之后,点击保存,电脑端会弹出一个是否允许连接的框,这里必须选允许
然后打开手机浏览器,访问地址:chls.pro/ssl
一个浏览器不行,就换一个浏览器。如果你的能访问到,那么直接安装证书就可以了。
在 “设置”->“通用”->“VPN 与设备管理” 中找到并安装
然后从手机的设置里的关于本机->证书信任设置,完全信任你的证书
(说明:Charles Proxy才是,你看到的Proxyman是另外一款抓包软件的证书,不用好奇,但如果你想了解,可以等学习完Charles以后,下载下来看看,其实使用起来都差不多)
那就直接翻到文档的最后,验证一下。
在我写这个文档的时候,很遗憾,我遇到了问题,手机上访问不到chls.pro/ssl,这样就不能方便的安装证书了,所以我用了以下解决办法。
在电脑上导出 Charles 证书
访问路径:帮助->SSL代理->保存Charles根证书
这个时候把证书保存到你的本地路径,这里你需要注意,选择完路径以后,一定要自己手动输入一个名字,不然它就会把你路径中最后一个当成名字
找到这个文件,把它传输到你的手机上,我这里直接用的微信传过去的
在微信里点这个文件,下载下来,然后存储到文件
存储到我的iphone文件夹里,你存储到一个你能找到这个文件的文件夹
在 “设置”->“通用”->“VPN 与设备管理” 中找到并安装
然后从手机的设置里的关于本机->证书信任设置,完全信任你的证书
(说明:Charles Proxy才是,你看到的Proxyman是另外一款抓包软件的证书,不用好奇,但如果你想了解,可以等学习完Charles以后,下载下来看看,其实使用起来都差不多)
到这里就成功了
1.3.2 验证
你用你手机的浏览器,打开:60.205.132.214:8090
如果电脑端的Charles出现了以下画面,就是成功了
1.3.3 如果还是有问题
- 如果你的还是有问题,就通过邮件传输到手机上进行安装
- 如果再有问题,导出不了文件,你就通过这个链接下载到手机上www.charlesproxy.com/assets/lega…
1.3.4 如果还是有问题就用proxyman吧,这也是一个抓包工具,用法跟charles差不多
1.4 HTTP协议请求报文(请求头)
| 请求头名 | 核心含义 | 典型值 | 测试关注点 / 使用场景 |
|---|---|---|---|
| User-Agent | 客户端身份标识(设备 / 系统 / 应用版本) | 浏览器:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Chrome/120.0.0.0移动端 APP:Android/10 com.taobao.taobao/10.20.0 (iPhone; iOS 18.5) | 1. 验证服务端设备适配逻辑(移动端 / PC 端返回不同内容)2. 模拟不同客户端抓包测试3. 反爬 / 风控逻辑校验 |
| Host | 指定请求目标域名 + 端口(HTTP/1.1 必传) | api.xxx.com、www.baidu.com:8080 | 1. 验证虚拟主机逻辑(一台服务器多域名区分)2. 缺省 / 错误 Host 时的服务端响应(应返回 400/404) |
| Connection | 连接管理策略 | keep-alive(长连接)、close(短连接) | 1. 移动端长连接复用性测试2. 频繁建连对请求延迟的影响 |
| Accept | 客户端支持的响应数据格式(MIME) | application/json、text/html、image/*、*/* | 1. 响应格式与 Accept 的匹配性(如传 JSON 要求返回 HTML 则为 bug)2. 多格式支持性校验 |
| Accept-Encoding | 客户端支持的压缩方式 | gzip, deflate, br | 1. 弱网场景压缩有效性测试2. 压缩后数据无乱码校验3. 服务端对不同压缩方式的支持 |
| Accept-Language | 客户端偏好的语言类型(q 为权重) | zh-CN,zh;q=0.9,en;q=0.8 | 国际化 APP 语言适配测试(传对应语言需返回对应内容) |
| Referer | 请求来源页面 / 地址 | https://www.xxx.com/home | 1. 防盗链逻辑测试(如图片仅允许自家域名引用)2. 来源统计逻辑校验3. 直接访问时 Referer 为空的场景 |
| Cookie | 客户端携带的服务端下发的状态数据 | SESSIONID=abc123; user_id=10086; token=xxx | 1. 登录态保持测试(缺省 / 篡改 Cookie 是否返回 401)2. Cookie 过期时间合理性3. 多域名 Cookie 隔离性 |
| Content-Type | 请求体数据格式(带请求体请求必传) | application/json(接口主流)、application/x-www-form-urlencoded(表单)、multipart/form-data(文件上传) | 1. 格式与请求体的一致性(如传 JSON 头但传表单数据会解析失败)2. 文件上传必用 multipart/form-data 校验 |
| Content-Length | 请求体的字节大小 | 1024、2048 | 1. 服务端是否根据该值判断请求体完整性2. 分块传输(Transfer-Encoding: chunked)时无需传该头 |
| Authorization | 身份认证凭证(无状态鉴权主流) | Basic:Basic YWRtaW46MTIzNDU2Bearer:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... | 1. 鉴权核心测试(缺省 / 过期 / 篡改令牌返回 401)2. 不同认证方式的支持性 |
| Cache-Control | 客户端指定的缓存策略 | no-cache(协商缓存)、no-store(不缓存)、max-age=0(强制刷新) | 1. 缓存有效性测试(对应策略是否返回 304/200)2. 敏感请求(支付 / 登录)是否配置 no-store |
| If-None-Match | 协商缓存,携带服务端返回的 ETag 标识 | W/"123456abc" | 与 ETag 配合,验证协商缓存逻辑(标识未变返回 304) |
| If-Modified-Since | 协商缓存,携带资源最后修改时间 | Tue, 03 Feb 2026 08:00:00 GMT | 与 Last-Modified 配合,协商缓存逻辑校验 |
| Origin | 跨域请求的来源(协议 + 域名 + 端口) | https://www.xxx.com、http://localhost:3000 | 1. CORS 跨域校验(非允许 Origin 是否返回 403)2. 非跨域请求时 Origin 为空的场景 |
| X-Requested-With | 标识是否为 AJAX 异步请求 | XMLHttpRequest(异步)、空(同步 / 普通请求) | 验证服务端对异步 / 普通请求的不同响应逻辑(如 AJAX 返回 JSON,普通返回 HTML) |
| X-Forwarded-For (XFF) | 记录客户端真实 IP(经代理 / CDN 时) | 117.136.0.0, 10.0.0.1(第一个为真实 IP) | 1. 服务端是否能正确获取真实 IP2. IP 限流 / 地域校验逻辑测试 |
| Referer-Policy | Referer 头的传递规则(隐私保护) | same-origin(同域名携带)、no-referrer(不携带) | 移动端隐私合规测试,敏感请求(登录 / 支付)的 Referer 传递规则 |
| X-App-Version | 自定义头,APP 版本号 | 10.20.0、2.5.1 | 服务端版本兼容逻辑测试(不同版本返回不同内容 / 功能) |
| X-Channel | 自定义头,APP 下载渠道 | appstore、huawei、xiaomi、oppo | 渠道专属逻辑 / 渠道统计测试 |
| X-Device-Id | 自定义头,设备唯一标识 | 861234567890123、F2A3B4C5D6E7 | 设备绑定 / 风控校验 / 设备唯一性测试 |
| X-Network-Type | 自定义头,移动端网络类型 | 4G、5G、wifi、2G、weaknet | 服务端网络适配逻辑(如弱网返回低清图片 / 精简内容) |
| X-Token | 自定义头,业务私有鉴权令牌 | a1b2c3d4e5f6g7h8i9j0 | 业务专属鉴权逻辑测试(缺省 / 无效令牌的响应) |
1.5 HTTP协议响应报文(响应头)
| 响应头名 | 核心含义 | 典型值 | 测试关注点/使用场景 |
|---|---|---|---|
| Server | 服务端的服务器软件/中间件版本 | nginx/1.21.6、Apache/2.4.54、Tomcat/9.0.80 | 1. 验证服务端中间件版本是否符合部署要求;2. 高版本中间件兼容性测试;3. 避免暴露具体版本(减少安全风险,测试时需关注是否隐藏版本号) |
| Content-Type | 服务端返回的响应体数据格式(与请求头Accept对应) | application/json;charset=utf-8、text/html;charset=utf-8、image/jpeg | 1. 核心测试点:与请求头Accept匹配(如客户端要JSON,服务端返回HTML则为bug);2. 字符集校验(charset=utf-8避免中文乱码);3. 文件响应格式与实际文件类型一致 |
| Content-Length | 响应体的字节大小(告知客户端接收数据的总长度) | 1024、2048、5120 | 1. 验证响应体大小与该值一致(防止数据截断/多传);2. 分块传输(Transfer-Encoding: chunked)时,该头可省略;3. 大文件响应时长度准确性测试 |
| Content-Encoding | 服务端对响应体使用的压缩方式(与请求头Accept-Encoding对应) | gzip、br、deflate | 1. 验证压缩方式与客户端请求一致;2. 解压后响应体无乱码、数据完整;3. 弱网场景下压缩效率测试(减少流量消耗) |
| Connection | 服务端告知客户端的连接管理策略(与请求头Connection对应) | keep-alive(保持长连接)、close(关闭短连接) | 1. 移动端测试重点:长连接复用性(避免频繁建连导致延迟);2. 服务端与客户端连接策略一致性校验 |
| Date | 服务端发送响应的当前时间(GMT标准时间) | Tue, 03 Feb 2026 08:30:00 GMT | 1. 时间准确性校验(与当前GMT时间一致,避免时间偏差导致的缓存/鉴权问题);2. 跨时区场景下时间格式正确性 |
| Set-Cookie | 服务端向客户端下发Cookie(用于状态保持,与请求头Cookie对应) | SESSIONID=abc123; Path=/; HttpOnly; Max-Age=3600 | 1. 登录态测试核心:下发Cookie的名称、值、过期时间(Max-Age)合理性;2. HttpOnly(防止JS篡改)、Secure(仅HTTPS传输)等安全属性是否生效;3. Cookie路径(Path)、域名(Domain)隔离性 |
| Cache-Control | 服务端告知客户端的响应缓存策略(与请求头Cache-Control对应) | public(可公共缓存)、private(仅客户端缓存)、max-age=3600(缓存有效时间)、no-cache(需协商缓存)、no-store(不缓存) | 1. 缓存测试重点:不同策略下缓存是否生效(如max-age内是否返回304);2. 敏感接口(登录/支付)是否配置no-store(禁止缓存);3. 静态资源(图片/JS)缓存时间合理性 |
| ETag | 服务端为响应资源生成的唯一标识(协商缓存核心,与请求头If-None-Match对应) | W/"123456abc"、"789def012" | 1. 协商缓存逻辑测试:资源未修改时,客户端携带If-None-Match,服务端返回304;2. 资源修改后,ETag是否更新;3. 多节点部署时,同一资源ETag一致性 |
| Last-Modified | 响应资源的最后修改时间(协商缓存核心,与请求头If-Modified-Since对应) | Tue, 03 Feb 2026 08:00:00 GMT | 1. 与If-Modified-Since配合,验证协商缓存(时间未变返回304);2. 资源修改后,最后修改时间是否更新;3. 时间格式与Date头一致性 |
| Expires | 响应缓存的过期时间(GMT标准时间,优先级低于Cache-Control: max-age) | Tue, 03 Feb 2026 09:30:00 GMT | 1. 过期时间合理性(避免缓存过长/过短);2. 与max-age同时存在时,验证max-age优先生效;3. 过期后是否重新请求获取最新资源 |
| Access-Control-Allow-Origin | CORS跨域核心头,告知客户端允许跨域请求的来源(与请求头Origin对应) | https://www.xxx.com、*(允许所有来源,不推荐生产环境) | 1. 跨域测试重点:非允许Origin请求是否返回403;2. 允许的Origin是否准确(避免过度开放);3. Credentials模式下,不能使用* |
| Access-Control-Allow-Methods | CORS跨域头,告知客户端允许跨域请求的HTTP方法 | GET, POST, PUT, DELETE, OPTIONS | 1. 验证允许的方法与接口实际支持的方法一致;2. 预检请求(OPTIONS)中返回的方法是否完整;3. 禁止的方法是否无法跨域访问 |
| Access-Control-Allow-Headers | CORS跨域头,告知客户端允许跨域请求携带的自定义请求头 | Content-Type, Authorization, X-App-Version | 1. 测试自定义头(如X-App-Version)跨域时是否被允许;2. 预检请求中返回的允许头是否完整;3. 未允许的自定义头是否无法携带 |
| Access-Control-Allow-Credentials | CORS跨域头,告知客户端是否允许跨域请求携带Cookie/认证信息 | true(允许)、false(禁止,默认) | 1. 跨域带登录态测试:开启true时,客户端Cookie能否正常携带;2. 开启后,Access-Control-Allow-Origin不能为*;3. 禁止时,是否无法携带认证信息 |
| Location | 重定向核心头,告知客户端重定向的目标地址(配合3xx状态码使用) | https://www.xxx.com/new-page、/home | 1. 重定向测试:3xx状态码(301/302)是否配合该头返回;2. 重定向地址准确性(避免错跳/死循环);3. 重定向次数合理性(不超过5次) |
| WWW-Authenticate | 身份认证头,告知客户端需要的认证方式(配合401 Unauthorized状态码) | Basic realm="Please enter your username and password"、Bearer realm="API Token Required" | 1. 鉴权测试:未携带认证凭证时,是否返回该头+401;2. 认证方式与接口实际要求一致(如Basic/Bearer);3. 提示信息合理性 |
| Content-Disposition | 文件下载核心头,告知客户端文件名称和下载方式 | attachment; filename="test.pdf"、inline; filename="image.jpg" | 1. 文件下载测试:attachment(下载保存)、inline(在线预览)方式是否生效;2. 文件名准确性(含中文时是否乱码);3. 文件格式与文件名后缀一致 |
| X-Content-Type-Options | 安全头,禁止浏览器对响应内容进行MIME类型嗅探 | nosniff | 1. 安全测试重点:是否配置该头(防止MIME嗅探攻击);2. 配置后,浏览器是否严格按Content-Type解析内容 |
| X-XSS-Protection | 安全头,开启浏览器内置的XSS防护机制 | 1; mode=block(开启防护并阻止恶意内容) | 1. 安全测试:是否配置该头提升XSS防护能力;2. 模拟XSS攻击时,防护机制是否生效 |
| Strict-Transport-Security (HSTS) | 安全头,强制客户端使用HTTPS访问(防止HTTP劫持) | max-age=31536000; includeSubDomains(有效期1年,包含子域名) | 1. HTTPS测试:配置后,HTTP请求是否自动跳转HTTPS;2. max-age合理性(长期有效减少跳转);3. 子域名是否也强制HTTPS |
| X-Frame-Options | 安全头,防止页面被嵌入iframe(防止点击劫持攻击) | DENY(禁止嵌入)、SAMEORIGIN(仅允许同域名嵌入) | 1. 安全测试:是否配置该头防止点击劫持;2. 配置DENY后,是否无法被任何页面嵌入;3. 配置SAMEORIGIN后,同域名嵌入是否正常 |
| X-Response-Time | 自定义头,服务端处理本次请求的耗时(毫秒) | 50、120、300 | 1. 性能测试重点:接口响应耗时是否在合理范围(如移动端接口≤300ms);2. 高并发场景下耗时稳定性;3. 耗时异常时是否有优化空间 |
| X-Request-ID | 自定义头,请求唯一标识(用于链路追踪、日志排查) | a1b2c3d4-e5f6-7890-abcd-1234567890ab | 1. 日志排查测试:请求头与响应头的X-Request-ID是否一致;2. 异常请求时,能否通过该ID快速定位日志;3. 每个请求是否有唯一标识 |
1.6 HTTP协议响应报文(响应头)
| 响应头名 | 核心含义 | 典型值 | 测试关注点/使用场景 |
|---|---|---|---|
| Server | 服务端的服务器软件/中间件版本 | nginx/1.21.6、Apache/2.4.54、Tomcat/9.0.80 | 1. 验证服务端中间件版本是否符合部署要求;2. 高版本中间件兼容性测试;3. 避免暴露具体版本(减少安全风险,测试时需关注是否隐藏版本号) |
| Content-Type | 服务端返回的响应体数据格式(与请求头Accept对应) | application/json;charset=utf-8、text/html;charset=utf-8、image/jpeg | 1. 核心测试点:与请求头Accept匹配(如客户端要JSON,服务端返回HTML则为bug);2. 字符集校验(charset=utf-8避免中文乱码);3. 文件响应格式与实际文件类型一致 |
| Content-Length | 响应体的字节大小(告知客户端接收数据的总长度) | 1024、2048、5120 | 1. 验证响应体大小与该值一致(防止数据截断/多传);2. 分块传输(Transfer-Encoding: chunked)时,该头可省略;3. 大文件响应时长度准确性测试 |
| Content-Encoding | 服务端对响应体使用的压缩方式(与请求头Accept-Encoding对应) | gzip、br、deflate | 1. 验证压缩方式与客户端请求一致;2. 解压后响应体无乱码、数据完整;3. 弱网场景下压缩效率测试(减少流量消耗) |
| Connection | 服务端告知客户端的连接管理策略(与请求头Connection对应) | keep-alive(保持长连接)、close(关闭短连接) | 1. 移动端测试重点:长连接复用性(避免频繁建连导致延迟);2. 服务端与客户端连接策略一致性校验 |
| Date | 服务端发送响应的当前时间(GMT标准时间) | Tue, 03 Feb 2026 08:30:00 GMT | 1. 时间准确性校验(与当前GMT时间一致,避免时间偏差导致的缓存/鉴权问题);2. 跨时区场景下时间格式正确性 |
| Set-Cookie | 服务端向客户端下发Cookie(用于状态保持,与请求头Cookie对应) | SESSIONID=abc123; Path=/; HttpOnly; Max-Age=3600 | 1. 登录态测试核心:下发Cookie的名称、值、过期时间(Max-Age)合理性;2. HttpOnly(防止JS篡改)、Secure(仅HTTPS传输)等安全属性是否生效;3. Cookie路径(Path)、域名(Domain)隔离性 |
| Cache-Control | 服务端告知客户端的响应缓存策略(与请求头Cache-Control对应) | public(可公共缓存)、private(仅客户端缓存)、max-age=3600(缓存有效时间)、no-cache(需协商缓存)、no-store(不缓存) | 1. 缓存测试重点:不同策略下缓存是否生效(如max-age内是否返回304);2. 敏感接口(登录/支付)是否配置no-store(禁止缓存);3. 静态资源(图片/JS)缓存时间合理性 |
| ETag | 服务端为响应资源生成的唯一标识(协商缓存核心,与请求头If-None-Match对应) | W/"123456abc"、"789def012" | 1. 协商缓存逻辑测试:资源未修改时,客户端携带If-None-Match,服务端返回304;2. 资源修改后,ETag是否更新;3. 多节点部署时,同一资源ETag一致性 |
| Last-Modified | 响应资源的最后修改时间(协商缓存核心,与请求头If-Modified-Since对应) | Tue, 03 Feb 2026 08:00:00 GMT | 1. 与If-Modified-Since配合,验证协商缓存(时间未变返回304);2. 资源修改后,最后修改时间是否更新;3. 时间格式与Date头一致性 |
| Expires | 响应缓存的过期时间(GMT标准时间,优先级低于Cache-Control: max-age) | Tue, 03 Feb 2026 09:30:00 GMT | 1. 过期时间合理性(避免缓存过长/过短);2. 与max-age同时存在时,验证max-age优先生效;3. 过期后是否重新请求获取最新资源 |
| Access-Control-Allow-Origin | CORS跨域核心头,告知客户端允许跨域请求的来源(与请求头Origin对应) | https://www.xxx.com、*(允许所有来源,不推荐生产环境) | 1. 跨域测试重点:非允许Origin请求是否返回403;2. 允许的Origin是否准确(避免过度开放);3. Credentials模式下,不能使用* |
| Access-Control-Allow-Methods | CORS跨域头,告知客户端允许跨域请求的HTTP方法 | GET, POST, PUT, DELETE, OPTIONS | 1. 验证允许的方法与接口实际支持的方法一致;2. 预检请求(OPTIONS)中返回的方法是否完整;3. 禁止的方法是否无法跨域访问 |
| Access-Control-Allow-Headers | CORS跨域头,告知客户端允许跨域请求携带的自定义请求头 | Content-Type, Authorization, X-App-Version | 1. 测试自定义头(如X-App-Version)跨域时是否被允许;2. 预检请求中返回的允许头是否完整;3. 未允许的自定义头是否无法携带 |
| Access-Control-Allow-Credentials | CORS跨域头,告知客户端是否允许跨域请求携带Cookie/认证信息 | true(允许)、false(禁止,默认) | 1. 跨域带登录态测试:开启true时,客户端Cookie能否正常携带;2. 开启后,Access-Control-Allow-Origin不能为*;3. 禁止时,是否无法携带认证信息 |
| Location | 重定向核心头,告知客户端重定向的目标地址(配合3xx状态码使用) | https://www.xxx.com/new-page、/home | 1. 重定向测试:3xx状态码(301/302)是否配合该头返回;2. 重定向地址准确性(避免错跳/死循环);3. 重定向次数合理性(不超过5次) |
| WWW-Authenticate | 身份认证头,告知客户端需要的认证方式(配合401 Unauthorized状态码) | Basic realm="Please enter your username and password"、Bearer realm="API Token Required" | 1. 鉴权测试:未携带认证凭证时,是否返回该头+401;2. 认证方式与接口实际要求一致(如Basic/Bearer);3. 提示信息合理性 |
| Content-Disposition | 文件下载核心头,告知客户端文件名称和下载方式 | attachment; filename="test.pdf"、inline; filename="image.jpg" | 1. 文件下载测试:attachment(下载保存)、inline(在线预览)方式是否生效;2. 文件名准确性(含中文时是否乱码);3. 文件格式与文件名后缀一致 |
| X-Content-Type-Options | 安全头,禁止浏览器对响应内容进行MIME类型嗅探 | nosniff | 1. 安全测试重点:是否配置该头(防止MIME嗅探攻击);2. 配置后,浏览器是否严格按Content-Type解析内容 |
| X-XSS-Protection | 安全头,开启浏览器内置的XSS防护机制 | 1; mode=block(开启防护并阻止恶意内容) | 1. 安全测试:是否配置该头提升XSS防护能力;2. 模拟XSS攻击时,防护机制是否生效 |
| Strict-Transport-Security (HSTS) | 安全头,强制客户端使用HTTPS访问(防止HTTP劫持) | max-age=31536000; includeSubDomains(有效期1年,包含子域名) | 1. HTTPS测试:配置后,HTTP请求是否自动跳转HTTPS;2. max-age合理性(长期有效减少跳转);3. 子域名是否也强制HTTPS |
| X-Frame-Options | 安全头,防止页面被嵌入iframe(防止点击劫持攻击) | DENY(禁止嵌入)、SAMEORIGIN(仅允许同域名嵌入) | 1. 安全测试:是否配置该头防止点击劫持;2. 配置DENY后,是否无法被任何页面嵌入;3. 配置SAMEORIGIN后,同域名嵌入是否正常 |
| X-Response-Time | 自定义头,服务端处理本次请求的耗时(毫秒) | 50、120、300 | 1. 性能测试重点:接口响应耗时是否在合理范围(如移动端接口≤300ms);2. 高并发场景下耗时稳定性;3. 耗时异常时是否有优化空间 |
| X-Request-ID | 自定义头,请求唯一标识(用于链路追踪、日志排查) | a1b2c3d4-e5f6-7890-abcd-1234567890ab | 1. 日志排查测试:请求头与响应头的X-Request-ID是否一致;2. 异常请求时,能否通过该ID快速定位日志;3. 每个请求是否有唯一标识 |
2. 安卓调试历险记 :读懂 ADB 命令的作用
2.1 adb操作命令:文件传输与日志查看
2.2 ADB 文件传输(电脑↔手机)
2.2.1 电脑 → 手机:adb push
格式:adb push 电脑端文件/文件夹路径 手机端目标路径
关键:手机端路径优先用安卓通用内置存储路径/sdcard/(所有机型通用,可直接读写,比如/sdcard/Download/、/sdcard/DCIM/),无需记机型专属路径。
# 示例1:复制电脑单个文件到手机下载目录(Windows)
adb push D:\test.txt /sdcard/Download/
# 示例1:Mac/Linux版本
adb push /Users/xxx/Documents/test.txt /sdcard/Download/
# 复制完查看手机上有没有这个文件
adb shell ls /sdcard/Download
# 示例2:复制电脑整个文件夹到手机(比如电脑的Photo文件夹传到手机根目录)
adb push D:\Photo /sdcard/
2.2.2 手机 → 电脑:adb pull
格式:adb pull 手机端文件/文件夹路径 电脑端目标路径
关键:电脑端路径可写绝对路径(推荐,避免路径混乱)或相对路径(直接保存到终端当前工作目录)。
# 示例1:复制手机单个文件到电脑D盘(Windows)
adb pull /sdcard/Download/test.txt D:\Down
# 示例1:Mac/Linux版本(保存到用户桌面)
adb pull /sdcard/Download/test.txt /Users/xxx/Desktop/
# 示例2:复制手机整个文件夹到电脑(比如手机微信图片文件夹传到电脑)
adb pull /sdcard/WeChat/ D:\WeChat_Backup\
2.3 ADB 日志查看(adb logcat)
安卓设备的所有运行日志(应用崩溃、系统报错、应用调试信息、硬件状态)都会输出到日志缓冲区,adb logcat是查看这些日志的核心命令,开发调试/应用闪退排障/系统异常排查都靠它,重点掌握「实时查看/过滤日志/保存日志/清除缓存日志」4 个核心用法。
2.3.1 先懂日志基础:日志级别(快速定位错误)
安卓日志分5 个级别(优先级从高到低),过滤日志时会按级别筛选,重点关注E(错误)*和*W(警告)(排障核心),级别标识会显示在日志行最前面。
| 级别标识 | 级别名称 | 说明 | 适用场景 |
|---|---|---|---|
| V | Verbose | 详细日志(最低级) | 开发调试详细信息 |
| D | Debug | 调试日志 | 应用开发调试 |
| I | Info | 信息日志 | 系统 / 应用正常运行状态 |
| W | Warning | 警告日志 | 潜在问题(可能导致错误) |
| E | Error | 错误日志 | 应用崩溃 / 系统报错(排障核心) |
| F | Fatal | 致命错误 | 系统 / 应用严重崩溃(极少出现) |
2.3.2 核心用法(从基础到进阶,逐步升级)
2.3.3 基础用法:实时查看所有日志
直接输入命令,终端会实时刷新设备的所有日志(系统 + 所有应用),日志会持续输出,直到按Ctrl+C停止。
adb logcat
注意:默认日志输出量极大(每秒几十行),不建议直接用,仅适合快速验证日志功能是否正常,实际排障一定要加过滤。
2.3.4 实用核心:按日志级别过滤(只看错误 / 警告)
最常用的排障用法,只输出指定级别及更高优先级的日志,比如只看 ** 错误(E)** 日志(应用崩溃 / 闪退的关键信息都在这里)。
格式:adb logcat *:级别标识(*表示匹配所有标签)
# 示例1:只看【错误日志】(排障首选,过滤掉所有无关日志)
adb logcat *:E
# 示例2:看【警告+错误】日志(潜在问题+实际错误)
adb logcat *:W
# 示例3:看【信息+警告+错误】日志
adb logcat *:I
# 只看错误日志+显示精确时间(推荐!)
adb logcat -v time *:E
2.3.5 精准过滤:按应用包名过滤(只看指定应用日志)
排障时通常只关注单个应用的日志(比如微信闪退、某 APP 崩溃),按包名过滤是最精准的方式,需要先获取应用包名(之前讲过,快速回顾)。
2.3.6 获取应用包名
# Windows:模糊匹配关键词(比如查微信包名)
adb shell pm list packages | findstr wechat
# Mac/Linux:用grep替代findstr
adb shell pm list packages | grep wechat
输出示例:package:com.tencent.mm(com.tencent.mm就是包名)。
2.3.7 按包名过滤日志
格式:adb logcat --pid=$(adb shell pidof -s 应用包名)
pidof -s 包名会获取应用的进程 ID,--pid表示只显示该进程的日志,精准定位单个应用。
# 示例:只看微信的所有日志(Windows/Mac/Linux通用)
# 先查看目标应用的进程号
adb shell pidof -s com.tencent.mm
# 再查看具体的日志
adb logcat --pid=进程号
# power shell中可用
adb logcat --pid=$(adb shell pidof -s com.tencent.mm)
2.3.8 保存日志到电脑(离线分析 / 分享排障)
实时日志无法回溯,遇到偶发的闪退 / 异常时,可将日志保存到电脑本地文件,后续离线分析,支持txt/log等格式。
格式:adb logcat [过滤条件] > 电脑端日志保存路径
# 示例1:保存【所有错误日志】到电脑D盘,命名为error.log(Windows)
adb logcat *:E > D:\error.log
# 示例1:Mac/Linux版本
adb logcat *:E > /Users/xxx/Desktop/error.log
# 示例2:保存【微信的所有日志】到电脑,离线分析闪退问题
adb logcat --pid=$(adb shell pidof -s com.tencent.mm) > D:\wechat_log.log
3. 安卓性能监测:监控指标的理解与监控工具的应用
3.1 Anaconda包管理系统安装
3.1.1 获取下载文件
3.1.2 从课程软件获取安装包
直接从我提供的“上课所需软件”中,找到anaconda安装包文件夹,里边一共包含了2个版本
- windows : Anaconda3-2025.12-1-Windows-x86_64.exe
- MacOS : Anaconda3-2025.12-1-MacOSX-arm64.pkg
根据自己的电脑型号进行选择
3.1.3 从官网下载安装包
下载地址:www.anaconda.com/download/su…
3.1.4 开始安装
双击安装文件后,出现第一个窗口,点击next
点击 I Agree
点击next
你可以修改路径,如果要修改一定不能有中文,也可以不改
点击next
点击Install
等待即可
然后点击next
点击Finish
3.2 SoloX监控工具安装-监控安卓手机
3.2.1 启动anaconda
点击Environments
创建虚拟环境
我的虚拟环境名字:solox_env_python10
Python版本:3.10(切记这个不要选最新版本,最新版本兼容solox不好)
填好后,点击Create
等待即可
安装好以后,点击那个绿色的箭头按钮,在弹出框中选择Open Terminal
在弹出框中输入以下命令
# 直接安装,对网络有要求,如果有VPN一点问题没有,如果没有可能会有点慢
pip install solox
# 安装Solox(加国内源加速)这个命令下载速度会比较快,我用的这个
pip install solox -i https://mirrors.aliyun.com/pypi/simple/
安装adbutils,这个是负责连到手机上的
# 安装adbutils(Solox依赖)
pip install adbutils -i https://mirrors.aliyun.com/pypi/simple/
把你的手机连接好电脑,然后再启动solox
启动solox,输入命令
solox
如果输入solox没有启动起来,就输入下边的命令
python -m solox
这个时候启动solox应该是启动起来了,但是可能连接不上你的手机,如果是这种情况,你在命令行中输入一下adb,看看返回是什么
如果提示:'adb' 不是内部或外部命令,也不是可运行的程序或批处理文件。如下图:
我们需要把adb复制到anaconda的环境里边
先找到你的adb工具解压路径,例如:C:\Users\Administrator\Downloads\platform-tools
然后复制下图的三个文件
然后找到虚拟环境管理的文件,查看你创建的虚拟环境存在哪个路径
复制打开的文件路径,然后再双击此电脑,打开一个新的文件夹,输入虚拟环境存储的路径
进入到Scripts文件夹,然后把上面复制的三个文件粘贴进去
然后再开启一个新的虚拟环境的命令行工具,输入solox的启动命令
python -m solox
没有任何报错的启动了solox,并且连接上了你的手机,就证明成功了,如下图:
然后可以随便先选择一个app,监控一下试试
- 选择要监控的app
- 点击右上角的start
到这里solox app性能监控工具就安装完成了。
3.3 SoloX监控工具安装-监控苹果手机
确保监控安卓手机那里都已经正常
solox已经正确启动了,然后再进行下面的步骤
在微软商店中下载iTunes
等待安装
在 iPhone 上点击 “信任此电脑”,输入锁屏密码确认。
打开 iTunes,确认能看到 iPhone 图标,说明驱动与信任正常。
打开 iTunes的时候,如果提示更新驱动,就更新
在激活的虚拟环境中执行pip install pymobiledevice3;
等待安装完成
执行pymobiledevice3 version验证
pymobiledevice3
或
pymobiledevice3 version
两个命令都可以
solox页面监控如下,能看到信息就代表成功了。但用windows监控iOS效果还是不太好,就进行学习使用吧,iOS还是与Mac更配,而且苹果公司也有自己一套原生的东西。
3.4 adb性能监控:TOP命令解析
3.4.1 基础输出格式
执行 adb shell top 后,终端会实时刷新系统进程的性能数据,核心分为头部汇总信息和进程列表信息两部分
3.4.2 头部汇总信息(整机级指标)
这部分是设备整体的资源状态,Solox 中的 total CPU 就是基于这部分计算的:
| 行标识 | 字段 | 含义 | 补充说明 |
|---|---|---|---|
| Tasks | total | 总进程数 | 包含所有状态的进程 |
| Tasks | running | 正在运行的进程数 | 占用 CPU 执行的进程 |
| Tasks | sleeping | 休眠进程数 | 等待资源 / 事件的进程(大部分应用处于此状态) |
| Tasks | stopped | 停止的进程数 | 被暂停的进程(如后台冻结) |
| Tasks | zombie | 僵尸进程数 | 已终止但未释放资源的进程(正常应为 0) |
| Mem | total | 物理内存总大小 | 设备总 RAM 容量 |
| Mem | used | 已使用内存 | 所有进程占用的内存总和 |
| Mem | free | 空闲内存 | 未被使用的内存(安卓中通常较少,因系统会缓存) |
| Mem | buffers | 缓冲区内存 | 系统用于磁盘 / 网络缓存的内存 |
| Swap | total/used/free | 交换分区大小 / 已用 / 空闲 | 相当于虚拟内存,used 过高说明物理内存不足 |
| CPU | us (user) | 用户空间 CPU 占比 | 应用进程(如你的 APP)占用的 CPU 百分比 |
| CPU | sys (system) | 内核空间 CPU 占比 | 系统进程 / 内核操作(如驱动、调度)占用的 CPU |
| CPU | ni (nice) | 低优先级进程 CPU 占比 | 调整过优先级的进程占用的 CPU |
| CPU | id (idle) | 空闲 CPU 占比 | 100% - (us+sy+ni+wa+hi+si+st),越高说明设备越闲 |
| CPU | iow (iowait) | IO 等待 CPU 占比 | 等待磁盘 / 网络 IO 完成的 CPU 空闲时间(过高说明 IO 瓶颈) |
| CPU | irq (hardware irq) | 硬中断 CPU 占比 | 硬件中断(如按键、传感器)占用的 CPU |
| CPU | sirq (software irq) | 软中断 CPU 占比 | 软件中断(如进程调度)占用的 CPU |
| CPU | host | 当前进程 / 整机占用的 “宿主 CPU” 时间占比(或 “主机 CPU 使用率”) | 仅出现在多核 / 多处理器设备或虚拟机 / 容器化环境有 |
3.4.3 进程列表信息(进程级指标)
这部分是单个进程的详细数据,Solox 中的 app CPU 就是提取被测 APP 进程的这部分数据:
| 列名 | 全称 / 含义 | 补充说明(结合 Solox 场景) |
|---|---|---|
| PID | Process ID | 进程唯一标识,Solox 通过 PID 定位被测 APP 进程 |
| USER | 进程所属用户 | 如 u0_a123 是普通应用用户,root 是系统用户 |
| PR | Priority | 进程优先级(数值越小优先级越高) |
| NI | Nice 值 | 优先级调整值(范围 -20~19,负值优先级更高) |
| VIRT | Virtual Memory | 进程占用的虚拟内存(包含未实际使用的内存,参考意义小) |
| RES | Resident Memory | 进程实际占用的物理内存(常驻内存),Solox 采集的核心内存指标 |
| SHR | Shared Memory | 进程共享的内存(如与其他进程共享的库文件内存) |
| S | 进程状态 | S = 休眠 / R = 运行 / Z = 僵尸 / D = 不可中断休眠 |
| %CPU | CPU 使用率 | 该进程占用的 CPU 百分比(多核设备可能超过 100%) |
| %MEM | 内存使用率 | 该进程 RES 占总物理内存的百分比 |
| TIME+ | 累计 CPU 时间 | 进程从启动到现在占用的总 CPU 时间(如 10:05.23 表示 10 分 5.23 秒) |
| ARGS | 进程名称 / 命令 | 通常是应用包名(如 com.example.app),Solox 据此匹配被测 APP |
3.4.4 常用参数与精准采集(适配 Solox 场景)
日常分析或 Solox 底层采集时,会用 top 的参数过滤数据,常用的有:
# 仅显示指定 PID 的进程(Solox 采集被测 APP CPU 时用)
adb shell top -p <PID> -d 1 -n 10 # -d 1:1秒刷新一次;-n 10:采集10次后退出
# 仅显示 CPU 相关列,简化输出
adb shell top -o pid,%cpu,args -d 1
# 按 CPU 使用率排序(默认就是)
adb shell top -s cpu
# 按内存使用率排序
adb shell top -s mem
3.4.5 总结
adb shell top的指标分整机汇总(us/sy/id 等)和进程明细(% CPU/% MEM 等),Solox 分别用这两部分计算total CPU和app CPU;- 核心关注字段:整机级看
%us/%sy/%id,进程级看PID/%CPU/%MEM/ARGS - Solox 采集 APP CPU 时,会先通过包名找到对应 PID,再用
top -p <PID>提取该进程的%CPU作为app CPU,同时提取整机%us+%sy作为total CPU。
3.5 adb性能监控:帧率、卡顿帧数与GPU
3.5.1 监控命令
dumpsys gfxinfo 本质是输出指定应用(% PACKAGE%)的图形渲染统计数据,所有字段围绕「UI 绘制流程、帧率、卡顿、内存占用」展开,输出结构固定,以下是完整拆解(按输出顺序):
例如:
adb shell dumpsys gfxinfo com.tencent.wemeet.app
3.5.2 基础信息模块(开头)
这部分是统计的基础元数据,无性能意义,但能确认统计范围:
| 字段 | 示例值 | 含义 |
|---|---|---|
Stats since: | 246045907090929ns | 统计数据的起始时间(单位:纳秒),用于计算帧率(总帧数 ÷ 统计时长) |
Graphics stats for pid XXXX [com.tencent.wemeet.app] | - | 明确当前统计的是哪个进程(PID)、哪个应用(包名),避免查错应用 |
3.5.3 核心性能指标模块(重点关注)
这是你最关心的 FPS、卡顿相关字段,直接反映流畅度:
| 字段 | 示例值 | 含义 & 健康判断 |
|---|---|---|
Total frames rendered | 1633 | 统计周期内应用总共渲染的帧数(核心基数,用于计算 FPS) |
Janky frames | 102 (6.25%) | 卡顿帧数:单帧渲染耗时超过「屏幕刷新率阈值」的帧数(60fps=16.67ms,90fps=11.11ms),百分比 <5% 为流畅,5%-10% 轻度卡顿,>10% 严重卡顿 |
Janky frames (legacy) | 127 (7.78%) | 旧版卡顿统计标准(兼容安卓低版本),参考即可,以非 legacy 值为准 |
50th percentile | 5ms | 50% 的帧渲染耗时≤该值(中位数,反映「大部分帧」的流畅度,越低越好) |
90th percentile | 8ms | 90% 的帧渲染耗时≤该值(反映「绝大多数帧」的流畅度,重点关注,≤16ms 为正常) |
95th percentile | 16ms | 95% 的帧渲染耗时≤该值(接近卡顿阈值,超过 16ms 说明有少量卡顿帧) |
99th percentile | 69ms | 99% 的帧渲染耗时≤该值(反映「极端卡顿帧」,越高说明偶尔卡顿越严重) |
Number Missed Vsync | 62 | 错过垂直同步信号的次数(屏幕刷新时没提交画面,直接导致画面撕裂 / 卡顿) |
Number High input latency | 1186 | 输入延迟高的次数(点击 / 滑动等操作响应慢,数值越高体验越差) |
Number Slow UI thread | 79 | UI 线程卡顿次数(UI 线程负责界面绘制,卡顿会直接导致操作无响应) |
Number Slow bitmap uploads | 0 | 位图(图片)上传到 GPU 耗时慢的次数(0 表示图片渲染无问题) |
Number Slow issue draw commands | 24 | 绘制命令执行慢的次数(部分界面元素绘制耗时高) |
Number Frame deadline missed | 102 | 错过帧截止时间的次数(和 Janky frames 数值一致,是卡顿帧的官方定义) |
3.5.4 帧耗时分布直方图(HISTOGRAM)
这部分是帧耗时的「明细分布」,能看出卡顿帧的集中区间:
HISTOGRAM: 5ms=1296 6ms=58 7ms=85 8ms=36 9ms=12
- 格式:
耗时ms=帧数,比如「5ms=1296」表示有 1296 帧的渲染耗时仅 5ms; - 解读:数值越集中在低耗时区间(如 5ms、6ms),说明流畅度越好;高耗时区间(如 69ms)的帧数越少越好。
3.5.5 GPU 相关模块
这部分反映 GPU 的渲染性能,你之前监控腾讯会议时 GPU 无瓶颈,参考即可:
| 字段 | 示例值 | 含义 |
|---|---|---|
50th gpu percentile | 2ms | 50% 的 GPU 渲染耗时≤该值(GPU 处理速度,越低越好) |
90th/95th/99th gpu percentile | 3ms/6ms/10ms | 对应比例的 GPU 帧耗时,≤16ms 为正常 |
GPU HISTOGRAM | 1ms=795 2ms=633... | GPU 帧耗时的分布,和 CPU 侧直方图逻辑一致 |
Pipeline | Skia (Vulkan) | 应用使用的渲染管线(Skia 是安卓默认渲染引擎,Vulkan 是高性能 API,无问题) |
3.5.6 内存缓存模块
这部分反映渲染相关的内存占用,判断是否因内存不足导致卡顿:
| 字段 | 示例值 | 含义 |
|---|---|---|
Memory policy | Max surface area: 2527200 | 渲染表面的最大面积(内存限制,无溢出则正常) |
Max resource usage | 121.31MB (x48) | GPU 资源的最大占用量(远低于手机显存上限则无问题) |
Total CPU memory usage | 509.05 KB | CPU 侧渲染缓存(如字体、小控件)的总占用,数值小则无压力 |
Total GPU memory usage | 13.34 MB | GPU 侧渲染缓存(如纹理、图片)的总占用,≤100MB 为正常 |
GraphicBufferAllocator buffers | 4800.00 KiB | 图形缓冲区(CPU/GPU 数据中转站)的占用,数值小则无瓶颈 |
3.5.7 UI 视图 / 渲染节点模块
这部分反映应用 UI 元素的负载,是你之前找到腾讯会议卡顿的核心原因:
| 字段 | 示例值 | 含义 |
|---|---|---|
Total ViewRootImpl | 4 | 应用的视图根节点数量(正常范围 1-5,过多可能导致内存泄漏) |
Total attached Views | 1242 | 绑定的 UI 视图数量(数值过高会导致 UI 线程绘制耗时,腾讯会议这里 1242 是异常值) |
Total RenderNode | 1667.26 kB (used) / 2134.90 kB (capacity) | 渲染节点的占用 / 总容量(占用率≤80% 为正常,仅 View 数量多会导致处理慢) |
3.5.8 其他辅助模块(参考即可)
| 字段 | 示例值 | 含义 |
|---|---|---|
Total STB frames rendered | 3 | SurfaceTextureBuffer(视频帧缓冲区)渲染帧数,会议非视频播放时数值低 |
ProcessConfig | sw360dp w360dp h702dp 480dpi | 应用运行的屏幕参数(分辨率、dpi),无适配问题则正常 |
Imported gralloc buffers | size:1800.00KiB, w/h:738x1600 | 导入的视频缓冲区规格(YUV 格式,会议画面采集用,正常则无问题) |
3.5.9 总结
dumpsys gfxinfo %PACKAGE% 输出字段的核心逻辑:
- 核心关注:
Total frames rendered(算 FPS)、Janky frames(卡顿率)、99th percentile(极端卡顿)、Total attached Views(UI 负载); - 辅助判断:GPU 百分位(看 GPU 是否瓶颈)、内存占用(看是否内存不足);
- 无关参考:Stats since、ProcessConfig 等(仅确认统计范围)。
3.5.10 只获取FPS和Jank的批处理脚本
找一个地方创建一个文件,名称为:monitor_fps_jank.bat
将以下内容直接粘贴进去
@echo off
chcp 65001 >nul
set "PACKAGE=com.tencent.wemeet.app" :: 替换为目标应用包名
echo 开始监控 %PACKAGE% 的FPS和Jank...
echo ======================================
:LOOP
:: 重置统计数据(避免管道中断,单独执行)
adb shell dumpsys gfxinfo %PACKAGE% reset > nul
:: 等待间隔时间
timeout /t 2 /nobreak > nul
:: 提取总帧数(用grep替代findstr,适配安卓shell)
for /f "tokens=4 delims= " %%a in ('adb shell "dumpsys gfxinfo %PACKAGE% ^| grep 'Total frames rendered'"') do set TOTAL_FRAMES=%%a
:: 提取卡顿帧数和卡顿率
for /f "tokens=3,4 delims= " %%b in ('adb shell "dumpsys gfxinfo %PACKAGE% ^| grep 'Janky frames'"') do set JANK_FRAMES=%%b & set JANK_RATE=%%c
:: 输出核心指标
echo 时间: %time%
echo 总帧数: %TOTAL_FRAMES%
echo 卡顿帧数: %JANK_FRAMES% %JANK_RATE%
echo --------------------------------------
goto LOOP
4. 项目总结与补充:测试报告与版本管理
4.1 慕课网V8.7.4版本--测试报告或项目报告
这个报告的核心问题是
1、说明执行过程
2、如果有风险发生,阐述风险发生原因以及自己如何进行风险规避和处理的
3、说明测试版本,这个需要有记录
4、测试结论
4.2 引言
4.2.1 项目背景
慕课网(imooc.com)是北京奥鹏远程教育中心有限公司运营的国内领先IT技能在线教育平台,自2013年8月上线以来,始终专注于为互联网从业者和爱好者提供实用、前沿的技术培训。
平台以“赋能每一位有梦想的开发者”为使命,汇聚了近1800位来自阿里云、百度、腾讯等一线大厂的技术专家,打造了超过3000门原创课程,覆盖前端开发、Java、Python、Go、人工智能、大数据、移动端等60类主流技术方向,服务用户已超过2400万。
慕课网的核心优势在于其实战导向的教学内容。课程设计紧密围绕真实工作场景,通过大量案例教学,帮助学习者实现从技能提升到岗位晋升的能力闭环。平台自主研发的App是国内首个IT技能学习类应用,曾多次荣登App Store精品推荐榜首,为用户提供便捷、高效的移动端学习体验。
在行业认可方面,慕课网于2020年入选人社部“互联网+职业技能培训计划”推荐平台,并曾荣获新浪网“最具口碑影响力在线教育机构”、腾讯网“年度影响力在线教育品牌”等权威奖项,是企业IT团队培训的信赖之选.
4.2.2 术语定义
| 术语名称 | 解释说明 |
|---|---|
| Bug | 指软件缺陷 |
4.2.3 参考资料
- 测试计划书
- 测试用例文档
- ......
4.3 测试概要
4.3.1 系统简介及测试责任人
系统说明:
被测系统为慕课网提测V8.7.4版本,实现了体系课、实战课、免费课、手记、专栏等多个模块功能
测试模块及测试责任人如下:
| 功能模块 | 功能点 | 描述 | 测试责任人 |
|---|---|---|---|
| 首页 | 课程展示 | 展示全站热门课程 | 大周 |
| 免费课 | 全部 | 全是全部的免费内容,包括全部方向的课程、项目实战 | 大周 |
| 免费课 | 展示全部方向的免费课程 | 大周 | |
| 项目实战 | 展示全部方向的项目实战 | 大周 | |
| 实战课 | 零基础就业 | 展示全部方向以就业导向的零基础课程 | 大周 |
| 职场提升 | 展示全部的进阶类课程 | 大周 | |
| 体系课 | 全部体系课 | 展示全部零基础和职场提升的体系类课程 | 大周 |
| 手记 | 全部 | 展示全部手记分类,如云计算、大数据、职场生活等等 | 大周 |
系统版本:
V1.0
4.3.2 测试环境
服务器硬件环境:
| 配置 | 数量 |
|---|---|
| 16核CPU、32G内存、1T硬盘 | 1 |
软件环境
| 软件名称 | 版本 |
|---|---|
| MySQL | 8 |
| Java | 8 |
4.3.3 测试执行过程时间点
| 编号 | 任务名称 | 开始时间 | 结束时间 |
|---|---|---|---|
| 1 | 测试点梳理 | 1月1日 | 1月1日 |
| 2 | 测试用例设计 | 1月2日 | 1月3日 |
| 3 | 冒烟测试 | 1月3日 | 1月4日 |
| 4 | 第一轮测试 | 1月5日 | 1月6日 |
| 5 | 二轮测试 | 1月7日 | 1月8日 |
| 6 | 三轮测试 | 1月9日 | 1月9日 |
| 7 | 预发环境测试 | 1月10日 | 1月10日 |
| 8 | 灰度环境测试 | 1月11日 | 1月11日 |
| 9 | 线上回归测试 | 1月12日 | 1月12日 |
4.3.4 过程产出物
- 业务流程思维导图
- 慕课网测试用例设计
- ......
4.3.5 测试类型
【功能测试】
- 测试符合产品需求的功能验证
【兼容性测试】
-
兼容手机版本:
华为 Mate 80 Pro
iPhone 16
小米 16
OPPO Reno12
vivo X200S
荣耀 Magic7
iPhone 16 Pro
华为 Pura 90
小米 Redmi Note 14
OPPO A5
【新老版本验证】
- 验证新版本功能对老版本不冲突
【多端一致性】
- 验证web、iOS、Android,三端功能及数据展示一致
【埋点测试】
- 验证基于用户行为的埋点数据上报及时且准确
4.4 测试结果
4.4.1 bug汇总
这里要写一些按照严重程度汇总Bug的情况,是所有你发现的Bug都整理一下,最好弄一个图,看看是饼图好,还是柱状图好
4.4.2 Bug所在模块分布
| 功能模块 | 功能点 | Bug数量 |
|---|---|---|
| 首页 | 新上好课 | 2 |
| 免费课 | 全部 | 3 |
| 免费课 | 0 | |
| 项目实战 | 2 | |
| 实战课 | 方向 | 2 |
| 分类 | 1 | |
| 体系课 | 全部 | 2 |
| 手记 | 全部 | 1 |
4.4.3 遗留Bug说明
| Bug编号 | 处理意见 | Bug链接 |
|---|---|---|
| xxx | 暂不处理 | xxxx |
4.5 测试结论
4.5.1 结论
测试场景覆盖率达100%
Bug修复率为98%
遗留Bug不影响主要功能和用户的使用
**建议:**测试通过可以上线
(如果这里有风险,则请领导审批和下结论,是否通过上线)
4.5.2 建议
由于....情况,测试执行过程中出现了时间风险,
以后为避免时间风险,测试可更早介入,提前把控软件的质量