测试面试题合集3(测试相关)

1、cookie 和 session 的区别

http 请求无状态

session 在服务器端,cookie 在客户端(浏览器)

session 默认被存在在服务器的一个文件里(不是内存)

session 的运行依赖 session id(随机字符串),而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)

session 可以放在 文件、数据库、或内存中都可以。维持 session 以及多机器同步 session 需要耗费大量资源。

token(令牌) 用算法对用户数据进行加密,返回给客户端一个 token,下次用户请求的时候放到 http header 里面传给服务器。服务器进行解密使用。

2、简述 http 请求中 get 和 post 的区别,常见的 post 提交数据类型以及区别

HTTP 定义了与服务器交互的不同方法,常用的有 4 种,Put(增),Delete(删),Post(改),Get(查),即增删改查。最常用的是 get 和 post。

get 请求 url,可以带参数,参数用?与 url 分开,多个参数以&拼接  形式 http://url?key=value&key2=value2...  (url 过长会提示 414 错误)

post 向指定的 url 提交数据 

常见 3 种提交方式

application/x-www-form-urlencoded,key1=val1&key2=val2 

application/json,son 格式

form-data,生成了一个 boundary 用于分割不同的字段,可以上传文件

3、app 性能测试

关注一些参数 FPS、Jank、FTime、CPU、GPU、Memory、Battery 、Network、CTemp等性能参数

4、用 python 获取请求的状态码,常见的状态码有哪些
import requests
r = requests.get('https://www.baidu.com')
print(r.status_code)

常见状态码: 200,301,400,404,500,503等

不应以状态码判断业务是否正常,在性能或者接口测试中,状态码返回 200,业务可能已经错误。

5、描述 tcp/ip 协议的层次结构,以及每一层中的协议

1.链路层(数据链路层/网络接口层):包括操作系统中的设备驱动程序、计算机中对应的网络接口卡

2.网络层(互联网层):处理分组在网络中的活动,比如分组的选路。

3.运输层:主要为两台主机上的应用提供端到端的通信。

4.应用层:负责处理特定的应用程序细节。

6、常见的 http 协议调试代理工具有哪些,怎么抓取 https 协议

fiddler、charles 等

简单的说安装工具带的证书,导入的信任证书栏,工具里开启抓取 https 选项。

7、fiddler 怎么抓 app

fiddler抓取手机app数据

8、简述一次完整的 http 事务过程

• 域名解析

• 发起TCP3次握手

• 建立TCP连接后发起http请求

• 服务器响应请求,返回结果

• 浏览器得到html标签代码

• 浏览器解析html代码中的资源,例如js,css,img等

• 浏览器对页面进行渲染并呈现给用户

9、http 请求 header 中有哪些常用的 tag

"headers": {

    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", 

    "Accept-Encoding": "gzip, deflate", 

    "Accept-Language": "zh-CN,zh;q=0.9", 

    "Cookie": "UM_distinctid=173b70175043d8-0eab64d97191f6-43450521-1fa400-173b7017505807; CNZZDATA1256793290=1446484856-1596499673-%7C1597822838", 

    "Dnt": "1", 

    "Host": "httpbin.org", 

    "Upgrade-Insecure-Requests": "1", 

    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36", 

    "X-Amzn-Trace-Id": "Root=1-5f58cae5-9dceb360c71bbe3c8cf56c8e"

  }

10、为什么 tcp 需要第三次握手,而不是两次或者四次?

在 TCP/IP 协议中,TCP 协议提供可靠的连接服务,采用三次握手建立一个连接。

第一次握手:建立连接时,客户端发送 syn 包(syn=j)到服务器,并进入 SYN_SEND 状态,等待服务器确认;

第二次握手:服务器收到 syn 包,必须确认客户的 SYN(ack=j+1),同时自己也发送一个 SYN 包(syn=k),即 SYN+ACK 包,此时服务器 进入 SYN_RECV 状态;

第三次握手:客户端收到服务器的 SYN+ACK 包,向服务器发送确认包 ACK(ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED 状态,完成三次握手。

通过这样的三次握手,客户端与服务端建立起可靠的双工的连接,开始传送数据。

三次握手的最主要目的是保证连接是双工的,可靠更多的是通过重传机制来保证的。 

(全双工:指可以同时(瞬时)进行信号的双向传输(A→B且B→A)。指A→B的同时B→A,是瞬时同步的。

半双工:指一个时间内只有一个方向的信号传输(A→B或B→A)。)

两次握手只能保证单向连接是畅通的。

Step1       A -> B : 你好,B。

Step2       A <- B : 收到。你好,A。

这样的两次握手过程,A 向 B 打招呼得到了回应,即 A 向 B 发送数据,B 是可以收到的。

但是 B 向 A 打招呼,A 还没有回应,B 没有收到 A 的反馈,无法确保 A 可以收到 B 发送的数据。

只有经过第三次握手,才能确保双向都可以接收到对方的发送的 数据。

Step3       A -> B : 收到,B。

这样 B 才能确定 A 也可以收到 B 发送给 A 的数据。

第二次握手,服务器接受并发送(相当于两次) ,可以提高连接的速度与效率 。所以不是 2 次和 4 次

posted @ 2020-09-17 20:23  天线努力  阅读(431)  评论(0)    收藏  举报