金三银四,中高级测试面经,第二波来袭!


点击上方蓝字“清菡软件测试”,关注并选择“设为星标”

日拱一卒,功不唐捐

作者:清菡

个人博客:qinghan586.github.io

写在前面

一个简单的问题,如果深入思考,其实会引发很多的疑问,需要了解很多自己不会的知识。想做到高级测试甚至测试架构,要会的知识还有很多。学的越多,发现自己不会的知识越多,希望大家学习过程中不要浅尝辄止。

金三银四,祝大家前程似锦!

1.天猫首页如何测试?或者关注哪些测试点?

图片来自网络

群友回复仅供参考:

从功能、兼容性、性能、易用性、安全等分析测试点。

页面你的正确展示情况以及查看页面每一个功能点是否会正确跳转。像这样内容比较多的页面,需要考虑到页面的加载。具有时令性的图片物品是否正确展示。然后对上方的免费注册按钮的跳转页面做了一个具体的设计。

比如双十一,很多人同时访问这个 list 接口,考虑到并发。可以用 fiddler 做弱网络模拟,3g、4g 等网络切换测试。

浏览器兼容性,不同的端(苹果、安卓),不同操作系统。修改 list 接口的入参和返回数据(打断点)试试。

2.界面新增一条数据然后删除,但是还是可以查询到它。数据库中还有这个数据。如何排查问题?

首先需要抓包看下,一般新增接口是 add,删除接口是 delete 或者叫做 remove。如何定位前后端问题,请看文章按 F12,你真的会准确定位前后端问题吗?

这个问题,如果前端开发没做自动刷新,就手动刷新一下。

1.先去看删除后,有没有调用查询接口,没调用 list 接口也是前端的问题。

2.看到调用了 list 接口,看查询接口的参数对不对,如果查询接口的入参和返回值都对,就证明 List 接口没问题。该数据还在,是因为 delete 接口没删除成功,然后你再看看 delete 接口的入参和返回值对不对,定位前后端问题。

数据删除前是显示在页面的,删除后,一般会自动刷新列表数据,不需要手动点击刷新的。

这个问题考验的是测试思路,同类问题很多,而且可能是不同场景,要活学活用。

问题延伸:有些公司的前端开发没做自动刷新,就需要手动清除缓存,这个是不规范的。遇到此类问题需要提到禅道的。

另,如果考数据库,可以看下数据库,看看值在不在。如果值不在了,但是接口还有返回值,就是接口的问题,给后端开发提。

如果接口没有返回值了,前端还展示这个数据,就是前端问题。缓存问题也是前端问题,因为它没做自动刷新。

2.1 清缓存和自动刷新什么区别?

以下是我和某资深测开的对话:

测开:

为什么要自动刷新?比如说我们正常在开发一个平台的时候,创建用户,那是不是就是创建完之后,是不是就让用户知道已经添加进去了?然后我们删除用户,是不是就应该把那用户在列表中移除?

1.要么做完之后你自动去调用一个 list 接口,然后把那个页面重新渲染一下。

2.要么直接就是删完之后,我调用一个前端的一个组件,把缓存从列表中删除。一般情况下都会有这两种方式去让用户立马就可以获得感受到这种变化。

其实就是我们在写 web 自动化的时候,不需要考虑手动去刷新一下页面,然后让他去可以感知到这个东西已经变化了。

其实,正常情况就是我们前端在写东西的时候就应该让他就是创建完或者删除完,他立马就是让用户可以感知到这个已经是存在的,或者是已经被删除掉了。

一般情况下,严格意义来说,如果他没有让用户感受到这种变化的话,其实本来就是用户易用性上是有一定的问题的。

其实我们正常用 selenium 写 web 自动化的时候,打开就是一个无痕的一个浏览器,其实没必要再去做强制的刷新,除非前端真的在页面上没有做自动刷新。

小编:

但是我之前的那个网站删除一条数据后,一般都会显示删除掉了,点击确定以后他就界面没这个数据,那就是做自动刷新吧,那我是理解是这样。

但是就是遇到一种场景,就是每次开发改完 bug,我都要手动清除浏览器的缓存,按那个 control shift delete。不然的话,我看到了那个网站,还是之前的那个没改 bug 之前的状态,那这个和自动刷新有关系吗?

测开:

这个是没问题的。因为每次开发改完之后,他提交代码跟原来可能是不一样的。但是你以前用的一些东西,像我们正常去写平台啊,就是前面的东西,其实你都是放在那个 local storage 的。如果放在 local storage,其实他是放在你的本地的那个,就相当于浏览器的一个数据库里面。

如果这个的话你不把它清除的,(比如说你的用户信息啊,或者一些用户的一个 session)不把它给清除,其实是对你现在的测试是会有影响的。

测开:

一般比较简单的页面可以这么说,一般复杂的平台很多操作涉及到资源的,会很慢需要异步操作的,那就需要手动刷新才行。

怕误导大家,给出聊天截图:

根据实际情况,方式也不一样,以上回复,原理正确,但仅供参考。

3.用户在前端发起请求,到最后响应结果的全过程。画图,考虑详细一些。

考察面试者的网络整合知识。

群友回复,仅供参考:

涉及到 tcp 的三次握手。http 分好多层,它们的所有步骤集合起来被称为一次 http 请求,通讯是在硬件层来实现的,通讯完成之后,得到数据在一层层的向上解析,直到我们的应用层,发送也是一样,应用发送数据,最终到硬件层,发送出去。

参考OSI 七层模型深入讲解

图片来自网络

服务器上可以配置域名和服务器 ip 地址的映射,你访问的 url 到达网络通信商(比如联通、电信、移动),它们会再转发到域名地址解析服务商那,根据你请求的域名解析成具体的 ip,这样就能找到你要访问的服务器了。

解析到服务器后,再根据配置的 url 的路径找到服务器下对应路径下的文件,服务器根据你的请求再将内容返回到你这端。

4.linux 中的 io 指的是什么?

计算机中的 I/O 总线(输入输出总线),主要用于联系硬盘、USB、网卡等接口设备,和这些设备的数据“交流”(读与写),就可以叫做 I/O 操作。

分析数据流写入硬盘的过程,图片来自网络

使用百度打开链接:https://blog.csdn.net/u014106644/article/details/84565912

5.sql 的 select 语句完整执行顺序?

select 语句完整语法:


select   目标表的列名或列表达式序列
from  基本表名和(或)视图序列
[where  行条件表达式]
[group by  列名序列]
[having  组条件表达式]
[order by 列名[asc | desc]]

整个语句的执行过程如下:

  • 1)读取 from 子句中基本表、视图的数据,执行笛卡尔积操作;
  • 2)选取满足 where 子句中给出的条件表达式的元组;
  • 3)按 group 子句中指定列的值分组,同时提取满足 having 子句中组条件表达式的那些组;
  • 4)按 select 子句中给出的列名或列表达式求值输出;
  • 5)order 子句对输出的目标表进行排序,按附加说明 asc 升序排列,或按 desc 降序排列。

链接复制到百度打开:https://blog.csdn.net/yutianzuijin/article/details/12243751


注:文章中的链接是本人整理过来的,皆来自网络。链接中的视频、文章版权皆归原作者所有。计算机知识都一样,文章是小编整理的。如有雷同,纯属巧合。

公众号 清菡软件测试 首发,更多原创文章:清菡软件测试 131+原创文章,欢迎关注、交流,禁止第三方擅自转载。如有转载,请标明出处。


Author: 清菡
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source 清菡 !
  TOC