黑盒测试与bug定位

本篇用以记录个人项目中单体测试及联合测试时对bug的定位和部分修改过程

bug1 学员性别显示错误

显示学员信息时性别显示错误。显示为女(应该是男)
在这里插入图片描述


怎么办呢?先直接从表面入手,F12打开控制台定位到这个性别元素。
在这里插入图片描述
可以看到是通过一个三目运算符对性别代码sex_code进行判断;1为男性,否则为女;逻辑还蛮清晰的。

以防万一,再去查阅原型设计:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2019080609340153
好像没什么不对哦,和html中的逻辑相对应。唯一不确定的是性别“男”的约束很强,而性别代码只要不是1的都会显示为“女”,问题是不是在这里?


那来康康前端收到的数据是否有错:

按理说前端会接收到一个学员类型的对象,内含各种信息,包括性别代码sex_code;打开控制台查看相关接口返回的信息:
在这里插入图片描述
果然问题出在这里,sex_code字段为空;当然会判断成女性。


根据调用的接口,一直查询到数据访问层xml文件:

我们发现这个sql语句中缺少sex_code字段,虽然不会影响整个查询流程,但是会导致查询结果出错
在这里插入图片描述


在sql语句中加入对性别代码的查询,问题解决。
在这里插入图片描述
在这里插入图片描述


bug2 教师列表有重复

在查看全体教师信息时,发现同一位教师信息出现了三次。

教师在教师表中是有唯一标识的,同一条信息不应该出现多次;依据经验应该是在查表时选错表了。
在这里插入图片描述


为排除前端可能出现的错误,先去控制台查看前端返回数据:
在这里插入图片描述
查看前端返回数据后确定返回的数据列表中包含了三组完全相同的教师信息。同样追溯到xml文件:
在这里插入图片描述
我们发现SQL的查询语句中左连了两张表;问题可能出现在这里。

去康康这两张表是什么玩意儿哦~


表T01_PROJECT_BANCI是某一个项目和这个项目对应的班次的关联表,与teacher没有太大关系;

表T07_PROJECT_TEACHER某一个项目和这个项目对应的老师的关联表,详细看看:
在这里插入图片描述
在数据库中查看这张表的内容,发现问题出在这里。。。
在这里插入图片描述
这张表中同一个老师和三个不同的项目产生了关联,所以左连的时候就左连了三次。。。

解决也很简单,在查询语句中加distinct去重就好了,只要有一个字段不同,结果就会保留下来。
在这里插入图片描述


bug3 “系统消息”时间显示错误

在前端页面查看系统消息列表,发现有一条8月1日发布的消息:
在这里插入图片描述
选择发送时间为8月1日再次进行查询:暂无相关数据???
在这里插入图片描述
什么鬼哦。。。打开控制台:这条消息的发送时间确实是8月1日啊。。。
在这里插入图片描述


再去数据库里看看:
在这里插入图片描述
???什么情况???怎么数据库里的是7月31日。。。查看日志,确定后端传值没有错误。
在这里插入图片描述
日志显示传值与数据库一致;怪不得查不到,那再去前端试试。


选择日期7月31日进行查询:
在这里插入图片描述
果然是这样,那么后端是没有什么大问题的;问题就出在前端对日期格式的显示上。


多录入几组数据进行测试:
在这里插入图片描述
在这里插入图片描述
发现数据库中的日期与前台显示的日期相差12小时。。。问题大致明了了

找到前端的js代码:
在这里插入图片描述


bug4 用户反馈页面无法加载

一大早准备联测得时候突然发现用户反馈界面无法进入。。。
在这里插入图片描述
打开控制台。。。啊哦,居然有报错。。。
在这里插入图片描述
定位到报错的前端代码:
在这里插入图片描述
打开前端代码,发现是一条if语句引发的错误,究竟是怎么回事呢?
在这里插入图片描述
前面控制台报错说是:
在这里插入图片描述
应该说是这个list的suggestions的length为空;去数据库里看一下这个suggestions是什么?
在这里插入图片描述
suggestions就是测评表中的一个字段,表示评价的信息内容。

查看数据库发现有一行数据的suggestions字段为空。。。
在这里插入图片描述
我们回看那条if语句:

    if($scope.list[i].suggestions.length > 15){
    	scope.list[i].suggestions = $scope.list[i].suggestions.substring(0,15) + "...";
    }

很典型的一个没有对异常条件进行判断的一个bug,没有考虑到suggestions内容可能为null,直接获取其length会获取不到而报错。


在js中加一个判断即可解决:
在这里插入图片描述
在这里注意一下,“”null是不一样的;

加判断时不可以直接写if($scope.list[i].suggestions.length == 0)

当数据库中的suggestions字段为空null时,依然无法获取其length,null相当于没有创建相应的对象,没有分配内存(个人观点);而只有suggestions字段为“” 时,才能获取其length=0;

所以要将判断写成if($scope.list[i].suggestions == null || $scope.list[i].suggestions == '')才能保证程序不会出现问题。


bug5 宿舍信息误修改问题

问题描述:在修改宿舍的状态时(正常–>维修中),会错误地将将房间类型修改为套间。

现在以1112号宿舍为例,类型为标间,状态为正常,可进行操作为修改、房间维修、暂时占用。
在这里插入图片描述
点击 “ 房间维修 ” 超链接,数据改变:
在这里插入图片描述
房间状态符合预期,显示为:维修中;但是房间类型出现错误。

在多次实验后发现,任何情况下点击 “ 房间维修 ” 超链接,房间类型都会错误的更改为套间。


查看前端页面:
在这里插入图片描述
前端在点击 “ 房间维修 ”链接后,向后台传了三个参数:宿舍楼id、房间号、房间状态。

房间状态的值来自调用这个方法传入的参数id。


再去查看后台sql语句,因为代码复用,更新房间信息和更改房间状态调用了同一段代码:
在这里插入图片描述
其中这条语句对房间类型字段进行了重新赋值。。。也就是说在更新房间状态的时候,会重设房间类型字段。

但是在更改房间状态时,前端并没有传递房间类型这个值;在SQL语句中sushe_classify字段被重设为null。


问题很明显了,想都不用想,前端列表展示房间类型字段所用的三目运算符将null直接判断为 “ 套间 ”。
在这里插入图片描述
其实整个过程的问题就出在:代码复用时没有进行必要的判断。


解决:

既然更改房间状态时不需要改动房间类型字段,那么是不是可以直接删掉对sushe_classify字段设值的SQL语句?

不行!!!因为在更新房间信息时会对sushe_classify字段进行重设。对应SQL语句仍有用。

那怎么办? 再写一个方法?那代码复用不就没有意义了。。。

这两个方法在前端的调用区别在于:是否传递了sushe_classify的值,即前端传递来的sushe_classify是否为空?

那么可以在SQL语句中加个判断,MyBatis是支持的:
在这里插入图片描述
可以思考一下用最原始的JDBC代码怎么完成对应的业务逻辑,是否更加复杂。

问题解决。。


未完待续。。。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值