导图社区 软件测试面试常问的术语问题汇总
软件测试面试常问的几个术语:http请求方式的get与post的区别、http的请求原理是、TCP与UDP的区别、cookie和session的区别、做好软件测试的关键,测试工程师具备的素质、性能测试常用的指标
编辑于2022-07-14 16:47:53软件测试面试常问的术语问题汇总
http请求方式的get与post的区别
1、Get 是用来从服务器上获得数据,而 Post 是用来向服务器上传递数据。
2、Get 将表单中数据的按照 variable=value 的形式,添加到 action 所指向的 URL 后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post 是将表单中的数据放在 form 的数据体中,按照变量和值相对应的方式,传递到 action 所指向 URL。
3、Get 是不安全的,因为在传输过程,数据被放在请求的 URL 中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。Post 的所有操作对用户来说都是不可见的。
4、Get 传输的数据量小,这主要是因为受 URL 长度限制;而 Post 可以传输大量的数据,所以在上传文件只能使用 Post(当然还有一个原因,将在后面的提到)。
5、Get 限制 Form 表单的数据集的值必须为 ASCII 字符;而 Post 支持整个 ISO10646 字符集。
6、Get 是 Form 的默认方法。
使用 Post 传输的数据,可以通过设置编码的方式正确转化中文;而 Get 传输的数据却没有变化。在以后的程序中,一定要注意这一点。
http的请求原理是什么
HTTP请求
HTTP是一套计算机通过网络进行通信的规则
客户端通过发送 HTTP 请求向服务器请求对资源的访问
它向服务器传递了一个数据块,也就是请求信息,HTTP 请求由三部分组成:请求行、请求头和请求正文
一次完整的http请求过程
1、TCP建立连接
HTTP协议是基于TCP协议来实现的,因此首先就是要通过TCP三次握手与服务器端建立连接,一般HTTP默认的端口号为80;
2、浏览器发送请求命令
在与服务器建立连接后,Web浏览器会想服务器发送请求命令
3、浏览器发送请求头消息
在浏览器发送请求命令后,还会发送一些其它信息,最后以一行空白内容告知服务器已经完成头信息的发送;
4、服务器应答
在收到浏览器发送的请求后,服务器会对其进行回应,应答的第一部分是协议的版本号和应答状态码;
5、服务器回应头信息
与浏览器端同理,服务器端也会将自身的信息发送一份至浏览器
6、服务器发送数据
在完成所有应答后,会以Content-Type应答头信息所描述的格式发送用户所需求的数据信息
7、断开TCP连接
在完成此次数据通信后,服务器会通过TCP四次挥手主动断开连接。但若此次连接为长连接,那么浏览器或服务器的头信息会加入keep-alive的信息,会保持此连接状态,在有其它数据发送时,可以节省建立连接的时间;
http请求流程示意图
HTTP工作原理
连接:由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。
请求:HTTP服务器则在那个端口监听客户端发送过来的请求
响应:服务器(向客户端)发回一个状态行,比如"HTTP/1.1 200 OK",和(响应的)消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息
客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机 与服务器断开 连接
TCP与UDP的区别
TCP/IP网络模型
TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP。
TCP/IP 是互联网相关的各类协议族的总称,比如:TCP,UDP,IP,FTP,HTTP,ICMP,SMTP 等都属于 TCP/IP 族内的协议
TCP/IP模型是互联网的基础,它是一系列网络协议的总称。这些协议可以划分为四层,分别为应用层、传输层、网络层和链路层
应用层:负责向用户提供应用程序,比如HTTP、FTP、Telnet、DNS、SMTP等。
传输层:负责对报文进行分组和重组,并以TCP或UDP协议格式封装报文。
网络层:负责路由以及把分组报文发送给目标网络或主机。
链路层:负责封装和解封装IP报文,发送和接受ARP/RARP报文等。
TCP
TCP协议全称是传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议
TCP连接过程
第一次握手
客户端向服务端发送连接请求报文段。该报文段中包含自身的数据通讯初始序号。请求发送后,客户端便进入 SYN-SENT 状态。
第二次握手
服务端收到连接请求报文段后,如果同意连接,则会发送一个应答,该应答中也会包含自身的数据通讯初始序号,发送完成后便进入 SYN-RECEIVED 状态。
第三次握手
当客户端收到连接同意的应答后,还要向服务端发送一个确认报文。客户端发完这个报文段后便进入 ESTABLISHED 状态,服务端收到这个应答后也进入 ESTABLISHED 状态,此时连接建立成功。
这里可能大家会有个疑惑:为什么 TCP 建立连接需要三次握手,而不是两次?这是因为这是为了防止出现失效的连接请求报文段被服务端接收的情况,从而产生错误。
TCP断开链接
TCP 是全双工的,在断开连接时两端都需要发送 FIN 和 ACK。
第一次握手
若客户端 A 认为数据发送完成,则它需要向服务端 B 发送连接释放请求。
第二次握手
B 收到连接释放请求后,会告诉应用层要释放 TCP 链接。然后会发送 ACK 包,并进入 CLOSE_WAIT 状态,此时表明 A 到 B 的连接已经释放,不再接收 A 发的数据了。但是因为 TCP 连接是双向的,所以 B 仍旧可以发送数据给 A。
第三次握手
B 如果此时还有没发完的数据会继续发送,完毕后会向 A 发送连接释放请求,然后 B 便进入 LAST-ACK 状态。
第四次握手
A 收到释放请求后,向 B 发送确认应答,此时 A 进入 TIME-WAIT 状态。该状态会持续 2MSL(最大段生存期,指报文段在网络中生存的时间,超时会被抛弃) 时间,若该时间段内没有 B 的重发请求的话,就进入 CLOSED 状态。当 B 收到确认应答后,也便进入 CLOSED 状态。
TCP协议的特点
面向连接
面向连接,是指发送数据之前必须在两端建立连接。建立连接的方法是“三次握手”,这样能建立可靠的连接。建立连接,是为数据的可靠传输打下了基础。
仅支持单播传输
每条TCP传输连接只能有两个端点,只能进行点对点的数据传输,不支持多播和广播传输方式。
面向字节流
TCP不像UDP一样那样一个个报文独立地传输,而是在不保留报文边界的情况下以字节流方式进行传输。
可靠传输
对于可靠传输,判断丢包,误码靠的是TCP的段编号以及确认号。TCP为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。
提供拥塞控制
当网络出现拥塞的时候,TCP能够减小向网络注入数据的速率和数量,缓解拥塞
UDP
UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议
OSI模型中,在第四层——传输层,处于IP协议的上一层
UDP的特点
面向无连接
首先 UDP 是不需要和 TCP一样在发送数据前进行三次握手建立连接的,想发数据就可以开始发送了。并且也只是数据报文的搬运工,不会对数据报文进行任何拆分和拼接操作
在发送端,应用层将数据传递给传输层的 UDP 协议,UDP 只会给数据增加一个 UDP 头标识下是 UDP 协议,然后就传递给网络层了
在接收端,网络层将数据传递给传输层,UDP 只去除 IP 报文头就传递给应用层,不会任何拼接操作
有单播,多播,广播的功能
UDP 不止支持一对一的传输方式,同样支持一对多,多对多,多对一的方式,也就是说 UDP 提供了单播,多播,广播的功能。
UDP是面向报文的
发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。
UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。因此,应用程序必须选择合适大小的报文
不可靠性
首先不可靠性体现在无连接上,通信都不需要建立连接,想发就发,这样的情况肯定不可靠
并且收到什么数据就传递什么数据,并且也不会备份数据,发送数据也不会关心对方是否已经正确接收到数据了。
再者网络环境时好时坏,但是 UDP 因为没有拥塞控制,一直会以恒定的速度发送数据。即使网络条件不好,也不会对发送速率进行调整
头部开销小,传输数据报文时是很高效的
对比
cookie和session的区别
cookie
cookie实际上是一小段的文本信息。
cookie的内容主要包括:名字,值,过期时间,路径和域。
路径与域一起构成cookie的作用范围。若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。
cookie机制
(1)客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个cookie。客户端会把cookie保存起来。
(2) 当浏览器再请求该网站时,浏览器把请求的网址连同该cookie一同提交给服务器。服务器检查该cookie,以此来辨认用户状态。服务器还可以根据需要修改cookie的内容。
session
Session是存在服务器的一种键值对结构存储用户数据。一般情况下,服务器会在一定时间内保存这个 Session,过了时间限制,就会销毁这个Session
session机制
(1)当浏览器第一次发送请求时,服务器自动生成了一个session和一个session id用来唯一标识这个session,并将其通过响应发送到浏览器。
(2)当浏览器第二次发送请求,会将前一次服务器响应中的session id放在请求中一并发送到服务器上,服务器从请求中提取出session id,并和保存的所有session id进行对比,找到这个用户对应的session。
保存session id的3种方式方式
1、cookie:用cookie保存的,用户提交页面时,将session id提交到服务器端,来存取Session数据。但cookie可能会被浏览器禁用。
2、重写URL:但是它的缺点是会动态生成每个 URL 来为页面分配一个 session 会话 ID。
3、隐藏表单字段,但是点击常规的超文本链接(<A HREF...>)不会导致表单提交,因此隐藏的表单字段也不支持常规的 session 会话跟踪。
cookie和session的区别
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的cookie,考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
性能测试常用的指标
响应时间
响应时间( Response Time)是指系统对用户请求做出响应所需要的时间
这个时间是指用户从软件客户端发出请求到用户接收到返回数据的整个过程所需要的时间,包括各种中间件(如服务器、数据库等)的处理时间
响应时间越短,表明软件的响应速度越快,性能越好
系统的响应时间会随着访问量的增加、业务量的增长等变长,一般在性能测试时,除了测试系统的正常响应时间是否达到要求之外,还会测试在一定压力下系统响应时间的变化
吞吐量
吞吐量( Throughput)是指单位时间内系统能够完成的工作量,它衡量的是软件系统服务器的处理能力。
吞吐量的度量单位可以是请求数/秒、页面数/秒、访问人数/天、处理业务数/小时等
并发用户数
并发用户数是指同一时间请求和访问的用户数量
并发用户数量越大,对系统的性能影响越大,并发用户数量较大可能会导致系统响应变慢、系统不稳定等
TPS( Transaction per Second)
TPS是指系统每秒钟能够处理的事务和交易的数量,它是衡量系统处理能力的重要指标
点击率( Hits per Second)
点击率是指用户每秒向Web服务器提交的HP请求数,这个指标是web应用特有的个性能指标
通过点击率可以评估用户产生的负载量,并且可以判断系统是否稳定。点击率只是一个参考指标,帮助衡量Web服务器的性能。
资源利用率
资源利用率是指软件对系统资源的使用情况,包括CPU利用率、内存利用率、磁盘利用率等。
资源利用率是分析软件性能瓶颈的重要参数
接口测试怎么做的
为什么要做接口测试
1、越底层发现bug,它的修复成本是越低的。
2、前端随便变,接口测好了,后端不用变,前后端是两拨人开发的。
3、检查系统的安全性、稳定性
4、如今的系统复杂度不断上升,传统的测试方法成本急剧增加且测试效率大幅下降,接口测试可以提供这种情况下的解决方案。
5、接口测试相对容易实现自动化持续集成,且相对UI自动化也比较稳定,可以减少人工回归测试人力成本与时间,缩短测试周期,支持后端快速发版需求。接口持续集成是为什么能低成本高收益的根源。
6、现在很多系统前后端架构是分离的,从安全层面来说:
(1)、只依赖前端进行限制已经完全不能满足系统的安全要求(绕过前面实在太容易),需要后端同样进行控制,在这种情况下就需要从接口层面进行验证。
(2)、前后端传输、日志打印等信息是否加密传输也是需要验证的,特别是涉及到用户的隐私信息,如身份证,银行卡等。
接口测试实际跟一般测试不同就是测试用例的设计部分。使用的工具是postman或者JMeter
获取接口规范,了解接口实现逻辑,实现逻辑覆盖(语句/条件/分支/判定/…)
设计接口测试功能用例(主要从用户角度出发看接口能否实现业务需求,用例设计就是黑盒用例那一套测试用例方法)。
各种入参验证(正常情况,异常情况包括输入参数个数不对,类型不对,可选/必选,还有考虑参数有互斥或关联的情况)。
接口返回值各种验证(符合接口文档需求)
测试工程师应具备的素质和技能
掌握基本的测试基础理论
本着找出软件存在的问题的态度进行测试,不要以挑刺的形象出现
可熟练阅读需求规格说明书等文档
以用户的观点看问题
有强烈的质量意识
细心和责任心
良好的有效沟通方式
能够及时准确的判断出高危险区在何处
设身处地为客户着想,从他们的角度去测试系统
善于怀疑
做好软件测试的关键
测试人员必须经过测试基础知识和理论的相关培训
测试人员必须熟悉系统功能和业务
测试要有计划,且测试方案要和整个项目计划协调好
必须实现编写测试用例,测试执行阶段必须根据测试用例进行
易用性、功能、分支、边界、性能等功能和非功能性需求都要进行测试
对于复杂的流程一定要进行流程分支,组合条件分析,再进行等价类划分,准备相关测试数据
测试设计的一个重要内容是要准备好具体的测试数据,清楚这个测试数据是测试哪个场景或分支的
个人任务平均每三个测试用例至少应该发现一个bug,否则只能说明测试用例质量不好
对于每天构建的重复测试可以考虑测试自动化测试