不得不会的软件测试bug分析定位技巧

news2024/11/24 14:50:26

目录

1.web前端

2.web后端

3.性能测试


身为测试工程师,总有一道绕不过去的坎就是定位bug,这其实是非常花费时间的。

也许有很多人不以为然,觉得无非就是发现bug后提交bug管理系统,描述操作步骤,预期结果和实际结果哪里不一致,然后继续测试。并不是说这样做的不对,只是说这样做的不够好,看似节约了测试时间,实则对于项目的进度没有起到应有的推动作用。

1.web前端

Ø Web前端就是通常说的网页。互联网公司的前端一般包含如下内容:JavaScript、ActionScript、CSS、HTML(..ML)、HTML5、Flash、交互式设计、视觉设计

Ø web前端测试可能发现的问题——版面设计、交互设计、文字、性能、功能

Ø bug定位通用思路:现象-->原因-->验证手段-->结论-->现象

 

测试bug定位原因归类:

测试环境相关

l 是否安装了flash及flash的版本——可能导致部分页面显示出问题,目前常用的版本诶flash10

l 是否开启了浏览器插件——插件可能导致浏览器行为的变化,除非测试要求,否则一律禁用插件

l 是否开启了安全软件——可能会截包、弹窗拦截、防钓鱼等

浏览器相关

l 不同浏览器的支持标准——不同内核的浏览器对js及各种标准的支持不同,因此页面解析出来的效果可能不同。Firefox:gecko;Chrome:webkit;IE:trident;Safari:webkit。

l 浏览器的设置——禁用js;禁用弹窗;禁用cookie等

l 浏览器cache策略——js,css,图片等都有可能被cache住。ctrl+F5强制刷新请求

l cookie——跨域,过期

网络相关

l 是否发出了正确的请求——请求url、参数变量。content数据

l 是否得到了正确的应答——http的返回值:200-正确;302-对象已移动;304-对象未修改;404-没有找到页面。返回的数据体

l 是否性能问题——异步请求的数量过多;网速过慢

字符编码相关

l 页面乱码——百度后端存储基本是使用的GBK编码,前端提交可能是UTF-8编码,后端对于非GBK编码一般采用实体存储。可能出现编码没有转换。转换的时候没有判断半个汉字(转掉了半个汉字导致雪崩)。

l url错误——url路径中汉字编码使用的是utf-8编码,参数中使用系统默认编码,flash脚本中使用的都是uft-8编码。

安全相关

Xss漏洞——输入一些特定字符页面出现错乱或有恶意代码被执行,RD未对特殊字符转义完整

性能相关

l 图片数量——页面中同一个域的图片的数量控制在16个以下,IE会控制同一个域下图片并行的下载数量

l 页面抖动——异步请求的数量过多

l 加载失败——限速情况下,超时

bug定位常用工具

l Firefox——firebug、web developer、live http headers、http fox

l IE插件——httpwatch

l 第三方工具——fiddler、charles

l 慢速网模拟工具——firefox throttle、fiddler、charles

2.web后端

后端包含运行在服务器上的程序,脚本和服务。比如:各种各样的逻辑处理系统,数据存储系统等。

后端可能发现的问题——逻辑的,数据的,策略的,接口的,性能的等

测试bug定位原因归类:

数据流相关

l 上下游模块是否连接正常——模块的ip和端口的配置,白名单黑名单配置,session授权

l 模块的数据发送接收是否正常——日志是否有滚动,是否显示发送了数据或接收到数据,数据是否完整,跨机房,负载均衡算法(从哪些机器获取到的数据)

l 非socket的数据传输——共享内存(是否分配,key的配置等),cache(是否创建,脏数据等),数据库(配置,连接,表,触发器,存储过程),文件(大小,访问权限)

l 模块之间的接口——协议的一致性(mcpack1,mcpack2等),字段的一致性(一个按signed解析,一个按unsigned解析),字段复用

处理逻辑相关

l 程序的各种配置——功能是否开启/关闭,词表是否加载,各种阈值的配置,超时配置

l 程序日志——日志级别,交互的流程,处理的流程

l 各种边界——数据边界(int,long),文件边界(空文件,分文件的边界),时间边界

l 各种资源并使用——Cache是否遗留脏数据,并发和死锁

系统和环境相关

l 系统资源——Cpu,io,句柄,内存,网络状态,数据库状态,数据库连接数

l 环境资源——程序版本,内核版本,网络(外网)访问权限,系统动态库不一致

程序和代码相关(常用验证手段)

l 确认问题出现的位置——日志中的代码行,gdb中的代码行,抛出异常显示的代码行

l 获取当时的运行时信息——Gdb core文件,gdb attach到进程,查看堆栈,查看寄存器,设置breakpoint,watchpoint,查看内部数据

l 获取程序和系统信息——Strace查看系统调用,系统状态获取(ps,top,/proc/pid/*,vmstat,netstat)

l 更深入的手段——反汇编,查看寄存器,gdb高级应用

后端测试bug定位

日志查看命令

查看压力——tail -f as.log | grep '^NOTICE' | awk '{print $3}' | uniq -c

· 排除日志中的特定内容——grep -v 'pattern' as.log

· 将wf日志归类——grep -o '\w+\.(cpp|h):\d+' as.log.wf | sort | uniq -c

gdb常用命令

bt——查看堆栈信息

print——打印某变量值

break——设置断点

x/i——翻译当前指令为汇编

info thread——查看所有线程,星号*标记的是当前线程

thread num——切换到线程号为num的线程

set scheduler -locking on——锁定在线程:输入continue命令以后,当前线程继续执行,其它线程不执行

set scheduler-locking off——这是默认设置,输入continue命令以后,所有线程都继续执行

3.性能测试

旨在获取系统在特定一种或多种环境下,在不同的外部输入压力(包含极限)的条件下的系统各项指标的测试

常用命令

进程相关——ps,top,/proc/pid/*

系统相关——vmstat,top,iostat,sar,df,lsof

网络相关——netstat

bug定位原因归类

压力工具相关

工具的功能和性能——能否达到预期压力,启动压力的机器性能,压力工具是否有异常连接关闭,压力工具如何处理异常,长连接短连接,并发的个数

工具运行环境——压力机器的带宽,是否跨机房

被测系统相关

机器性能——系统所在机器性能,机器网络带宽,机器的内存,sd卡,硬盘

系统本身——系统的下游模块的性能,系统的配置,系统的数据量,系统的特点状态(充cache,dump,merge),系统的部署,程序的bug

环境相关

操作系统相关—— 是否和线上一致,内核版本,刷脏页时间,有没有调用directIO

查看系统状态——Ps,top,/proc/pid/*, vmstat,netstat

正确的思路+丰富的业务知识+丰富的技术背景知识+较好的调试和开发能力= 强大的bug定位能力Bug定位的过程是能力提升的过程

Bug定位的过程也是境界提升的过程

 


以下是我收集到的比较好的学习教程资源,虽然不是什么很值钱的东西,如果你刚好需要,可以评论区,留言【777】直接拿走就好了

各位想获取资料的朋友请点赞 + 评论 + 收藏,三连!

三连之后我会在评论区挨个私信发给你们~

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

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

相关文章

正则表达式与文本处理器

文本处理器三剑客:grep(查找) sed awk 正则表达式:由一类特殊字符以及文本字符所编写的一种模式,处理文本当中的内容 其中的一些字符不表示字符的字面含义,这些字符表示控制或者通配的功能 通配符&…

PageHelper分页失效,只能查出第一页

PageHelper分页失效&#xff0c;只能查出第一页 1. 现象2. 原因3. PageHelper工作原理 1. 现象 分页代码如下&#xff1a; int pageId Constants.ONE;boolean isHasNextPage;do {PageHelper.startPage(pageId, Constants.DEFAULT_PAGE_SIZE);List<String> projectIdLi…

python发送邮件yagmail库

yagmail库发送邮件简洁&#xff0c;代码量少 多次测试文件发送只能接收到表、文档、pdf、ppt import yagmaildef send_yagmail(sender, send_password, addressee, hostsmtp.qq.com, port465):yag yagmail.SMTP(sender, send_password, host, port)img_url https://img2.bai…

kali密码攻击之在线攻击hydra

hydra与hydra-graphical 1.介绍 Hydra是一款非常强大的暴力破解工具&#xff0c;它是由著名的黑客组织THC开发的一款开源暴力破解工具。Hydra是一个验证性质的工具&#xff0c;主要目的是&#xff1a;展示安全研究人员从远程获取一个系统认证权限 支持以下协议爆破&#xff1…

Redis实战案例21-消息队列

1. 基于JVM的阻塞队列的局限 JVM内存限制问题&#xff0c;大量订单出现时&#xff0c;可能会超过JVM阻塞队列上限&#xff1b;阻塞队列并不能持久化&#xff0c;因为内存不能持久化&#xff0c;出现异常或者宕机之类的故障时&#xff0c;出现数据丢失&#xff1b; 所以引出消息…

Linux内核的任务:

硬件与软件之间的中间层&#xff1a;内核在技术层面上充当硬件和软件之间的中间层&#xff0c;负责将应用程序的请求传递给硬件&#xff0c;并处理硬件设备和组件的寻址和操作。 应用程序的接口&#xff1a;对于应用程序来说&#xff0c;内核是它们与硬件之间的接口。应用程序通…

基于 chinese-roberta-wwm-ext 微调训练 6 分类情感分析模型

一、模型和数据集介绍 1.1 预训练模型 chinese-roberta-wwm-ext 是基于 RoBERTa 架构下开发&#xff0c;其中 wwm 代表 Whole Word Masking&#xff0c;即对整个词进行掩码处理&#xff0c;通过这种方式&#xff0c;模型能够更好地理解上下文和语义关联&#xff0c;提高中文文…

NAS 问题处理记录

在解决自动配网的过程中&#xff0c;突然NAS不给力&#xff0c;偏偏这个时间找事情。上面这两个问题&#xff0c;说不复杂也不复杂&#xff0c;主要是自己在完全远程处理&#xff0c;很多不方便。当然少不了师弟的助攻&#xff0c;很感谢我的师弟帮忙&#xff0c;实验室的网络不…

Flink 启动就报错,但exception没提示。其中一个task failure 该怎么办?

文章目录 前言一、排查二、解决 前言 最近我在生产又遇到一个问题&#xff0c;就是消费着一段时间之后&#xff0c;忽然就不再消费了&#xff0c;但也不报错。观察了几次&#xff0c;我发现时间基本是停留在上下班高峰期数据量最大的时候。我主观猜测可能是同时间进来的数据过…

css通过子元素选择父元素

伪类:has选择父元素 td:has(> .unfoldTable){//可选中所有td下包含unfoldTable的class标签的td属性color: red; }td:has(> div){//可选中所有td下包含div标签的td属性color: red; } 特殊举例分析&#xff1a; 个别UI框架个别标签通过事件直接生成或者无法选中的情况。…

爆肝整理,Postman接口测试-全局变量/接口关联/加密/解密(超细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 全局变量和环境变…

随手记——前端安全策略 Content-Security-Policy – CSP

随手记——前端安全策略 Content-Security-Policy – CSP 一、问题 1. 问题&#xff1a;前端meta标签中配置了CSP安全策略&#xff0c;导致使用第三方地图插件的时间报错不展示 2. 原安全配置&#xff1a; <meta http-equiv"Content-Security-Policy" content&…

STM32MP157驱动开发——按键驱动(查询方式)

文章目录 概述APP 读取按键的 4 种方法查询方式休眠-唤醒方式poll 方式异步通知方式 查询方式的按键驱动程序&#xff08;框架&#xff09;按键驱动编写思路board_xxx.cbutton_drv.cbutton_drv.hbutton_test.cMakefile编译测试 查询方式的按键驱动程序(stm32mp157)board_stm32m…

常见Redis使用问题

一 lettuce使用问题 1 问题描述 Redis Cluster集群&#xff0c;当master宕机&#xff0c;主从切换&#xff0c;客户端报错 timed out 2 原因 SpringBoot2.X版本开始Redis默认的连接池都是采用的Lettuce。当节点发生改变后&#xff0c;Letture默认是不会刷新节点拓扑的。 3…

Spring+SpringMvc+Mybatis整合小Demo

原始方式整合SSM 不使用spring-mybatis包 项目内容 整合ssm完成对account表新增和查询的操作 项目大体结构 创建mavenWeb项目 pom文件中引入依赖 spring核心、aspectj(aop)、spring-jdbc(jdbcTemplate)、spring-tx(事务)、 数据源&#xff1a;mysql、c3p0、mybatis my…

linux之Ubuntu系列 find 、 ln 、 tar、apt-get 指令 软链接和硬链接

查找文件 find 命令 功能非常强大&#xff0c;通常用来在 特定的目录下 搜索 符合条件的文件 find [path] -name “.txt” 记得要加 “ ” 支持通配符 &#xff0c;正则表达式 包括子目录 ls 不包括 子目录 如果省略路径&#xff0c;表示 在当前路径下&#xff0c;搜索 软链接…

测试老鸟总结,性能测试-最佳并发和最大并发,性能测试实施...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 性能测试&#xf…

无涯教程-Javascript - Switch语句

从JavaScript 1.2开始&#xff0c;您可以使用 switch 语句来处理这种情况&#xff0c;它比重复的 if ... else if 语句更有效。 流程图 以下流程图说明了switch-case语句的工作原理。 switch 语句的目的是给出一个要求值的表达式&#xff0c;并根据表达式的值执行多个不同的语…

云曦暑期学习第一周——sql注入

1浅谈sql注入 1.1sql注入 sql注入是指web应用程序对用户输入数据的合法性没有判断&#xff0c;前端传入后端的参数是攻击者可控的&#xff0c;并且参数带入数据库查询&#xff0c;攻击者可以通过构造不同的sql语句来实现对数据库的任意操作 1.2原理 条件&#xff1a; 1.参…

接入端口与中继端口

交换机端口是支持 IT 的基本组件&#xff0c;可实现网络通信。这些有线硬件设备负责连接并允许在不同设备和连接到其端口的网络部分之间进行数据传输。由于网络管理员在确保网络连接和可用性方面发挥着关键作用&#xff0c;因此网络管理员必须清楚地了解、映射和查看其网络交换…