三、掌握移动端测试特性与方法 & 慕课网APP全流程测试实战

1 阅读46分钟

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 如果还是有问题

  1. 如果你的还是有问题,就通过邮件传输到手机上进行安装
  2. 如果再有问题,导出不了文件,你就通过这个链接下载到手机上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.comwww.baidu.com:80801. 验证虚拟主机逻辑(一台服务器多域名区分)2. 缺省 / 错误 Host 时的服务端响应(应返回 400/404)
Connection连接管理策略keep-alive(长连接)、close(短连接)1. 移动端长连接复用性测试2. 频繁建连对请求延迟的影响
Accept客户端支持的响应数据格式(MIME)application/jsontext/htmlimage/**/*1. 响应格式与 Accept 的匹配性(如传 JSON 要求返回 HTML 则为 bug)2. 多格式支持性校验
Accept-Encoding客户端支持的压缩方式gzip, deflate, br1. 弱网场景压缩有效性测试2. 压缩后数据无乱码校验3. 服务端对不同压缩方式的支持
Accept-Language客户端偏好的语言类型(q 为权重)zh-CN,zh;q=0.9,en;q=0.8国际化 APP 语言适配测试(传对应语言需返回对应内容)
Referer请求来源页面 / 地址https://www.xxx.com/home1. 防盗链逻辑测试(如图片仅允许自家域名引用)2. 来源统计逻辑校验3. 直接访问时 Referer 为空的场景
Cookie客户端携带的服务端下发的状态数据SESSIONID=abc123; user_id=10086; token=xxx1. 登录态保持测试(缺省 / 篡改 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请求体的字节大小102420481. 服务端是否根据该值判断请求体完整性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.comhttp://localhost:30001. 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-PolicyReferer 头的传递规则(隐私保护)same-origin(同域名携带)、no-referrer(不携带)移动端隐私合规测试,敏感请求(登录 / 支付)的 Referer 传递规则
X-App-Version自定义头,APP 版本号10.20.02.5.1服务端版本兼容逻辑测试(不同版本返回不同内容 / 功能)
X-Channel自定义头,APP 下载渠道appstorehuaweixiaomioppo渠道专属逻辑 / 渠道统计测试
X-Device-Id自定义头,设备唯一标识861234567890123F2A3B4C5D6E7设备绑定 / 风控校验 / 设备唯一性测试
X-Network-Type自定义头,移动端网络类型4G5Gwifi2Gweaknet服务端网络适配逻辑(如弱网返回低清图片 / 精简内容)
X-Token自定义头,业务私有鉴权令牌a1b2c3d4e5f6g7h8i9j0业务专属鉴权逻辑测试(缺省 / 无效令牌的响应)

1.5 HTTP协议响应报文(响应头)

响应头名核心含义典型值测试关注点/使用场景
Server服务端的服务器软件/中间件版本nginx/1.21.6Apache/2.4.54Tomcat/9.0.801. 验证服务端中间件版本是否符合部署要求;2. 高版本中间件兼容性测试;3. 避免暴露具体版本(减少安全风险,测试时需关注是否隐藏版本号)
Content-Type服务端返回的响应体数据格式(与请求头Accept对应)application/json;charset=utf-8text/html;charset=utf-8image/jpeg1. 核心测试点:与请求头Accept匹配(如客户端要JSON,服务端返回HTML则为bug);2. 字符集校验(charset=utf-8避免中文乱码);3. 文件响应格式与实际文件类型一致
Content-Length响应体的字节大小(告知客户端接收数据的总长度)1024204851201. 验证响应体大小与该值一致(防止数据截断/多传);2. 分块传输(Transfer-Encoding: chunked)时,该头可省略;3. 大文件响应时长度准确性测试
Content-Encoding服务端对响应体使用的压缩方式(与请求头Accept-Encoding对应)gzipbrdeflate1. 验证压缩方式与客户端请求一致;2. 解压后响应体无乱码、数据完整;3. 弱网场景下压缩效率测试(减少流量消耗)
Connection服务端告知客户端的连接管理策略(与请求头Connection对应)keep-alive(保持长连接)、close(关闭短连接)1. 移动端测试重点:长连接复用性(避免频繁建连导致延迟);2. 服务端与客户端连接策略一致性校验
Date服务端发送响应的当前时间(GMT标准时间)Tue, 03 Feb 2026 08:30:00 GMT1. 时间准确性校验(与当前GMT时间一致,避免时间偏差导致的缓存/鉴权问题);2. 跨时区场景下时间格式正确性
Set-Cookie服务端向客户端下发Cookie(用于状态保持,与请求头Cookie对应)SESSIONID=abc123; Path=/; HttpOnly; Max-Age=36001. 登录态测试核心:下发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 GMT1. 与If-Modified-Since配合,验证协商缓存(时间未变返回304);2. 资源修改后,最后修改时间是否更新;3. 时间格式与Date头一致性
Expires响应缓存的过期时间(GMT标准时间,优先级低于Cache-Control: max-age)Tue, 03 Feb 2026 09:30:00 GMT1. 过期时间合理性(避免缓存过长/过短);2. 与max-age同时存在时,验证max-age优先生效;3. 过期后是否重新请求获取最新资源
Access-Control-Allow-OriginCORS跨域核心头,告知客户端允许跨域请求的来源(与请求头Origin对应)https://www.xxx.com*(允许所有来源,不推荐生产环境)1. 跨域测试重点:非允许Origin请求是否返回403;2. 允许的Origin是否准确(避免过度开放);3. Credentials模式下,不能使用*
Access-Control-Allow-MethodsCORS跨域头,告知客户端允许跨域请求的HTTP方法GET, POST, PUT, DELETE, OPTIONS1. 验证允许的方法与接口实际支持的方法一致;2. 预检请求(OPTIONS)中返回的方法是否完整;3. 禁止的方法是否无法跨域访问
Access-Control-Allow-HeadersCORS跨域头,告知客户端允许跨域请求携带的自定义请求头Content-Type, Authorization, X-App-Version1. 测试自定义头(如X-App-Version)跨域时是否被允许;2. 预检请求中返回的允许头是否完整;3. 未允许的自定义头是否无法携带
Access-Control-Allow-CredentialsCORS跨域头,告知客户端是否允许跨域请求携带Cookie/认证信息true(允许)、false(禁止,默认)1. 跨域带登录态测试:开启true时,客户端Cookie能否正常携带;2. 开启后,Access-Control-Allow-Origin不能为*;3. 禁止时,是否无法携带认证信息
Location重定向核心头,告知客户端重定向的目标地址(配合3xx状态码使用)https://www.xxx.com/new-page/home1. 重定向测试: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类型嗅探nosniff1. 安全测试重点:是否配置该头(防止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自定义头,服务端处理本次请求的耗时(毫秒)501203001. 性能测试重点:接口响应耗时是否在合理范围(如移动端接口≤300ms);2. 高并发场景下耗时稳定性;3. 耗时异常时是否有优化空间
X-Request-ID自定义头,请求唯一标识(用于链路追踪、日志排查)a1b2c3d4-e5f6-7890-abcd-1234567890ab1. 日志排查测试:请求头与响应头的X-Request-ID是否一致;2. 异常请求时,能否通过该ID快速定位日志;3. 每个请求是否有唯一标识

1.6 HTTP协议响应报文(响应头)

响应头名核心含义典型值测试关注点/使用场景
Server服务端的服务器软件/中间件版本nginx/1.21.6Apache/2.4.54Tomcat/9.0.801. 验证服务端中间件版本是否符合部署要求;2. 高版本中间件兼容性测试;3. 避免暴露具体版本(减少安全风险,测试时需关注是否隐藏版本号)
Content-Type服务端返回的响应体数据格式(与请求头Accept对应)application/json;charset=utf-8text/html;charset=utf-8image/jpeg1. 核心测试点:与请求头Accept匹配(如客户端要JSON,服务端返回HTML则为bug);2. 字符集校验(charset=utf-8避免中文乱码);3. 文件响应格式与实际文件类型一致
Content-Length响应体的字节大小(告知客户端接收数据的总长度)1024204851201. 验证响应体大小与该值一致(防止数据截断/多传);2. 分块传输(Transfer-Encoding: chunked)时,该头可省略;3. 大文件响应时长度准确性测试
Content-Encoding服务端对响应体使用的压缩方式(与请求头Accept-Encoding对应)gzipbrdeflate1. 验证压缩方式与客户端请求一致;2. 解压后响应体无乱码、数据完整;3. 弱网场景下压缩效率测试(减少流量消耗)
Connection服务端告知客户端的连接管理策略(与请求头Connection对应)keep-alive(保持长连接)、close(关闭短连接)1. 移动端测试重点:长连接复用性(避免频繁建连导致延迟);2. 服务端与客户端连接策略一致性校验
Date服务端发送响应的当前时间(GMT标准时间)Tue, 03 Feb 2026 08:30:00 GMT1. 时间准确性校验(与当前GMT时间一致,避免时间偏差导致的缓存/鉴权问题);2. 跨时区场景下时间格式正确性
Set-Cookie服务端向客户端下发Cookie(用于状态保持,与请求头Cookie对应)SESSIONID=abc123; Path=/; HttpOnly; Max-Age=36001. 登录态测试核心:下发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 GMT1. 与If-Modified-Since配合,验证协商缓存(时间未变返回304);2. 资源修改后,最后修改时间是否更新;3. 时间格式与Date头一致性
Expires响应缓存的过期时间(GMT标准时间,优先级低于Cache-Control: max-age)Tue, 03 Feb 2026 09:30:00 GMT1. 过期时间合理性(避免缓存过长/过短);2. 与max-age同时存在时,验证max-age优先生效;3. 过期后是否重新请求获取最新资源
Access-Control-Allow-OriginCORS跨域核心头,告知客户端允许跨域请求的来源(与请求头Origin对应)https://www.xxx.com*(允许所有来源,不推荐生产环境)1. 跨域测试重点:非允许Origin请求是否返回403;2. 允许的Origin是否准确(避免过度开放);3. Credentials模式下,不能使用*
Access-Control-Allow-MethodsCORS跨域头,告知客户端允许跨域请求的HTTP方法GET, POST, PUT, DELETE, OPTIONS1. 验证允许的方法与接口实际支持的方法一致;2. 预检请求(OPTIONS)中返回的方法是否完整;3. 禁止的方法是否无法跨域访问
Access-Control-Allow-HeadersCORS跨域头,告知客户端允许跨域请求携带的自定义请求头Content-Type, Authorization, X-App-Version1. 测试自定义头(如X-App-Version)跨域时是否被允许;2. 预检请求中返回的允许头是否完整;3. 未允许的自定义头是否无法携带
Access-Control-Allow-CredentialsCORS跨域头,告知客户端是否允许跨域请求携带Cookie/认证信息true(允许)、false(禁止,默认)1. 跨域带登录态测试:开启true时,客户端Cookie能否正常携带;2. 开启后,Access-Control-Allow-Origin不能为*;3. 禁止时,是否无法携带认证信息
Location重定向核心头,告知客户端重定向的目标地址(配合3xx状态码使用)https://www.xxx.com/new-page/home1. 重定向测试: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类型嗅探nosniff1. 安全测试重点:是否配置该头(防止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自定义头,服务端处理本次请求的耗时(毫秒)501203001. 性能测试重点:接口响应耗时是否在合理范围(如移动端接口≤300ms);2. 高并发场景下耗时稳定性;3. 耗时异常时是否有优化空间
X-Request-ID自定义头,请求唯一标识(用于链路追踪、日志排查)a1b2c3d4-e5f6-7890-abcd-1234567890ab1. 日志排查测试:请求头与响应头的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(警告)(排障核心),级别标识会显示在日志行最前面。

级别标识级别名称说明适用场景
VVerbose详细日志(最低级)开发调试详细信息
DDebug调试日志应用开发调试
IInfo信息日志系统 / 应用正常运行状态
WWarning警告日志潜在问题(可能导致错误)
EError错误日志应用崩溃 / 系统报错(排障核心)
FFatal致命错误系统 / 应用严重崩溃(极少出现)

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.mmcom.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,监控一下试试

  1. 选择要监控的app
  2. 点击右上角的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 就是基于这部分计算的:

行标识字段含义补充说明
Taskstotal总进程数包含所有状态的进程
Tasksrunning正在运行的进程数占用 CPU 执行的进程
Taskssleeping休眠进程数等待资源 / 事件的进程(大部分应用处于此状态)
Tasksstopped停止的进程数被暂停的进程(如后台冻结)
Taskszombie僵尸进程数已终止但未释放资源的进程(正常应为 0)
Memtotal物理内存总大小设备总 RAM 容量
Memused已使用内存所有进程占用的内存总和
Memfree空闲内存未被使用的内存(安卓中通常较少,因系统会缓存)
Membuffers缓冲区内存系统用于磁盘 / 网络缓存的内存
Swaptotal/used/free交换分区大小 / 已用 / 空闲相当于虚拟内存,used 过高说明物理内存不足
CPUus (user)用户空间 CPU 占比应用进程(如你的 APP)占用的 CPU 百分比
CPUsys (system)内核空间 CPU 占比系统进程 / 内核操作(如驱动、调度)占用的 CPU
CPUni (nice)低优先级进程 CPU 占比调整过优先级的进程占用的 CPU
CPUid (idle)空闲 CPU 占比100% - (us+sy+ni+wa+hi+si+st),越高说明设备越闲
CPUiow (iowait)IO 等待 CPU 占比等待磁盘 / 网络 IO 完成的 CPU 空闲时间(过高说明 IO 瓶颈)
CPUirq (hardware irq)硬中断 CPU 占比硬件中断(如按键、传感器)占用的 CPU
CPUsirq (software irq)软中断 CPU 占比软件中断(如进程调度)占用的 CPU
CPUhost当前进程 / 整机占用的 “宿主 CPU” 时间占比(或 “主机 CPU 使用率”)仅出现在多核 / 多处理器设备或虚拟机 / 容器化环境有

3.4.3 进程列表信息(进程级指标)

这部分是单个进程的详细数据,Solox 中的 app CPU 就是提取被测 APP 进程的这部分数据:

列名全称 / 含义补充说明(结合 Solox 场景)
PIDProcess ID进程唯一标识,Solox 通过 PID 定位被测 APP 进程
USER进程所属用户u0_a123 是普通应用用户,root 是系统用户
PRPriority进程优先级(数值越小优先级越高)
NINice 值优先级调整值(范围 -20~19,负值优先级更高)
VIRTVirtual Memory进程占用的虚拟内存(包含未实际使用的内存,参考意义小)
RESResident Memory进程实际占用的物理内存(常驻内存),Solox 采集的核心内存指标
SHRShared Memory进程共享的内存(如与其他进程共享的库文件内存)
S进程状态S = 休眠 / R = 运行 / Z = 僵尸 / D = 不可中断休眠
%CPUCPU 使用率该进程占用的 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 总结

  1. adb shell top 的指标分整机汇总(us/sy/id 等)和进程明细(% CPU/% MEM 等),Solox 分别用这两部分计算 total CPUapp CPU
  2. 核心关注字段:整机级看 %us/%sy/%id,进程级看 PID/%CPU/%MEM/ARGS
  3. 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 rendered1633统计周期内应用总共渲染的帧数(核心基数,用于计算 FPS)
Janky frames102 (6.25%)卡顿帧数:单帧渲染耗时超过「屏幕刷新率阈值」的帧数(60fps=16.67ms,90fps=11.11ms),百分比 <5% 为流畅,5%-10% 轻度卡顿,>10% 严重卡顿
Janky frames (legacy)127 (7.78%)旧版卡顿统计标准(兼容安卓低版本),参考即可,以非 legacy 值为准
50th percentile5ms50% 的帧渲染耗时≤该值(中位数,反映「大部分帧」的流畅度,越低越好)
90th percentile8ms90% 的帧渲染耗时≤该值(反映「绝大多数帧」的流畅度,重点关注,≤16ms 为正常)
95th percentile16ms95% 的帧渲染耗时≤该值(接近卡顿阈值,超过 16ms 说明有少量卡顿帧)
99th percentile69ms99% 的帧渲染耗时≤该值(反映「极端卡顿帧」,越高说明偶尔卡顿越严重)
Number Missed Vsync62错过垂直同步信号的次数(屏幕刷新时没提交画面,直接导致画面撕裂 / 卡顿)
Number High input latency1186输入延迟高的次数(点击 / 滑动等操作响应慢,数值越高体验越差)
Number Slow UI thread79UI 线程卡顿次数(UI 线程负责界面绘制,卡顿会直接导致操作无响应)
Number Slow bitmap uploads0位图(图片)上传到 GPU 耗时慢的次数(0 表示图片渲染无问题)
Number Slow issue draw commands24绘制命令执行慢的次数(部分界面元素绘制耗时高)
Number Frame deadline missed102错过帧截止时间的次数(和 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 percentile2ms50% 的 GPU 渲染耗时≤该值(GPU 处理速度,越低越好)
90th/95th/99th gpu percentile3ms/6ms/10ms对应比例的 GPU 帧耗时,≤16ms 为正常
GPU HISTOGRAM1ms=795 2ms=633...GPU 帧耗时的分布,和 CPU 侧直方图逻辑一致
PipelineSkia (Vulkan)应用使用的渲染管线(Skia 是安卓默认渲染引擎,Vulkan 是高性能 API,无问题)

3.5.6 内存缓存模块

这部分反映渲染相关的内存占用,判断是否因内存不足导致卡顿:

字段示例值含义
Memory policyMax surface area: 2527200渲染表面的最大面积(内存限制,无溢出则正常)
Max resource usage121.31MB (x48)GPU 资源的最大占用量(远低于手机显存上限则无问题)
Total CPU memory usage509.05 KBCPU 侧渲染缓存(如字体、小控件)的总占用,数值小则无压力
Total GPU memory usage13.34 MBGPU 侧渲染缓存(如纹理、图片)的总占用,≤100MB 为正常
GraphicBufferAllocator buffers4800.00 KiB图形缓冲区(CPU/GPU 数据中转站)的占用,数值小则无瓶颈

3.5.7 UI 视图 / 渲染节点模块

这部分反映应用 UI 元素的负载,是你之前找到腾讯会议卡顿的核心原因:

字段示例值含义
Total ViewRootImpl4应用的视图根节点数量(正常范围 1-5,过多可能导致内存泄漏)
Total attached Views1242绑定的 UI 视图数量(数值过高会导致 UI 线程绘制耗时,腾讯会议这里 1242 是异常值)
Total RenderNode1667.26 kB (used) / 2134.90 kB (capacity)渲染节点的占用 / 总容量(占用率≤80% 为正常,仅 View 数量多会导致处理慢)

3.5.8 其他辅助模块(参考即可)

字段示例值含义
Total STB frames rendered3SurfaceTextureBuffer(视频帧缓冲区)渲染帧数,会议非视频播放时数值低
ProcessConfigsw360dp w360dp h702dp 480dpi应用运行的屏幕参数(分辨率、dpi),无适配问题则正常
Imported gralloc bufferssize:1800.00KiB, w/h:738x1600导入的视频缓冲区规格(YUV 格式,会议画面采集用,正常则无问题)

3.5.9 总结

dumpsys gfxinfo %PACKAGE% 输出字段的核心逻辑:

  1. 核心关注Total frames rendered(算 FPS)、Janky frames(卡顿率)、99th percentile(极端卡顿)、Total attached Views(UI 负载);
  2. 辅助判断:GPU 百分位(看 GPU 是否瓶颈)、内存占用(看是否内存不足);
  3. 无关参考: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

软件环境

软件名称版本
MySQL8
Java8

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 建议

由于....情况,测试执行过程中出现了时间风险,

以后为避免时间风险,测试可更早介入,提前把控软件的质量