• 测试--学习笔记1


    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效率可建立组合索引,遵循”最左前缀“原则。

  • 相关阅读:
    PHP7 学习笔记(一)Ubuntu 16.04 编译安装Nginx-1.10.3、 PHP7.0.9、Redis3.0 扩展、Phalcon3.1 扩展、Swoole1.9.8 扩展、ssh2扩展(全程编译安装)
    【测试笔记】Redis学习笔记(十二)性能测试
    【官方文档】Nginx负载均衡学习笔记(三) TCP和UDP负载平衡官方参考文档
    高频交易的外部网络连接技术
    国内有哪些顶级高频交易 (HFT) 团队?
    Linux低延迟服务器系统调优
    什么是高频交易系统?
    HFT is a good industry as a computer scientist
    MongoShake——基于MongoDB的跨数据中心的数据复制平台
    QuantStart Content Survey 2020
  • 原文地址:https://www.cnblogs.com/lutong1989/p/15010339.html
Copyright © 2020-2023  润新知