测出让人血压升高的页面崩溃,我是如何排查的

news2025/1/30 16:00:59

前情回顾

前几天在一次web应用测试过程中,前端发起了向后端接口的查询请求,由于后端响应较慢,前端一直处于等待响应返回状态。在几分钟后,突然页面出现让人惊悚的“噢噢,页面崩溃了”几个大字。

看到这几个字的一瞬间,血压突然飙升,脑袋里嗡地一声冒出一串问号:发生了什么事?于是,抱着可能是“出现错觉”幻想,再次在前端重复了操作步骤,结果不出所料依然“噢噢,页面崩溃”。

毕竟,我是长着一颗“钢筋铁脑壳”,肯定得追根溯源,查找下什么原因。

剧情延续

已经确定,上述现象是一个“必现”的故障。我已经有了信心可以将这个现象提交成一个故障交给开发同事分析而不会被拒绝,但是本着“节省彼此沟通时间”和“好奇心理”,我决定进行初步排查。

1.排除后端接口故障

再次触发故障,登录后端服务器查看接口接受请求和返回响应日志,发现前端故障出现时,后端仍处于“等待响应返回”状态。因此,不可能是因为后端返回数据太大等原因造成”页面崩溃”,暂时排除后端故障!

2.前端异常摸排

排除后端故障后,转战前端故障摸排。由于不太熟悉前端日志存放,所以选择了常用的浏览器调试模式进行排查,看看能不能得到想要的结果。

打开浏览器调试窗口,切换到“内存“菜单(样例如下图所示)。再次重复操作步骤,触发“页面崩溃”故障。过程中突然注意到,内存调试窗口的“JS堆总大小”快速增长,然后出现“页面崩溃”。

重复几次测试,都发现“JS堆总大小”快速增长。由此可以初步确定,前端内存溢出,导致页面崩溃。

 图1 浏览器内存调试窗口示意图

那么,如何进一步分析内存溢出点呢?

如下图2所示,点击“拍摄快照”,浏览器会将当前页面的内存和缓存一起计算、快照下来。

 图2 浏览器内存快照示意图

如下图3所示,为“www.baidu.com”页面快照结果。从图中可以看出前端js文件中每个函数占用的大小,以及每个对象的内存大小。

图3 浏览器内存快照详情

通过该方法,我快速找到了前端js文件中内存消耗最大的函数和对象。收集好“故障表象图(页面崩溃截图)”、“内存快照截图”,将整个故障复现方法和故障现象和初步分析结果贴到故障描述中,提交给前端开发人员进一步分析。

很快,前端开发人员给予了肯定,的确是前端内部溢出,根本原因是闭包导致,且很快修复完成。

由此可以看出,使用浏览器的内存调试窗口和内存快照帮助我取得了一次成功的前端故障初步分析结果,为开发人员提供了有效的帮助,且节省了大量的沟通时间。

大结局

从本文案例中可以看出,掌握浏览器调试窗口的使用和分析是一个十分方便且有效的故障分析方法,可以提升我们测试人员的专业素养,为我们赢得开发同事的尊重,也可以提高研发效率,节省不必要的沟通成本。建议大家可以熟练使用和掌握。

彩蛋

有什么想再说说的吗?有一点点。

问:什么是内存泄漏?什么是内存溢出?

答:这两个词语经常从开发同事嘴里听到。

内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。

内存溢出(Out Of Memory,简称OOM)是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存。此时程序就运行不了,系统会提示内存溢出,有时候会自动关闭软件,重启电脑或者软件后释放掉一部分内存又可以正常运行该软件,而由系统配置、数据流、用户代码等原因而导致的内存溢出错误,即使用户重新执行任务依然无法避免。

简单来说,内存泄漏可以理解为程序某个未使用的变量或者方法,长期占用内存不会释放,导致内存堆积浪费;内存溢出可以理解为因为某些原因,程序使用的内存大于硬件提供的内存,导致内存超出了。

问:快照时间太短,页面还在加载快照就结束了?

答:若想要分析更长时间的页面内存变化或占用,推荐使用浏览器调试窗口的“性能”。

问:为何感觉相邻几次相同页面的快照开始时,内存似乎依然很大?

答:快照会将内存和缓存一起计算,快照前记得使用如下图表清理页面缓存,这样就可以获得更准确的内存数据啦。


资源分享【这份资料必须领取~】

下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/104859.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用于销售、报告等的 LearnDash Group Management LMS分组管理插件

目录 获取强大、直观的LearnDash LMS组管理和报告 使用 LearnDash Groups LMS分组管理插件进行 B2B 销售 节省设置分组的时间或让客户自己构建和购买! 获取强大、直观的LearnDash LMS组管理和报告 LearnDash分组是将学生组织成逻辑单元以进行报告和课程访问的绝…

java回顾:Maven高级

目录 一、私服搭建 二、Maven高级 2.1、依赖范围 2.2、依赖传递 2.3、依赖可选 2.4、依赖排除 2.5、依赖冲突 三、ssm工程改造成分层构建 3.1、maven的继承 3.2、继承的一些应用 3.3、maven的聚合(多模块开发) 一、私服搭建 https://blog.…

rust语句,表达式以及函数

语句和表达式 在rust里,语句和表达式的区别是非常重要的。语句没有返回值,表达式有返回值。例如: fn main() {let y {let x 3; // 赋值语句x 1 // 表达式};println!("The value of y is: {}", y); }上面使用一…

SQL | 自联接 Self Join

有时你可能需要获取位于同一个表中的相关数据。为此,你可以使用一种特殊的联接,称为自联接(Self Join)。在今天的文章中,我们将学习如何使用 Navicat Premium 作为数据库客户端编写包含自联接的查询。如果你没未使用过…

报表工具软件-FineReport JS实现下拉框自动展开

1. 概述 1.1 预期效果 在使用下拉框做筛选查询时,需要点击下拉框下拉三角才会展开所有选项,有些使用场景下,用户希望自动展开选项列表,尤其是在多个控件联动场景下。如下图所示: 地区控件选择地区后,销售…

新一代最强开源UI自动化测试神器Playwright(Java版)页面元素交互

Playwright 可以与 HTML 输入元素交互,例如文本输入、复选框、单选按钮、下拉选择框、鼠标点击、字符输入、模拟键盘事件以及上传文件和焦点元素。 Playwright 操作文本框 使用Locator.fill()是填写表单字段的最简单方法。input它聚焦元素并使用输入的文本触发事件…

JVM面试题详解系列——垃圾收集算法详解

垃圾收集算法 标记 - 清除算法 首先标记出所有需要被回收的对象,标记完后统一回收所有被标记的对象。 后续的收集算法都是基于这种思路并对其不足进行改进而得到的。 这种方法主要有两个缺点: 一个是效率问题,标记和清除两个过程的效率都…

最短路径(难)

目录 一、Dijkstra算法 动态演示: 关键代码: 完整代码: 运行结果: 二、Floyd算法 详细介绍 关键算法: 完整代码: 运行结果: 一、Dijkstra算法 Dijkstra算法:可以求带权图中…

开发者还能这样开发小游戏变现

根据《2022微信小游戏增长白皮书》显示,目前微信小游戏开发者数量已经超过10万人次,特别是在持续出现小游戏爆火社交平台的趋势下,小游戏发展势头强劲。 此外仅看微信小游戏的商业规模,2022年相较于2021年实现了超 30%的商业增长…

快速了解Azure SQL部署类型的小技巧

目录 (一)前言 (二)正文 1. 语法 2. 结果分析 3. 实例 (1)SQL SERVER (2)Azure SQL (一)前言 我们知道在常规的SQL SERVER中我们会使用SELECT VERSIO…

我国汽车保险杠行业对汽车产业依存度较大 市场需求呈良性上升态势

根据观研报告网发布的《2022年中国汽车保险杠市场分析报告-市场发展格局与投资潜力研究》显示,汽车保险杠是汽车车身上一种较大的外覆盖零部件,其作用是在汽车发生碰撞时,保护汽车车身及附件,轻微碰撞可以依靠保险杠自身吸收能量&…

MySQL中的这14个神仙功能,惊艳到我了!!!

前言 我最近几年用MYSQL数据库挺多的,发现了一些非常有用的小玩意,今天拿出来分享到大家,希望对你会有所帮助。 1.group_concat 在我们平常的工作中,使用group by进行分组的场景,是非常多的。 比如想统计出用户表中…

劲牌连续两年问鼎全国质量大奖背后的密码

11月24日,第二十届全国质量奖“中国杰出质量人”正式公布,劲牌公司董事长吴少勋成为全国10人名单之一。这是劲牌公司继2021年获得第十九届全国质量奖组织奖后,又获得全国质量奖个人奖。连续两年分别获得全国质量奖组织奖和个人奖,…

18岁开始学习编程是否来得及?

18岁开始学习编程完全来得及,不仅来得及,而且还可以选择走专业的程序研发路线,在当前产业互联网的推动下,未来程序开发岗位的数量还会进一步得到攀升。 18岁开始学习编程可以根据自身的实际情况来规划具体的学习路线,对…

java回顾:ssm整合、纯注解开发

目录 一、搭建环境 1.1、spring环境搭建 1.1.1 测试SpringIOC环境 1.2、搭建Mybatis环境(原生mybatis) 二、Spring整合mybatis 三、Spring整合SpringMVC 四、SSM执行流程 五、纯注解开发配置文件模板 声明: SpringMVC: 注解 XML 注解: Control…

[streamlit]数据科学科研工作者的神器,必须要推荐一下

1. 前言 做科研当然要有过硬的专业知识,但是也少不了一些辅助,才能最大程度发挥我们的能力。因此,除去我们模型性能优秀,结果良好以外,如何进行一个好的展示,也是非常有必要的。那么今天,我们就…

推荐系统:基于ConvNCF推荐算法的推荐系统实现 代码+数据详细教程

1.案例知识点 推荐系统任务描述:通过用户的历史行为(比如浏览记录、购买记录等等)准确的预测出用户未来的行为;好的推荐系统不仅如此,而且能够拓展用户的视野,帮助他们发现可能感兴趣的却不容易发现的item;同时将埋没在长尾中的好商品推荐给可能感兴趣的用户。ConvNCF推…

西瓜书-决策树

决策树 决策树划分时,当前属性集为空,或所有样本在所有属性上取值相同,将结点标记为叶节点,其类别标记为当前样本集中样本数最多的类。 决策树算法的核心在于:选择最优划分属性 判别分类的三种情形: 当前…

[前端攻坚]:详解call、apply、bind的实现

call apply bind 的实现的面试中几乎必定出现的一些内容,今天来用一篇文章整理一下这里的内容,加深一下JS基础知识体系。同时文章也被收录到我的《JS基础》专栏中,欢迎大家点击收藏加关注。 call的实现 call() 方法使用一个指定的 this 值和单…

Oracle Ask Tom分区学习系列: 面向开发者的分区(Partitioning)教程

Oracle Partitioning: A Step-by-Step Introduction for Developers是Oracle数据库开发者课程之一。 Development with Oracle Partitioning/使用 Oracle 分区进行开发 Partitioning in the database reflects the same way we handle large tasks in the real world. When a t…