软件测试面试记录——包含自己给的回答

记录面试中被问到的一些问题,非全部记录,问得算比较广:接口、性能、功能、管理上都问了不少。有些问题比较有意思就记录下来。
【一面】

  1. 每一秒都会上传一条记录,用时间戳记录的,如何判断一断时间内上传记录是否有缺失?如果有缺失,怎么定位缺失的是哪一条?
    一开始有点蒙,因为前面一直聊项目、技术的,突然来这么个题。
    先冷静想了想,还好马上想到了答案。
    将最后一条记录的时间戳减去第一条的时间戳,然后转换成秒,记录数应=秒+1,再用count算下记录数,看两者是否相等。
    如果有缺失,用以上方法进行二分查找。

  2. 有没有遇到过同一个时间戳转换成了不同的日期的问题?你觉得是什么原因导致的?
    没遇到过,是不是跟时区有关系,面试关说对的,是时区。

  3. 数值小于70或大于180属于异常,超过10%(包括10%)的异常就要提醒,如何设计测试用例?
    这个我先沟通了一会儿,刚开始讲了开发的设计思路,面试官打断说这是开发的设计思想(其实这个过程也是在帮助自己理清需求)。
    这是个很典型的可以用等价类、边界值进行设计用例的场景。
    最后我给的回答是小于70和大于180的百分比加起来之和是否超过10%,超过(包括等于)则发出提醒,没有超过就不用发出提醒。

  4. 敏捷与传统开发模式有什么区别?你们的接口是如何做持续集成的
    敏捷与传统的开发模式在我看来本质上是没有区别的,都是需求分析、设计分析、测试用例设计、执行测试,这些步骤都不可少,不一样的是,敏捷讲究的是快,快速响应变化,快速部署、持续集成,比如一天可以提交几次代码,快速发现错误,防止分支大幅偏离主干。
    我们接口测试持续集成是通过git来管理代码,通过jenkins持续部署。

  5. 如何判断一个问题是前端问题还是后端问题?
    抓包,先看前端传的参数是否正确,如果不对,是前端问题;
    参数传的没问题再看后端返回的数据是否有问题,如果返回数据不对,是后端问题;
    返回数据没问题,那还是前端问题。
    引申问题: 如果是后端返回的数据有问题(不涉及到逻辑处理的,只是返回)那你会怎么处理?
    我会去看一下是否是因为缓存数据跟数据库存储的数据不一致。
    后面又问了如果让你测试缓存,你会怎么测试
    从缓存有效、失效、失效后重新加载到缓存、未加载到缓存、命中缓存这几种场景来验证。

  6. 遇到一个接口入参不合法的接口问题,但前端控制好了输入校验,这时后端开发说这个问题不会发生的,前端都控制了,如何说服开发解决这个问题?
    不一定非要解决,得看情况。如果涉及到数据安全、敏感信息,那把这个告知给开发存在的风险;如果是内部系统模块间的接口调用,不涉及到安全而且还有权限校验,那可以考虑暂时不修复;如果接口还要提供给外部调用,外部的前端或者说调用方不一定会按照我们的输入要求来,分析出存在风险,比如我们之前出过一个问题,前端控制好了输入的年月日不能超过一定的范围,但接口层没有限制,导致有次有人调用接口传了个9999年,一下子把系统搞崩了,那这种肯定要改的,风险太大。
    最好是前端+后端双层防护,这样系统会更稳健。

  7. 项目组谁说了算?产品、测试还是开发?
    我们是devopts模式,大家一起决策的,权力平等,这样所有人的参与感都很强。

  8. 谁来决定是否可以发布上线?是测试说了算吗
    测试、产品、项目经理和开发共同决定,在测试完成后测试会出具一份测试报告,里面记录了本次测试了哪些功能和接口,还剩哪些问题没有解析,给出测试的分析(可能存在的风险、影响的功能等),让项目组成员一起看,一般会在测试报告发出前跟产品、项目经理沟通,然后在报告中直接给出沟通的结果——是否可以上线。

  9. 会修改请求和返回值吗?
    会,用fiddler,可以直接修改请求的参数和定制接口的响应内容,就是mock请求,我一般把想要的响应内容写在txt文件里,然后将此指定为所要验证的接口的返回值,一般用来模拟一些手工上比较难以模拟的场景。

  10. 性能测试过程中万一发生token失效了怎么处理?
    token失效了的话,接口会有返回信息提示,捕捉到后重新登录,将新的token用提取器提取出来,塞到header里。

  11. 如果要做1万个并发,可以一下子加压到1万个用户吗?
    不能,因为这与实际情况会不一样。实际情况下,系统会有一个预热过程,比如把用户信息加载到缓存里,这样系统响应会更快一些,如果直接加压到1万,那就缺乏了这个预热过程,与实际情况差异很大,测出来的结果很有可能无意义。
    另外,线程数与并发数不是对等的,有个换算过程,比如平均响应时间是10ms,那要1万的并发量,其实线程数=1000/(1000ms/10ms)=10个线程就够了。
    当中面试官还问到如果客户端机器承载不了1w的并发怎么办
    我说那就用分布式,jmeter支持分布式压测。

  12. 你在提交bug的时候会记录哪些信息帮助开发定位问题?
    除了常的那些(操作步骤、系统信息)外,会提供后端返回的结果、日志、数据库对应的记录或缓存截图,如果操作步骤比较复杂,会录个屏。
    有时会加上自己的分析。

【二面】
二面还是技术面,聊了好多,这里只记录两个现场出、现场笔试的题。

  1. 如何实现y=x2,x是int型,不能用乘号
    这是二轮技术面的时候问的,前面聊得好好的,面试官突然拿出了笔,那一刻有点蒙(紧张导致的,毕竟很长时间没有写字和写代码了,先被自己吓到了。)
    面试官刷刷刷写完、说完要求后,我确认了一遍,不能用乘号是吗?
    对方说是的,然后硬着头皮上,接过纸和笔,先在纸上分析了下,然后马上理清了思路,不就是X个X相加嘛,于是迅速写下(问题其实不难,就是自己紧张得):
int y=0;
for(int i=1;i<=x;i++){
y+=x;
}
  1. 有两张表:product(id,name,price,category_id),category(id,name),如何查询出“电子”类产品的总价格?如何将两张表关联显示?如何将这两个问题合在一起显示出来?
    select sum(a.price) from product a,category b where a.category_id=b.id and b.name=“电子”;
    select a.* , b.name from product a left join category b on a.category_id = b.id and b.name=“电子”;
    基本的SQL联表查询,第二个问题用了left join,于是引发出了第三个问题,第三个问题用inner join。
    面试官问了下left join和inner join的区别,left join会将左表未匹配上右表的数据也显示出来,inner join只显示一一匹配的数据。

版权声明:本文为博主作者:懒懒的小菜鸟原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/weixin_42258032/article/details/129850270

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2024年1月3日
下一篇 2024年1月3日

相关推荐