软件测试面试八股文(校招版)第一版(文心一言生成)

目录

1、http和https区别

HTTP 与 HTTPS 区别

2、http请求消息和响应消息的格式

HTTP请求消息格式

HTTP响应消息格式

3、在浏览器中输入url地址,会发生什么

4、MySQL知道什么函数,如order by,count()

5、进程和线程

6、用的什么语言

7、==和equals()区别

8、String是Java的基本数据类型吗,String有什么方法

10、知道安卓的组件吗(不知道

11、测试流程

12、实习期间遇到印象最深的bug

13、怎么测试前后端

14、UI自动化测试三种等待方式

15、tcp的三次握手

16、Tcp和udp的区别

17、python浅拷贝与深拷贝

浅拷贝(Shallow Copy)

深拷贝(Deep Copy)

总结

18、装饰器是什么/作用

19、linux命令

20、什么选择软件测试这个行业

35. 测试一下微信支付功能

21、DNS域名解析的具体过程

22、本地DNS在哪里查询

23、知道DNS攻击吗

24、get和post区别

25、get和post发送请求时在tcp层面有什么不同

26、进程和线程

27、进程间如何通信

28、平衡二叉树

29、哈希冲突

30、list和tuple区别

31、 压力测试咋做的?

32、测试脚本要注意哪些内容?

33、 覆盖率是算的增量还是全量?

34. 测试覆盖率如何保障?


1、http和https区别

HTTP(HyperText Transfer Protocol:超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。 简单来说就是一种发布和接收 HTML 页面的方法,被用于在 Web 浏览器和网站服务器之间传递信息。

HTTP 默认工作在 TCP 协议 80 端口,用户访问网站 http:// 打头的都是标准 HTTP 服务。

HTTP 协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。

HTTPS(Hypertext Transfer Protocol Secure:超文本传输安全协议)是一种透过计算机网络进行安全通信的传输协议。HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包。HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。

HTTPS 默认工作在 TCP 协议443端口,它的工作流程一般如以下方式:

  • 1、TCP 三次同步握手
  • 2、客户端验证服务器数字证书
  • 3、DH 算法协商对称加密算法的密钥、hash 算法的密钥
  • 4、SSL 安全加密隧道协商完成
  • 5、网页以加密的方式传输,用协商的对称加密算法和密钥加密,保证数据机密性;用协商的hash算法进行数据完整性保护,保证数据不被篡改。

HTTP 与 HTTPS 区别

  • HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好。
  • 使用 HTTPS 协议需要到 CA(Certificate Authority,数字证书认证机构) 申请证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。
  • HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
  • http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
  • HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源。


2、http请求消息和响应消息的格式

HTTP请求消息和响应消息的格式是HTTP协议中重要的组成部分,它们定义了客户端和服务器之间如何进行通信。

HTTP请求消息格式

HTTP请求消息由请求行、请求头部、空行和请求正文四个部分组成。

  1. 请求行:包括请求方法、请求的URL和HTTP协议版本。请求方法常见的有GET、POST、PUT、DELETE等。例如,GET /index.html HTTP/1.1 表示一个使用GET方法请求/index.html页面的HTTP/1.1请求。
  2. 请求头部:包含了一些附加信息,如浏览器类型、请求来源、请求时间等。这些信息以键值对的形式存在,每行一个键值对,键值对之间用冒号分隔。例如,User-Agent: Mozilla/5.0 表示用户代理信息。
  3. 空行:用于分隔请求头部和请求正文。如果请求没有正文,空行也是必需的。
  4. 请求正文:可选部分,包含发送给服务器的数据。在POST或PUT请求中,通常会有请求正文。

HTTP响应消息格式

HTTP响应消息由状态行、响应头部、空行和响应正文四个部分组成。

  1. 状态行:包括HTTP协议版本、状态码和状态描述。状态码用于表示请求的处理结果,如200表示成功,404表示未找到页面等。例如,HTTP/1.1 200 OK 表示一个HTTP/1.1协议的成功响应。
  2. 响应头部:类似于请求头部,包含了一些附加信息,如服务器类型、内容类型、内容长度等。
  3. 空行:用于分隔响应头部和响应正文。
  4. 响应正文:服务器返回给客户端的数据,可能是HTML页面、图片、视频等。

总结来说,HTTP请求消息和响应消息都遵循一定的格式规范,通过请求行、请求/响应头部、空行和请求/响应正文这几个部分,实现了客户端和服务器之间的通信和数据交换。


3、在浏览器中输入url地址,会发生什么


4、MySQL知道什么函数,如order by,count()

5、进程和线程


6、用的什么语言


7、==和equals()区别


8、String是Java的基本数据类型吗,String有什么方法


10、知道安卓的组件吗(不知道


11、测试流程


12、实习期间遇到印象最深的bug


13、怎么测试前后端


14、UI自动化测试三种等待方式

15、tcp的三次握手

首先,简要介绍TCP(传输控制协议)的作用:TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。

接着,详细解释三次握手的过程:

第一次握手:客户端发送一个SYN包(同步序列编号)到服务器,并进入SYN_SEND状态,等待服务器确认。SYN包中包含了客户端的初始序列号。

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

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

在解释过程中,可以强调三次握手的重要性,它确保了客户端和服务器之间的连接是可靠和安全的。同时,也可以提及三次握手过程中可能遇到的情况,如丢包、超时等,以及TCP协议如何处理这些情况。

最后,可以总结TCP三次握手的作用和意义:它确保了数据包的可靠传输,避免了因网络不稳定或其他因素导致的数据丢失或重复发送等问题。同时,通过三次握手建立的连接是双向的,客户端和服务器都可以在这个连接上进行数据的发送和接收。

16、Tcp和udp的区别

TCP(传输控制协议)和UDP(用户数据报协议)是计算机网络传输层中的两个重要协议,它们之间主要存在以下区别:

连接性:TCP是一种面向连接的协议,它要求在数据传输之前先建立一个连接。这个连接建立过程通常被称为“三次握手”。而UDP则是一种无连接的协议,发送方不需要提前与接收方建立连接,可以直接向接收方发送数据。

可靠性:TCP对数据的可靠性要求非常严格。它使用确认和重传机制来确保数据的完整性和正确性。如果数据在传输过程中丢失或损坏,TCP会进行重传。相比之下,UDP对数据的可靠性要求较低,它不提供确认、重传和流量控制机制。如果数据丢失或损坏,UDP不会进行重传。

速度和效率:由于TCP需要建立连接和使用确认重传机制,因此它通常比UDP的速度更慢。UDP没有连接建立和确认重传的开销,因此在数据传输速度方面通常比TCP更快。此外,当网络拥堵时,TCP的拥塞控制机制会导致传输速度进一步下降,而UDP则不受此限制。

数据包大小:TCP将数据划分为较小的数据包进行传输,并根据网络状况进行调整。它没有固定的数据报大小限制。而UDP允许发送方一次性将多个数据包打包成一个较大的数据报进行传输,数据报的大小通常是在应用层自行决定的。

适用场景:TCP因其可靠性高的特点,主要适用于对数据可靠性要求较高的应用场景,如文件传输、电子邮件和网页浏览。而UDP因其传输速度快的特点,更适用于对通信速度要求较高的场景,如视频、音频、直播等。

17、python浅拷贝与深拷贝

浅拷贝(Shallow Copy)

浅拷贝会创建新的对象,这个对象有着原始对象中的一些对象引用,而不是原始对象本身的副本。也就是说,对于原始对象中的可变对象(如列表、字典等),浅拷贝只会拷贝其引用,而不会拷贝对象本身。因此,如果修改了原始对象中的可变对象,那么浅拷贝的对象也会受到影响。

在Python中,可以使用copy模块的copy()函数或切片操作来进行浅拷贝。

示例:

python复制代码

import copy

original_list = [1, 2, [3, 4]]

shallow_copy_list = copy.copy(original_list)

# 修改原始列表中的可变对象

original_list[2].append(5)

print(original_list) # 输出: [1, 2, [3, 4, 5]]

print(shallow_copy_list) # 输出: [1, 2, [3, 4, 5]]

在这个例子中,我们可以看到,当修改原始列表中的可变对象时,浅拷贝的列表也受到了影响。

深拷贝(Deep Copy)

深拷贝会递归地复制原始对象中的所有对象,包括对象中的可变对象。这意味着,对于原始对象中的任何可变对象,深拷贝都会创建一个新的对象副本,而不是仅仅复制其引用。因此,修改原始对象中的可变对象不会影响深拷贝的对象。

在Python中,可以使用copy模块的deepcopy()函数来进行深拷贝。

示例:

python复制代码

import copy

original_list = [1, 2, [3, 4]]

deep_copy_list = copy.deepcopy(original_list)

# 修改原始列表中的可变对象

original_list[2].append(5)

print(original_list) # 输出: [1, 2, [3, 4, 5]]

print(deep_copy_list) # 输出: [1, 2, [3, 4]]

在这个例子中,我们可以看到,即使修改了原始列表中的可变对象,深拷贝的列表也没有受到影响。

总结

  • 浅拷贝只复制对象本身和其包含的不可变对象的引用,对于可变对象,则复制其引用但不复制引用的对象。因此,修改原始对象中的可变对象会影响浅拷贝的对象。
  • 深拷贝会递归地复制对象本身及其包含的所有对象,包括可变对象。因此,修改原始对象中的任何对象都不会影响深拷贝的对象。

在选择使用浅拷贝还是深拷贝时,应根据具体需求和场景来判断。如果只需要复制对象本身和不可变对象,且不需要担心修改原始对象中的可变对象,那么可以使用浅拷贝。如果需要完全独立地复制对象及其包含的所有对象,那么应该使用深拷贝。


18、装饰器是什么/作用


19、linux命令

20、什么选择软件测试这个行业

我认为软件测试行业有着广阔的职业发展空间,而且无论什么语言开发的,都需要测试之后才能上线,加上我在校的时候接触测试比较多,对这方面了解比较多。

35. 测试一下微信支付功能

身份:支付者、收款者

条件:二维码实时刷新、绑定扫码人的账号ID、实时性

功能:扫码支付、商家收款码收款、展示支付成功界面、唯一性、完整性、原子性、顺序、金额、数字键盘弹出、中断事件、断电、断网、进度保存、金额限制、支付顺序、账户扣款、实时性

其他方面:性能、兼容性、易用性、可靠性、安全性、可维护、可移植性等

  1. 21、DNS域名解析的具体过程

  2. 22、本地DNS在哪里查询

  3. 23、知道DNS攻击吗

  4. 24、get和post区别

  5. 25、get和post发送请求时在tcp层面有什么不同

  6. 26、进程和线程

  7. 27、进程间如何通信

  8. 28、平衡二叉树

  9. 29、哈希冲突

  10. 30、list和tuple区别

    1. 31、 压力测试咋做的?

      先需求分析-找QPS高的接口,制定测试计划-啥时候测,写测试用例-衡量测试预期,写脚本-用JMeter,选定接口、加线程组、多少个线程、每个线程每秒请求几次,进行测试-执行脚本,看报告-是否符合预期,分析原因-为啥不符合,改进接口资源-重新测试

      需求分析:确定测试的目的、范围和重点。
    2. 制定测试计划:包括测试的时间、资源、环境等安排。
    3. 编写测试用例:根据需求和接口特点编写测试用例,包括预期结果和执行步骤。
    4. 编写测试脚本:使用压力测试工具如 JMeter 编写测试脚本,设置线程组、请求频率等参数。36、执行测试:运行测试脚本,生成测试报告。
    5. 分析报告:分析测试报告,查看接口性能是否符合预期。
    6. 改进接口资源:根据分析结果优化接口或增加资源。
    7. 重新测试:重新执行测试,验证改进效果。
  11. 32、测试脚本要注意哪些内容?

    1. 确保脚本能够覆盖到所有需要测试的接口和场景。
    2. 设置合理的并发线程数和请求频率,模拟真实的用户行为。
    3. 编写脚本时考虑到参数化,使得可以灵活地修改请求参数。
    4. 处理好脚本中的异常情况,如请求超时、服务器错误等。
    5. 定期更新脚本,适应接口和系统的变化。
  12. 33、 覆盖率是算的增量还是全量?

  13. 覆盖率可以是增量的,也可以是全量的。增量覆盖率是指新增的代码或功能被测试覆盖的程度;全量覆盖率是指整个代码或功能的测试覆盖程度。

    34. 测试覆盖率如何保障?

  14. 编写充分的测试用例:编写能够覆盖各种情况和分支的测试用例,包括正常情况、边界情况和异常情况。
  15. 使用测试覆盖率工具:使用工具如JaCoCo(Java)、Coverage.py(Python)等来分析代码覆盖情况,查看哪些代码行被测试覆盖到了,哪些没有覆盖到。
  16. 定期执行测试:定期执行测试用例,并分析测试覆盖率报告,确保代码得到充分覆盖。
  17. 持续集成:将测试集成到持续集成流程中,每次代码提交都自动运行测试用例,并生成测试覆盖率报告。
  18. 代码审查:进行代码审查,检查代码是否充分测试覆盖,是否存在遗漏的测试场景。
  19. 测试策略优化:根据测试覆盖率报告的反馈,优化测试策略,增加测试用例覆盖不足的部分。

     

  • 19
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值