TCP 和 UDP 的区别?如何保证 TCP 的可靠性?
TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议,他们之间的区别包括:
1.是否连接:TCP是面向连接的,UDP是无连接的,TCP的发送发要确认接收方是否收到数据段(3次握手协议)

2.传输可靠性:TCP是可靠的,UDP是不可靠的;TCP在数据包接收无序、丢失或在交付期间被破坏时,负责数据恢复,它通过为每个数据报提供一个序号来完成此恢复,为确保正确收到数据,TCP要求目标计算机成功收到数据时发回一个确认(即ACK),如果在某个时限内未收到相应的ACK,将重新传送数据包。如果网络拥塞,这种重新传送将导致发送的数据包重复,但是接收计算机可使用数据包的序号来确定它是否为重复数据包,并在必要时丢弃它。UDP协议不能保证数据准确无误的到达目的地,并不是说UDP就完全无法知道是否发生了错误,一个16位的UDP包包含了一个字节长的头部和数据的长度,校验码域使其可以进行整体校验,如:多媒体数据流,不产生任何额外的数据,即使知道有破坏的包也不进行重发。

3.TCP只支持点对点通信,UDP支持一对一、一对多、多对一、多对多的通信模式
4.TCP是面向字节流的,UDP是面向报文的(流模式和数据报模式)
5.TCP拥有拥塞控制机制,UDP没有拥塞控制,适合媒体通信
6.TCP要求系统资源较多,UDP较少
7.TCP首部开销(20个字节)比UDP的首部开销(8个字节)要大,TCP传送数据段的时候要给段标号,UDP协议不用

当数据传输的性能必须让位于数据传输的完整性、可控制性和可靠性时,TCP是更好地选择;反之,当强调传输性能而不是传输的完整性时,如:音频和多媒体应用,UDP是最好的选择。

对于可靠性,TCP通过如下方式进行保证:
1.数据包校验:目的是检测数据在传输过程中的任何变化,若校验包出错,则丢弃报文不给出响应,这时TCP发送数据端超时后会重发数据。
2.超时重发:当TCP发出一个段之后,启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
3.对失序数据包重排序:TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将对失序数据进行重新排序,然后才交给应用层。
4.丢弃重复数据:将丢弃重复数据。
5.应答机制:当TCP收到来自另一端的数据,它将发送一个确认。
6.流量控制:TCP连接的每一方都有固定大小的缓冲空间。TCP接收端只允许另一端发送接收端缓冲区所能接纳的数据,这可以防止较快主机致使较慢主机的缓冲区溢出,这就是流量控制。TCP使用的流量控制协议是可变大小的滑动窗口协议。

 

 

 

打开一个网页都发生了哪些事?
·通过域名解析获得URL对应的IP地址
·浏览器和服务器建立TCP连接
·浏览器给服务器发送一个HTTP请求
·服务器给浏览器发回一个HTML响应

 

 

如果有一个登录接口需要服务端返回参数,再带着这个参数去请求才能完成登录,用jmeter 怎么做?
先去请求登陆接口,然后得到登录的返回值,然后使用json提取器,提取出需要的值,作为参数传给下一个接口。

 

 

请问你们公司是如何做接口测试的?
第一步:我们要分析出测试需求,并拿到开发提供的接口说明文档;
第二步:从接口说明文档中整理出接口测试案例,里面要包括详细的入参和出参数据以及明确的格式和检查点。
第三步:和开发一起对接口测试案例进行评审。
第四步:结合开发库,准备接口测试案例中的入参数据和出参数据,并整理成csv格式的文件。
第五步:结合接口测试案例文档和csv格式的数据文档,做接口测试案例的自动化案例开发。
第六步,写完自动化用例之后开始执行
第七步,执行如有bug,提交至禅道
第八步,开发修改完成后,回归bug
第九步,完成后做自动化持续集成
1.接口需求调研
2.接口测试工具选择
3.接口测试用例编写
4.接口测试执行
5.接口测试回归
6.接口测试自动化持续集成

 

 

接口测试质量评估标准是什么?
a) 业务功能覆盖是否完整
b) 业务规则覆盖是否完整
c) 参数验证是否达到要求(边界、业务规则)
d) 接口异常场景覆盖是否完整
e) 接口覆盖率是否达到要求
f)  代码覆盖率是否达到要求
g) 性能指标是否满足要求
h) 安全指标是否满足要求

 

 

请问你们公司是如何做性能测试的?请讲诉性能测试的相关指标?
1.做性能需求分析,挑选了用户使用最频繁的功能来做性能测试,比如:登陆,搜索,提交订单,确定性能指标,比如:事务通过率为100%,90%的事务响应时间不超过5秒,并发用户为1000人,CPU和内存的使用率为70%以下
2.性能测试计划,明确测试时间(通常在功能稳定后,如第一轮测试后进行)和测试环境和测试工具的选择
3.编写性能测试用例
4.搭建性能测试环境,准备好性能测试数据
5.通过性能测试用例,编写性能测试脚本
6.性能测试脚本进行调优,设置检查点、参数化、关联、集合点、事务,调整思考时间,删除冗余的脚本等
7.设计性能测试场景,使用nmon工具监控服务器,运行测试场景
8.分析性能测试结果,如果有问题(性能瓶颈),收集相关的日志提单给开发修改
9.开发修改好后,回归性能测试
10.编写性能测试报告
相关指标:响应时间、并发数、吞吐率、资源利用率、TPS

 

 

压力测试和负载测试的区别
负载测试是模拟实际软件系统所承受的负载条件的系统负荷,通过不断加载(如逐渐增加模拟用户的数量)或其它加载方式来观察不同负载下系统的响应时间和数据吞吐量、系统占用的资源(如CPU、内存)等,以检验系统的行为和特性,以发现系统可能存在的性能瓶颈、内存泄漏、不能实时同步等问题
压力测试是在高负载情况下对系统的稳定性进行测试。是在高负载(大数据量、大量并发用户等)下的测试,观察系统在峰值使用情况下的表现,从而发现系统的功能隐患
负载测试:多用户,用户数渐增,持续同时发同一业务请求,产出最大TPS
压力测试:多用户,资源使用饱和,持续同时发同一业务请求,产出系统瓶颈或使用极限

 

服务器中一般要监控哪些数据,如何监控的,怎么从监控数据中发现问题?
基础监控和应用监控。
基础监控包括机器是否死机,cpu,内存,磁盘使用率等;应用监控包括日志监控、端口监控、进程数监控等。

 

 

性能测试关注哪些指标?

相关指标:响应时间、并发数、吞吐率、资源利用率、TPS

 

对于多环境(联调环境、测试环境、预发布环境)如何让接口用例支持多套环境,说出你的做法
自定义一个用户变量,将ip放在变量里,然后接口取变量的值

 

如果接口返回数十个字段,如何批量校验这些字段的正确性,请说出你的方法?

使用csv进行多用例编写

 

假设系统A调用系统B,我把B的接口都mock了,进行性能测试,这样有什么好处和坏处?
好处:防止系统B出错引起测试错误;不会因系统B的开发进度影响测试;mock后可以快速返回结果,提高测试效率
坏处:很多情况下无法完全模拟出服务器的所有可能的返回情况,另外,mock掉了关联方之后,整个环境的连通性可能测试的不到位。

 

有一天早上打车高峰,滴滴服务端挂了大概30分钟,工程师抢修之后,马上上线,之后又挂了,请问有哪些原因会造成这个情况?

服务器内存不够、服务器超出负载、并发量太大、遇到恶意攻击

 

报告哪里来,主要统计什么?
自动化测试报告,在执行完用例之后,会自动生成,使用的是allure,主要统计bug通过率,失败率,失败日志,失败截图

 

 

如何看待自动化和手动测试?怎样的一个比例才是健康的?
自动化适合做为回归测试的主要方式,新上线的功能一般都是用手动测试方式,一些极端和用户习惯操作还是手动测试比较方便。尽可能线上稳定的功能模块都做成自动化,提供效率

 

什么是分层自动化?
金字塔结构, 最底层UnitTest,往上接口API/集成起来的service, 最上面UI自动化
po模式:
1.元素的配置文件(元素的配置文件就是元素控件的路径或者id)
2.page类(通过读取配置文件获取元素的控件,元素对象和元素的原子操作,一个页面一个配置文件)
3.action类(通过原子操作去拼接业务,比如我要执行登录,点击按钮,输入用户名密码都在action中操作)
4.测试用例类(testcase,调用业务实现断言)

 

你的测试数据是怎么准备的?
提前写在配置文件中的或者直接写在Excel中,读取excel中的数据

 

介绍下什么是索引

在关系数据库中,索引是一种与表有关的数据库结构,它可以使对应于表的SQL语句执行得更快。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
对于数据库来说,索引是一个必选项,但对于现在的各种大型数据库来说,索引可以大大提高数据库的性能,以至于它变成了数据库不可缺少的一部分。
Mysql常见索引有:主键索引、唯一索引、普通索引、全文索引、组合索引

PRIMARY KEY(主键索引) ALTER TABLE table_name ADD PRIMARY KEY ( column )
UNIQUE(唯一索引) ALTER TABLE table_name ADD UNIQUE (column)
INDEX(普通索引) ALTER TABLE table_name ADD INDEX index_name ( column )
FULLTEXT(全文索引) ALTER TABLE table_name ADD FULLTEXT ( column )
组合索引 ALTER TABLE table_name ADD INDEX index_name ( column1column2column3 )

Mysql各种索引区别:
普通索引(INDEX):最基本的索引,没有任何限制
唯一索引(UNIQUE):与”普通索引”类似,不同的就是:索引列的值必须唯一,但允许有空值。
主键索引(PRIMARY):它 是一种特殊的唯一索引,不允许有空值。
全文索引(FULLTEXT ):仅可用于 MyISAM 表, 用于在一篇文章中,检索文本信息的, 针对较大的数据,生成全文索引很耗时好空间。
组合索引:为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原则。

 

 posted on 2021-07-14 13:05  zennpumpkin  阅读(47)  评论(0编辑  收藏  举报