菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
349
0

软件测试面试题【更新中】

原创
05/13 14:22
阅读数 34788

测试基础

微信发红包功能测试点

滴滴打车排队测试点

如何提高测试用例覆盖率

app与web测试区别

接口测试

GET和POST区别

  1. Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都是不可见的, 数据放在请求体中。
  2. Get传送的数据量较小,这主要是因为受URL长度限制;Post传送的数据量较大,一般被默认为不受限制。
  3. Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。
  4. Get执行效率却比Post方法好。Get是form提交的默认方法。

HTTP响应状态码

1xx 处理信息,服务器收到请求,需要请求者继续执行操作;
2xx 请求成功,操作被成功接收并处理;
3xx 重定向,需要进一步的操作以完成请求;
4xx 客户端错误,请求包含语法错误或无法完成请求;
5xx 服务器错误,服务器在处理请求的过程中发生了错误;

OSI七层模型

image

TCP 三次握手漫画图解

image
image

  • 客户端–发送带有 SYN 标志的数据包–一次握手–服务端
  • 服务端–发送带有 SYN/ACK 标志的数据包–二次握手–客户端
  • 客户端–发送带有带有 ACK 标志的数据包–三次握手–服务端

为什么要三次握手

三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。

第一次握手:Client 什么都不能确认;Server 确认了对方发送正常,自己接收正常

第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:对方发送正常,自己接收正常

第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送、接收正常

所以三次握手就能确认双发收发功能都正常,缺一不可。

第2次握手传回了ACK,为什么还要传回SYN?

接收端传回发送端所发送的ACK是为了告诉客户端,我接收到的信息确实就是你所发送的信号了,这表明从客户端到服务端的通信是正常的。而回传SYN则是为了建立并确认从服务端到客户端的通信。”

SYN 同步序列编号(Synchronize Sequence Numbers) 是 TCP/IP 建立连接时使用的握手信号。在客户机和服务器之间建立正常的 TCP 网络连接时,客户机首先发出一个 SYN 消息,服务器使用 SYN-ACK 应答表示接收到了这个消息,最后客户机再以 ACK(Acknowledgement)消息响应。这样在客户机和服务器之间才能建立起可靠的 TCP 连接,数据才可以在客户机和服务器之间传递。

为什么要四次挥手

image
TCP四次挥手

断开一个 TCP 连接则需要“四次挥手”:

客户端-发送一个 FIN,用来关闭客户端到服务器的数据传送
服务器-收到这个 FIN,它发回一 个 ACK,确认序号为收到的序号加1 。和 SYN 一样,一个 FIN 将占用一个序号
服务器-关闭与客户端的连接,发送一个FIN给客户端
客户端-发回 ACK 报文确认,并将确认序号设置为收到序号加1
任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。

举个例子:A 和 B 打电话,通话即将结束后,A 说“我没啥要说的了”,B回答“我知道了”,但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话,于是 B 可能又巴拉巴拉说了一通,最后 B 说“我说完了”,A 回答“知道了”,这样通话才算结束。

TCP与UDP区别

UDP TCP
是否连接 无连接 面向连接
是否可靠 不可靠传输,不使用流量控制和拥塞控制 可靠传输,使用流量控制和拥塞控制
连接对象个数 支持一对一,一对多,多对一和多对多交互通信 只能是一对一通信
传输方式 面向报文 面向字节流
首部开销 首部开销小,仅8字节 首部最小20字节,最大60字节
传输速度
适用场景 适用于实时应用(IP电话、视频会议、直播等) 适用于要求可靠传输的应用,例如文件传输

总结:

  1. TPC于UDP都是传输协议,TCP是面向连接的,可靠的传输协议,保证不丢包,不重复的过程,就像打电话一样,建立一个拨号连接,比如生活中的例子:网页获取,电子邮件等。
  2. UDP是面向无连接的,不可靠的传输协议,传输过程没有连接和断开,数据收发自由。网络较差,对传输的可靠性不高。比如:网络视频通话,群聊等。

自动化测试

定位隐藏元素

定位弹窗

我们常见的alert弹窗有两种:基于windows弹窗和基于web页面弹窗
我们知道,webdriver是能够处理alert弹窗的,Selenium提供了Alert这个接口。相关操作代码如下:
// 切换到Alert
Alert alert = driver.switchTo().alert();
// 点击弹窗上确定按钮
alert.accept();
// 点击弹窗的取消按钮
alert.dismiss()
// 获取弹窗上线上的文本文字内容
alert.getText();
// 有些弹窗还支持文本输入,这个可以把要输入字符通过sendkeys方法输入
alert.sendkeys();

定位下拉框

通常我们也可以通过Click方法来点击下拉菜单里面的元素,还有一种方法,在Selenium中有一个类叫Select,支持这种下拉菜单交互的操作。
基本使用语法是这样的:
Select Se=new Select(element);
Se.selectByIndex(index);
Se.selectByvalue(value);
Se.selectByVisibleText(text);

rf框架

如果维护用例,你们用例分几层的?

解耦

  1. 对象化,目前比较常用 PO 模式,核心思想就是对象,这种方式应用在前端和后端的测试封装
  2. 层次化,比如场景用例层、数据层、对象层、关键字层等等
  3. 不断优化目录结构
  4. 每天定时执行,对经常失败的优化

你的项目中,进行自动化测试的目标是什么?

1.提升测试效率
2.提升数据客观性与准确性
3.节省人力成本

安全测试

如果一个网站存在CSRF漏洞,可以通过CSRF漏洞做下面那些事情?

答:跨站请求伪造:攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。

编程题

python生成100个不重复的4位数随机数

import random
for i in range(100):
    print(random.randint(1000, 9999))

经典面试题

测试网页为什么打开的比较慢

一、针对这个题目我们可以简单理解成是server端出现的问题,而不是client端出现了问题(用户网络不好包括域名服务器解析等可能),当然面试官要考你用户端的知识,例如域名解析,也是有挺多可以考到的知识点,但单就这个问题,更强调的是server端的知识点。下面逐一来剖析可能的原因:

(1)可能的原因一:服务器出口带宽不够用。这是一个很常见的瓶颈。一方面,可能是本身购买的服务器出口带宽就很小(企业购买带宽相当昂贵),一旦用户访问量上来了,并发量大了,自然均分给用户的出口带宽就更小了,所以某些用户的访问速度就会下降了很多。另一个,就是跨运营商网络导致带宽缩减,例如很多公司的网站(服务器)是放在电信的网络上的,而如果用户这边对接的是长城或者说联通的宽带,运营商之间网络传输在对接时是会有限制的,这就可能导致带宽的缩减。

(2)可能原因二:服务器负载过大忙不过来,比如说CPU和内存消耗完了,这个容易理解,不展开。

(3)可能原因三:网站的开发代码没写好,例如mysql语句没有进行优化,导致数据库的读写相当耗费时间。

(4)可能原因四:数据库的瓶颈,也是很常见的一个瓶颈,这点跟上面第三个原因可以一起来说。当我们的数据库变得愈发庞大,比如好多G好多T这么大,那对于数据库的读写就会变得相当缓慢了,索引优化固然能提升一些效率,但数据库已经如此庞大的话,如果每次查询都对这么大的数据库进行全局查询,自然会很慢。这个学过数据库的话也是挺容易理解的。

二、针对上面可能的原因,有哪些方法和工具去检测呢:

(1)某个用户反馈网站访问变慢,怎么去定位问题。首先你自己也打开下网站,看是否会出现用户反映的问题,如果你这边访问没问题,那就可能是用户那边的问题了,这块就是要先确定是用户那一方的问题还是自身比如说服务器或者网站的问题。

(2)发现确实是自己服务器或者网站的问题,那么可以利用浏览器的调试功能(一般浏览器都会有),调试网络看看各种数据加载的速度,哪一项消耗了多少时间都可以看到,是哪块数据耗时过多,是图片加载太慢,还是某些数据加载老半天都查不出来。

(3)然后针对服务器的负载情况,可以去查看下服务器硬件(网络带宽、CPU、内存)的消耗状况。带宽方面查看流量监控看是不是已经到了峰值,带宽不够用了,如果是公司自己买服务器搭的网站服务器的话,需要自己搭建监控环境;如果用的是阿里云腾讯云这些的,那这些平台那边会提供各方面的监控比如CPU、带宽等等,在后台就可以看到了。

(4)如果发现硬件资源消耗都不高,都比较充裕,那要去看看是不是程序的问题了。这个可以通过查日志来找,比如PHP日志、Apache日志、mysql日志等等的错误日志,特别如mysql有个慢查询的日志功能,可以看到是不是某条mysql语句特别慢,如果某条语句花的时间太长,那这条语句很有可能有问题。

(5)至于说到的数据库太庞大,这个直接看就看得到了,比如一个表的文件大小变得特别大了。

三、针对上面的这些问题,有哪些解决和优化的办法呢:

(1)出口带宽的问题,这个很简单,加带宽,有钱就多买带宽,很简单。

(2)mysql语句优化,开发人员职责。

(3)数据库太庞大,为了读写速度,进行“拆表”、“拆库”,就是把数据表或者数据库进行拆分。

(4)上面的拆库拆表都是针对数据库实在太庞大才会这样做,一般在此之前会有其他优化方法,比如mysql的主从复制,一台主服务器专门用于写,然后其他从服务器用来读,写完之后会同步更新到其他读的服务器中。例如阿里的双十一活动,都不知道用了多少万台服务器一起在扛着。

(6)还有这几年用得比较多的非关系型数据库,它使用了缓存机制,它把数据缓存到了内存,用户访问数据直接从内存读取,读取速度就比在磁盘中读取快了很多,还有它的一个key-value读取机制,这个听师兄说之后没听懂。

(7)CDN(content-delivery-network:内容分发网络),鸡蛋放在多个篮子里,把数据放在离用户更近的位置(例如网站的一些静态文件比如图片或者js脚本),用户访问时判断IP来源是广州,那就通过智能DNS解析到广州的服务器上,直接从广州的篮子里去获取数据,速度就快了。这里有个静态数据和动态数据的概念,例如图片和一些js文件一般是不变的,那就可以把它们的映像分布到全国各地,加快速度,而一些需要在网站后台动态产生的一些数据,则需要去到网站所在的服务器去产生并得到。这个涉及到两种数据的显示的问题,这就交由浏览器处理了。同时异步加载的技术例如前端的Ajax技术,异步请求数据,可以使这些动态数据延迟加载,这块自己不怎么了解,可能表述不好。前端开发的人员应该更懂一些。

(8)上面都没有说到架构的优化,如果网站扛不住,是不是网站架构已经不能适应了,比如做个小博客把数据库服务器和web服务器都用同一台服务器,那所有负载都在同一台服务器上了。但是访问量上来扛不住了,就得加服务器了,就得在架构上优化了,比如在数据库上做集群,在web服务器上也做集群,比如web服务器集群,在服务器前面加一个负载均衡,负载均衡就是专门负责分发,把用户的请求均匀分布到各个服务器上。

发表评论

0/200
349 点赞
0 评论
收藏