软件测试面试题

文章目录


在测试这个项目你遇到了哪些困难,你是如何解决的?

在用jmeter进行性能测试的时候跨线程组传参的问题,从登录模块提取token(线程组一)在购物车模块的信息头中添加token(线程组二)的全局变量设置的问题,我在线程组外面设置了一个HTTP信息头管理器,他在两个线程组外面,应该作用的是这两个线程组,我给登录的模块设置了一个json提取器来设置token的值,发现设置不上,购物车模块的线程组也拿不到这个token,自己查阅了资料,发现设置全局变量要用BeanSell后置处理并且要用setProperty这个函数设置一个key,value的值,然后就可以在其他线程组的HTTP信息头管理器中用函数P来说获取这个全局变量。

反问:postman设置全局变量是怎么设置的?

答:postman设置全局变量在Environments中的globals中设置全局变量,也可也设置环境变量在运行时选择运行的环境,在接口的test模块的Tests中使用函数set a global variable 或者 set an environment variable 设置全局变量和环境变量。

反问:jmeter中你还了解哪些函数?

  • random(随机函数)
  • threadNum 线程数
  • time 获取当前时间戳
  • digest 加密算法MD5 SHA等
  • UUID 返回一个uuid
  • BeanShell 执行bensell脚本

反问:jmeter的执行顺序和作用域是什么?

执行顺序:
0.配置元件
1.定时器
2.前置处理器
3.取样器
4. 后置处理器
5.断言
6.监听器
作用域:
以层次结构按执行顺序进行执行。

在这个项目中你都测出了什么bug?印象最深的 BUG 是?

在进行性能测试的时候,有一个搜索相关的接口,他的多个参数的响应时间比单个参数和无参的都要慢上很多,然后我就去看了前台模块的运行日志发现也没什么问题,想着有可能是数据库的问题,就去开启了数据库的慢查询,经过测试就发现这个是sql语句的问题,它使用多个参数的时候聚合索引没有使用最左优先原则,没有用上索引,导致在多参查询的时候过慢。

你是如何根据需求文档提取测试点的?,如果没有需求文档怎么办?

测试点是基于需求文档的功能描述,如果现在要测试商城相关,首先用户会进行注册,测试点就是正常情况下的注册和异常情况下的注册,然后进行登录,分别是手机号登录,第三方登录,测试点就是手机号登录的正常情况和异常情况等,测试点是很模糊的一个概念,就像上面注册和登录来说,也可以称为测试点,提取完测试点后,需要细化的就是手机号正常输入有效等价类,异常的就像正确的手机号和错误的手机号,错误的手机号包括小于11位数字的、大于11位数字的、非手机号的等,只有拆分完成测试点后,便于后续编写测试用例,所以,测试点就是把测试的模块初步划分为细小的分类,然后再写测试用例的过程中,基于分类去做细化的等价类、边界值等一些测试。

没有需求文档怎么办

1.尽量去找找其他相关文档,如原始碎片需求会议讨论纪要、策划书、开发文档、市场调研书、可行性分析报告 等
2.尽可能多的参加内部讨论会议(需求、设计、计划 ),参加讨论过程,进一步理解需求 。
3.参考同行或竞争对手的类似产品。
4,后端源码中controller层有相关接口的url和请求方式根据它的传参方法和返回值确定参数请求体和返回值。

简述自动化测试流程?

1.需求分析
2.挑选适合做自动化测试的功能
3.设计测试用例 (将功能用例转换为自动化用例)
4.搭建自动化测试项目的架构
5.设计自动化测试项目的架构(po+数据驱动+报告)
6.编写代码
7.执行测试用例
8.生成测试报告并分析结果

什么是 PO 模式,Po 模式的优点是什么?

PO模式就是业务流程与页面元素操作分离的模式,使自动化脚本解耦。将每个模块的操作先抽离出来

功能测试用例一般包含哪些内容?

要素一般包括:用例编号、用例优先级、测试目的、所属模块、前提条件、测试环境、输入数据、测试步骤、预期结果、测试脚本等

如何通过 Fiddler 确定是前端还是后端 BUG?

(1)测试遇到 bug,首先 Fiddler 开启抓包后看是否能抓到接口,如果不能抓到接
口,说明是前端 BUG
(2)如果抓到接口,但是接口请求参数或者参数值错误,说明是前端 BUG
(3)如果是接口应答信息错误,说明是后端 BUG

什么是回归测试?如何做回归测试?

回归测试,即就是在软件生命周期中,只要软件发生了改变,就可能给该软件产产生问题;
所以,每当软件发生变化时
我们就必须重新测试现有的功能,以便确定修改是否达到了预期的目的,检查修改是否破坏
原有的正常功能。
回归测试可以发生在任何一个阶段,包括单元测试、集成测试和系统测试
那我们改如何做回归测试呢? 总结为以下几点
1、在测试策略制定阶段,制定回归测试策略
2、确定需要回归测试的版本
3、回归测试版本发布,按照回归测试策略执行回归测试
4、回归测试通过,关闭缺陷跟踪单(问题单)
5、回归测试不通过,缺陷跟踪单返回开发人员,开发人员重新修改问题,再次提交测
试人员回归测试

项目测试流程有哪些?

需求评审、测试计划、技术评审、用例编写、用例评审、测试执行、测试报告、线上验
证、项目总结

Bug 优先级和严重程度如何划分?

Bug的严重等级定义:
1、 Blocker 即系统无法执行、崩溃或严重资源不足、应用模块无法启动或异常退出、无法测试、造成系统不稳定
2、Critical 即影响系统功能或操作,主要功能存在严重缺陷,但不会影响到系统稳定性。
3、Major 即界面、性能缺陷、兼容性
4、Minor 即易用性及建议性问题。
Bug的优先等级:

  1. Immediate 即“马上解决”,表示问题必须马上解决,否则系统根本无法达到预定的需求。

  2. Urgent 即“急需解决”,表示问题的修复很紧要,很急迫,关系到系统的主要功能模块能否正常。

  3. High 即“高度重视”,表示有时间就要马上解决,否则系统偏离需求较大或预定功能不能正常实现。

  4. Normal 即“正常处理”,进入个人计划解决,表示问题不影响需求的实现,但是影响其他使用方面,比如页面调用出错,调用了错误的等。

  5. Low 即“低优先级”,即问题在系统发布以前必须确认解决或确认可以不予解决

Bug的生命周期?

New:发现 bug,未经评审决定是否指派给开发人员进行修改。
Open:确认 bug,并且认为需要进行修改,指派给相应的开发人员。
Fixed:开发人员进行修改后标识成修改状态,有待测试人员的回归测试验证。
Rejected:如果认为不是 Bug,则拒绝修改。
Delay:如果认为暂时不需要修改或暂时不能修改,则延后修改。
Closed:修改状态的 Bug 经测试人员的回归测斌验证通过,则关闭 Bug。
Reopen:如果经验证 Bug 仍然存在,则需要重新打开 Bug,开发人员重新修改

测试用例里都包含哪些要素?

用例编号、所属模块、用例标题、前置条件、操作步骤、优先级、预期结果等

如何提高用例的覆盖率,减少漏测 ?

1、要根据需求文档来编写用例,确保每条需求都被对应的用例覆盖
2、要充分理解业务,挖掘隐形需求,并编写对应的用例
3、除了正常的业务场景,多考虑一些异常的场景和数据
4、要从多个维度对软件进行测试,功能、性能、安全等各方面来考虑
5、多站在用户的角度去思考问题,模拟用户的使用场景
6、组织用例评审

什么是弱网?弱网下等待页面加载超时时间一般多久?

弱网:就是模拟网络较差,或者网络在2G/3G/4G/高延时/高丢包情况下,程序是否正常。
等待时间:
可能是 5 秒、7 秒,如果加载到 5-10 秒钟还没有加载好,就自动把它结束掉掉。

什么是冒烟测试?

冒烟测试(Smoke Testing) 是软件测试中的一项基础测试,也称为构建验证测试(Build Verification Testing),通常用于确认新版本的软件是否可以进行基本的功能测试或者是否能够正常启动。它的主要目的是在软件发布前快速验证系统的关键功能能否正常运作

说几个工作中常用的 Linux 命令?

netstatus -napt :查看端口占用
tail -n :显示后几行文件
top 查看进程占用内存
free -m 查看内存使用情况
lsblk 查看磁盘分区情况
grep :用于在文本文件中查找特定的字符串或模式

常用的 docker 命令有哪些?

docker images:查看本地运行的所有镜像
docker ps 查看运行中的镜像
docker logs -f 查看运行日志
docker system df:查看镜像/容器/数据卷所占用空间
docker run 启动镜像,可以设置后台启动或者

pytest 参数化怎么实现?

使用@pytest.mark.parametrize 装饰器
示例:
@pytest.mark.parametrize(‘字符串形式接收参数名’, [(参数 1-1, ‘参数 2-1’), (参数 1-2, ‘参
数 2-2’)],ids=[‘第 1 条参数对应的用例名’, ‘第 2 条参数对应的用例名’])

说一下你知道的 HTTP 状态码,以及它们代表什么意思?

200(请求成功)
302(重定向)
400(Bad Request/错误请求)
401(Unauthorized/未授权,需要身份认证)
403(Forbidden/服务端禁止访问)
404(Not Found/未找到,请求的资源未找到,比如url写错了,页面被删除等)
405(Method Not Allowed/方法未允许)
415 不支持的媒体类型
500(Internal Server Error/内部服务器错误)
502(Bad Gateway/错误的网关)
503(Service Unavailable/服务无法获得)
504(Gateway Timeout/网关超时)

说一说常见的HTTP请求头字段

Accept
1、 Accept : text/html 浏览器可以接收服务器回发的类型为text/html
2、 Accept: */*代表浏览器可以处理所有类型
Content-Type
1、 Content-Type:text/html;charset=UTF-8 : 告诉客户端,资源文件的类型,还有字符编码,客户端通过utf-8对资源进行解码,然后对资源进行html解析
2、通常我们会看到有些网站是乱码的,往往就是服务器端没有返回正确的编码。
Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。

说一下 DNS 解析流程?

1、DNS域名解析
2、与服务器建立TCP连接
3、发起HTTP请求,发送数据
4、服务器响应HTTP请求,返回数据
5、浏览器解析数据、渲染
6、关闭连接

三次握手,四次挥手过程?

三次握手:
第一次握手:客户端发送syn包(syn=1,seq=x)到服务器,并进入SYN_SENT状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
四次挥手:断开一个TCP连接则需要“四次挥手”。
第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不 会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可 以接受数据。
第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。
第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。
第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。

性能测试中,TPS 比较低,可能是哪些方面的问题?

1、服务器资源限制:服务器的硬件资源(如 CPU、内存、磁盘)可能不足以处理大量的请求。
2、网络带宽限制:服务器的网络带宽可能成为瓶颈,在高负载压力下无法支持大量请求的传输。
3、数据库性能问题:数据库读写瓶颈、索引不合理、数据库连接池配置不当等都可能影响并发处理能力。可以通过优化 SQL 查询语句、增加数据库缓存、调整连接池大小等手段来提升数据库性能。
4、压测配置问题:压测工具的配置可能影响 TPS 的表现。
6、第三方服务延迟:中间件的问题。

cookie 和 session 和token 的区别?

cookie:在客户端存储在客户端用于存储会话信息的
session:在服务器端,记录用户的请求状态,一般默认时间30min
session_id会存在cookie中,每次请求cookie中所有信息都会传递给服务器,服务器通过session_id来识别是否是同一个用户请求,不是同一个用户的话,就会要求重新登录
token:访问权限,保存在客户端本地
鉴权:访问的接口是否正常,是否非法访问绕过前端。 防止跳过页面直接访问接口token
授权:是否具有访问接口的权限。 唯一全局动态的 。

验证码的几种处理方式?

去掉验证码
设置万能验证码
验证码识别技术
记录cookie

性能场景怎么设计?一般都有哪些性能场景?

1、基准测试场景
此场景的目的是为系统建立一个性能基线,使用 1 个并发运行 3-5 分钟,记录 tps 和响应时间数据。
2、 单交易/单接口测试场景
此场景单独测试每一个接口,测试出每个接口的最优 tps 和响应时间,判断有没有性能问题,性能是否满足需求。如果性能不好,需要优化之后再进行回归测试。

3、 混合测试场景
如果需要测试系统中的多个业务/接口,那么在单交易场景结束后,按照业务比例,对多个接口同时进行压测。记录整体和各个接口的 tps 和响应时间,判断有没有性能问题。因为有的接口单独测试没问题,但是接口之间可能相互影响。且真实生产环境中,本身就是一种混合场景。
4、 稳定性测试场景
稳定性场景主要目的为测试系统在压力下长时间运行是否能保持稳定,待前面几个场景测试结束后,选择一种比混合场景压力低一些的压力,长时间运行场景(至少 8 小时),检查系统在长时间运行下,是否会出现内存泄漏、tps 下降、tps 抖动等情况。

性能测试中,一般都关注哪些指标?

  1. 响应时间(Response Time):用户发送请求到系统返回结果所花费的时间。
  2. 吞吐量(Throughput):单位时间内系统处理的请求数量。通常以每秒请求数(SPS或TPS)表示。
  3. 并发用户数(Concurrency):同时向系统发送请求的用户数量,可以用来评估系统的并发处理能力。
  4. CPU利用率(CPU Utilization):系统的CPU占用率,反映系统对CPU资源的利用程度。
  5. 内存利用率(Memory Utilization):系统的内存占用率,反映系统对内存资源的利用程度。
  6. 磁盘IO(Disk IO):系统对磁盘的读写操作情况,包括读写速度以及IOPS(每秒输入/输出操作次数)。
  7. 网络延迟(Network Latency):用户请求到达系统和系统返回结果之间的时间延迟。
  8. 错误率(Error Rate):系统处理请求时出现错误的比例,可以用来评估系统的稳定性。
  9. 平均负载(Average Load):系统在单位时间内的平均负载情况,反映系统资源的使用情况。
  10. 颈(Bottleneck):系统中的性能瓶颈,指影响系统性能的最薄弱环节。通过性能测试可以发现并优化这些瓶颈。

什么是长连接,什么是短连接?

长连接:连接->传输数据->保持连接 -> 传输数据-> …->直到一方关闭连接,客户端关闭连接。长连接指建立SOCKET连接后无论使用与否都要保持连接。
短链接:连接->传输数据->关闭连接。下次一次需要传输数据需要再次连接。

OSI,TCP/IP,五层协议的体系结构,以及各层协议?

OSI分层 (7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
TCP/IP分层(4层):网络接口层、 网际层、运输层、 应用层。
五层协议 (5层):物理层、数据链路层、网络层、运输层、 应用层。
每层作用
物理层:传输二进制比特流
数据链路层:负责将上层数据封装成帧
网络层:负责路由寻址和广播 ;广播:发送消息和接收消息
*传输层:负责建立一个可靠的端到端的连接;端到端:发送到接收 ;过程:建立、维护、撤销(拆除)
会话层:负责建立维护拆除会话,为端应用之间提供控制功能(可靠性)
表示层:完成对传输数据格式转换:格式化;发:加密;接:解密;发:压缩,接:解压缩
应用层:对应用软件提供网络支持

性能测试中的思考时间应该怎么用?

这个思考时间就是事务与事务之间,会有一些短暂的停顿,就好像真实用户在操作时,两次操作之间需要考虑一下,设置一个思考时间。
jmeter中设置思考时间的方法有:
1.高斯定时器:延时时间接近正态分布
2.Synchronizing Timer 同步定时器,只有线程数量满足设置的阈值的时候,才会开始。
3.Uniform Random Timer 随机延时。
4.Poisson Random Timer 泊松定时器,类似高斯定时器。

什么是接口幂等性?

接口幂等性就是用户对于同一个接口在很短的时间内发起的一次请求或者多次请求的结果是一致的,不会因为多次请求而产生不同的结果。

接口测试用例的编写要点有哪些?

正向用例:符合业务逻辑用例
反向用例:
1.参数中传入特殊字符,比如:&,=,>,<,空格等等,尤其是&,=,和空格,如果这些字符在post,get请求中是关键字,没有转译的话就会出错。
2.传入空参数,尤其是必传参数,如果不传参数程序是否会处理。
3.传入错误的类型,比如参数必须传入字符串,传入的参数为:整形,浮点型,负数,空格等,程序的处理情况。
4. 输入字符串超长,程序的处理

在浏览器中输入了一个 url 后,请求流程是什么样的?

1、URL解析: 浏览器首先会解析输入的URL,包括协议(比如http)、域名、端口、路径和查询参数等。
2、DNS解析: 如果输入的是域名而不是IP地址,浏览器需要进行DNS解析,将域名解析成对应的IP地址。这个过程可能会涉及到本地DNS缓存、操作系统的DNS缓存以及递归的DNS服务器。
3、建立TCP连接: 浏览器通过解析得到的IP地址和端口,与服务器建立TCP连接。这是一个三次握手的过程,确保浏览器和服务器之间可以稳定地进行数据传输。
4、发起HTTP请求: 浏览器通过建立的TCP连接向服务器发送HTTP请求。这个请求包括请求方法(GET、POST等)、路径、HTTP版本、请求头部等信息。
5、服务器处理请求: 服务器接收到浏览器发送的请求后,会根据请求的路径和其他信息执行相应的处理,可能是返回一个HTML页面、一个文件、或者执行其他逻辑。
6、服务器响应: 服务器处理完成后,将响应的数据以HTTP响应的形式返回给浏览器。这个响应包括状态码、响应头部和响应体等信息。
7、浏览器渲染: 浏览器接收到服务器的响应后,开始解析HTML、CSS和JavaScript等资源。解析过程中,浏览器可能会发起额外的请求来获取页面中引用的其他资源。
8、显示: 最终,浏览器将绘制好的页面显示在用户的屏幕上。

工作中常用的 JMeter 参数化哪些?

1、函数,例如 digest、intSum、longSum、counter、Random、RandomString、time
2、csv 配置元件
3、测试计划、用户定义的变量
4、beanshell 内置变量 vars、props
5、关联:后置处理器、例如 正则提取、json 提取

tcp和udp的区别

TCP提供面向连接的可靠服务 ,UDP提供无连接不可靠服务。
TCP连接的时候需要三次握手,断开的时候需要四次挥手。
UDP想发数据就可以开始发送了。

  • 28
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值