2024软件测试面试题-接口测试(全)

1.为什么要做接口测试?

(1)更早的发现问题:
现在推崇的测试左移,希望测试能更早的接入测试,接口测试只需要后端代码完成就可以介入测试后端逻辑而不用等待前端工作完成,从而更早的发现问题并以更低的成本修复。
(2)缩短产品周期
现在很多系统是前后端分离的,接口测试可以在功能界面未开发出来之前对系统的接口进行测试,可以更早的发现并解决很多bug,从而使得留到后期功能测试阶段的bug数量减少,最终缩短整个项目的上线时间。
(3)发现更底层的问题
接口测试的粒度比功能测试更小,可以覆盖功能测试覆盖不到的测试点。
(4)弥补前端弱验证的问题
只依赖前端进行限制已经完全不能满足系统的安全要求,因为它很容易被绕过,这个时候就需要从接口层面进行验证,特别是涉及到用户的隐私信息,如身份证,银行卡等。

2.接口测试流程是什么?

(1)需求分析阶段:根据需求文档和接口文档分析接口,了解接口的输入、输出、返回码和性能等方面的要求,以及接口在不同负载和异常条件下的表现
(2)测试计划阶段:明确测试内容及范围、测试环境、测试工具、测试方法、时间安排、人员任务分配,风险评估等
(3)测试设计阶段:依据分析梳理的需求文档和接口文档编写接口测试用例,并进行用例评审。
(4)测试执行阶段:利用测试工具(jmeter、postman等)执行接口测试用例、并对缺陷及时管理与追踪。
(5)测试评估阶段:对软件版本质量进行评估,输出测试报告,确认是否上线。

3.接口测试用例是什么设计的?

(1)用例设计依据:根据需求说明书、接口文档
(2)用例设计思路:
正例:输入输出的正确性,接口返回成功;链路接口业务流程实现成功
反例:
鉴权反例:鉴权码为空、错误、过期等
参数反例:参数类型、长度、个数、顺序、参数数值大小、参数数值范围异常、非空、边界值、参数组合等
错误码反例
其他异常:频繁请求、重复请求、异常网络、大数量请求等
分页异常:分页传入0、1、中间页、最后一页等
安全:sql注入、敏感信息加密、认证机制、数据加密机制等
注:用最少的用例覆盖有效等价类,用最多的用例覆盖无效等价类
(3)测试用例模板:
基本要素包括测试用例编号、测试标题、请求地址、请求方法、预置条件、请求参数、优先级、预期响应结果、编写人、测试结果等
(4)测试用例方法:
① 等价类划分(典型)
② 边界值分析法(常用)
③ 场景分析法
④ 错误推断法

4.一个接口请求不通(页面无法访问)该如何排查?

(1)检查请求相关:接口地址、请求方式、请求头、请求参数是否正确
(2)检查被测接口端口号是否正确或是否正常开启
(3)检查项目是否启动或部署成功,可以找研发确认,或者自己登录到服务器上,通过ps检查项目的进程是否存在,然后用tail命令查看部署日志
(4)检查服务器的防火墙是否关闭,开启状态下可能限制端口不通。
(5)检查你的客户端(浏览器、测试工具),是否设置了网络代理,网络代理可以造成请求失败。
(6)程序内部错误

5.接口测试的主要关注点是什么?

(1)业务逻辑(业务逻辑覆盖)
(2)响应结构
(3)数据格式
(4)数据正确性(依据来源:查数据库与服务器和接口返回值比较)

6.get和 post方法有什么区别?

HTTP 请求中最常用的两种请求方法
相同点:
GET 请求和 POST 请求底层都是基于 TCP/IP 协议实现的,都可以向服务器提交数据,并且都可以从服务器获取数据
不同点:
(1)传参不同:get参数拼加在url上进行参数传递;post 数据放在请求体Baby里进行参数传递,更安全。
(2)使用场景不同:get向服务器获取指定资源,一般用于查询;post 向服务器提交数据,一般用于添加、修改和删除。
(3)传参长度不同:get请求参数长度受限,最长为2048字符,post没有。
(4)get请求可以被浏览器缓存,post不行。

7.常见的 post 提交数据方式?

(1)application/x-www-form-urlencoded 最常见的一种方式,浏览器的原生 form 表单,如果不设置 enctype属性,那么最终就会默认以此种方式提交数据,大部分服务端语言都对这种方式有很好的支持
(2)multipart/form-data 这种方式一般用来上传文件,各大服务端语言对它也有着良好的支持
(3)application/json 最常见的json格式,现在很多人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串
(4)text/xml 这种直接传的xml格式

8.http协议有哪些常见的响应状态码?

200 接口OK 请求成功 但业务不一定成功
3xx 重定义 服务器要求客户端重新请求1个新的url 一般postman会自动去处理
400 客户端请求的语法错误 服务器无法理解 例:参数名称不对、多空格等
401 表示未授权,需要身份认证
403 服务器理解客户端的请求,但拒绝执行,即请求资源被拒绝
404 服务器无法根据客户端的请求找到资源(网页),即请求资源未找到,一般是接口地址写错
405 请求方法不允许 例:post却用get
500 服务器内部错误,无法完成请求
502 网关错误
503 服务器不可用

9.http和https协议的区别?

(1)http明文传输,数据都是未加密的,安全性较差,https是由http+ssl加密协议构建的可进行加密传输身份认证的网络协议,安全性较好
(2)https协议需要到 CA证书,一般免费证书较少,http不需要
(3)http页面响应速度比https快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换3个包,而 HTTPS除了TCP的三个包,还要加上ssl握手需要的9个包,所以一共是12个包
(4)使用端口也不一样,http端口是 80,https端口是 443
(5)https其实就是建构在 SSL/TLS 之上的 http协议,所以, https比http要更耗费服务器资源

10.常见的HTTP接口请求方法有哪些?

GET:获取资源,可以理解为读取或者下载数据------------常用
HEAD:获取资源的元信息,类似于get请求,但其返回的响应中没有具体的内容,用于获取报头;
POST:向资源提交数据进行处理请求,相当于写入或上传数据,数据被包含在请求体baby中,此请求会导致新资源的建立或已有资源的修改-------------常用
PUT:类似 POST
DELETE:删除资源
CONNECT:建立特殊的连接隧道
OPTIONS:允许客户端查看服务器的性能
TRACE:回显服务器收到的请求,主要用于测试或诊断
PATCH:实体中包含一个表,表中说明与该url所表示的原内容的区别

11.常见的请求头以及他们的作用是什么?

(1)Accept:客户端能够接收的数据类型, / 代表浏览器可以处理所有类型
(2)Accept-Encoding:客户端支持的压缩算法
(3)Accept-Language:客户端支持的语言
(4)User-Agent:发送请求的客户端的类型,即告诉HTTP服务器, 客户端使用的操作系统和浏览器的名称和版本
(5)Cookie:用来存储一些用户信息以便让服务器辨别用户身份
(6)X-Requested-With:异步请求。ajax异步请求。无刷新

12.常见的相应头以及他们的作用是什么?

(1)Content-Type:服务器返回的资源类型
(2)Content-Encoding:返回资源使用的压缩格式。
(3)Content-Length:HTTP 消息体的长度。
(4)Connection:服务端决定使用长连接还是短连接
(5)Server:告诉客户端服务器的信息

13.cookie和session协议的区别?

(1)存储位置不同:
cookie数据存放在客户端的浏览器中
session数据存储在服务器端
(2)安全程度不同:
cookie存储在客户端的浏览器中,因此攻击者可以通过窃取或篡改cookie中的信息来冒充用户或窃取用户的敏感信息
session数据存储在服务器端,相对较难被攻击者直接访问或篡改,对于cookie更为安全,考虑到安全应当使用session。
(3)数据存储内容不同:
cookie只能存储简单的字符串数据,如用户名、密码等
session则可以存储任意类型的数据,包括对象、数组等复杂数据结构。这使得Session在处理复杂会话需求时具有更大的灵活性。
(4)数据存储大小不同:
单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie–具体取决于浏览器和服务器端的设置
session存储在服务端,浏览器对其没有限制–具体取决于服务器端的内存
(5)性能使用程度不同:
session会在一定时间内保存在服务器上。当访问增多,会比较占用服务器的性能,考虑到减轻服务器性能方面,应当使用cookie

14.token是做什么用的?

token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。存储在服务器的数据库里面。
(1)用来作身份验证
使用token机制的身份验证方法,在服务器端不需要存储用户的登录记录,以后客户端只需带上这个token前来请求数据,服务器端会对token值进行验证对比,若相等,则可以证明请求有效,不是伪造的。
(2)防止表单重复提交。
一般还是使用前后端都限制的方式。比如:在前端点击提交之后,将按钮置为灰色,不可再次点击,然后客户端和服务端的token各自独立存储,客户端存储在Cookie或者Form的隐藏域中,服务端存储在Session或者其他缓存系统中。

15.没有接口文档的情况下,如何做接口测试?

(1)了解背景和需求
首先要做的是了解项目和产品的背景和需求。与开发人员和项目负责人沟通,了解接口的功能、输入输出参数、返回值等信息。这有助于我们理解接口的作用和期望的行为,为后续测试提供指导。
(2)通过抓包工具获取接口信息
我们可以使用浏览器开发工具或抓包工具(如Postman、Fiddler等)来获取接口信息。通过模拟请求和响应,我们可以观察接口的请求参数、请求头、响应数据等细节。同时,我们还可以分析接口之间的依赖关系和调用顺序,以便更好地理解和测试接口。

16.做了接口测试,后面还需要进行系统功能测试吗?

需要,接口测试是为了尽早发现问题,提前介入测试,发现页面上发现不了的bug,提高系统的稳定性,虽然覆盖了所有功能上的逻辑测试,但是跟前端页面进行集成的时候仍然可能会出现问题的,所以后续还是要进行系统的功能测试的。

17.依赖登录状态的接口如何测试?

依赖登录状态的接口,本质上是每次发送请求的时候,需要带上存储有账户有效信息的cookie和session才能发送成功,在构建post请求时添加必要的cookie和sessionid,使用postman测试,postman会自动去管理,使用jemter测试,需要增加cookie管理器组件。

18.如何从上一个接口获取相关的响应数据传递到下一个接口?

(1)如果是postman,将上一个接口中的响应数据设置为全局变量,然后在下一个接口中直接引用该变量即可。
(2)如果是jemter,从上一个接口中的响应数据获取对应的返回值,然后使用正则表达式或json提取器来提取需要获取的值,存储在一个变量中,然后在下一个接口中直接引用该变量即可。

19.一个接口发生异常时该怎么分析?

(1)先对比接口文档看请求是否有误:请求 url、请求参数,排除基本信息异常
(2)查看接口请求的返回值和预期结果,通过看状态码来判断是什么类型的异常
(3)判断完接口类型后,根据各种异常类型来分析这个异常
客户端异常:分析请求方式、路径、参数、请求体、请求头等哪些出现异常
服务器异常:分析server、数据库、中间件哪部分出现异常
(4)服务端的异常,也可以通过查看后台日志分析
(5)定位好异常后,直接截图报错原因提交bug

20.接口测试中有没有测试出什么问题?

一般为:参数校验、边界条件、代码逻辑、数据错误等随便举一个实例
例:一个订单支付时,我们页面上是无法改变订单金额的,但我们可以通过抓包工具捕获订单支付请求,然后修改订单金额后提交,然后出现了一个原价100元的订单我们用0.01元完成了支付。

21.接口测试中的加密参数怎么处理?

(1)了解并确认参数的加解密方式,常见的有md5、aes、rsa等;如果是aes,需要找开发人员要私钥,如果是rsa,需要找开发人员要公钥和私钥
(2)选择支持确定加解密方式的接口测试工具,在工具中引用加解密的代码,来实现参数加解密的处理,例:jemter支持md5。
(3)如果公司中有自定义的加解密算法,则需要找开发要加解密的代码,然后再引用到测试工具中去使用。

22.谈谈你对http、webserice、dubbo协议的了解?

http协议是一种超文本传输协议,端口是80,特点是无连接、无状态,能够快速响应,主要有请求和响应两部分构成。
请求:请求行、请求头、请求正文
响应:响应行、响应头、响应正文
Webserice基于xml格式数据的SOP传输协议它的接口地址是以?wsdl结尾,可以使用soupui。
dubbo基于rpc远程调用协议,是阿里在15年提出的适用于高并发的接口协议。

23.异步接口测试和同步接口测试有何区别?

(1)响应的返回方式不同:
同步接口会在请求发送后立即返回响应,收到响应后才会发起下一个请求。
异步接口是指在请求发出后,并不立即得到响应返回,仍然继续运行,需要通过轮询等方法获取响应,所以异步接口能够提高系统的并发能力和性能。
(2)协议不同:
同步接口使用的是http协议,异步接口使用的是MQ协议

24.异步接口有测过吗,怎么测的?

当业务处理比较耗时, 一般会采用异步处理的方式。
异步接口一般流程:
(1)提交请求接口
当你请求一个异步接口,接口会立刻返回一个结果告诉你已经开始处理,结果中一般会包含一个任务id类似的东西用于追踪结果。
(2)查询结果接口
另外会提供一个查询结果的接口, 当结果未处理完查询接口会返回相应的"未完成"状态,如果已经处理完,则会返回相应的数据。
异步接口处理方法
(3)一般采取轮询的方法,每隔一定时间间隔去请求一下查询结果的接口,直到接口返回的状态是已完成(查询到指定数据或超时)。
(4)如果异步接口没有提供追踪id和查询接口,可以通过同样的方法轮询查取数据库数据或日志数据直到获取到指定结果或超时。

25.依赖于第三方数据的接口如何进行测试?

(1)仔细了解第三方接口的文档,包括接口的功能、参数、请求方法和响应格式
(2)通过Postman搭建mock服务,模拟第三方数据的返回,以测试接口在各种情况下的表现,但是Postman的mock服务有访问次数限制,每天只能访问1000 次,也可以通过Flask,Servlet等技术搭建接口Mock服务器
(3)或让开发直接写死参数、开发debug修改参数

26.你在接口测试中是怎么校验结果是否正确?

(1)状态码校验:查看http接口响应状态码是否是200。这是接口测试的最基本要求,响应状态码200代表了该接口能接收请求,能返回响应。
(2)响应内容校验:
① 当接口响应正文比较短,响应正文内容固定时,可以验证响应内容是否精确地等于预期的内容。
② 当响应内容较长时,可以判断响应内容中是否包含关键信息,以此作为验证接口功能的验证点。
(3)响应报文关键字段校验:
① 当响应正文为XML格式或JSON格式时,可以通过XPATH或JSONPATH表达式,指定其中的某个节点,验证响应报文关键字段是否存在
② 如果值是固定的或有确定规则的,还可以验证其值是否正确。若值固定可以验证相等,如果不固定可以考虑用正则表达式匹配,从而验证响应报文关键字段值是否正确。
(4)当要验证的信息在当前测试接口的响应内容中不存在时,可以查询数据库或调用其余接口查询。
例:一个增加用户信息的接口,要验证信息确实增加成功了,可以再调用查询用户信息接口来确认用户信息添加成功。如果有数据库查询权限,还可以直接查询数据库来验证。
(5)响应时间校验:从性能角度,查看接口的响应时间,验证是否在一个合理的范围内。

27.接口测试一般使用的哪些测试工具?

(1)fiddler,其实是我们软件测试中最常用的抓包工具,一般是用来做抓包和异常测试的,接口测试只是他的一个辅助功能。不建议使用fiddler去做接口测试。
(2)postman是最常用的接口调试工具,使用相对来说比较简单,功能丰富,可以在里面编写一些基于js的代码实现半自动化的接口测试。
优点是针对接口测试的功能丰富,配置齐全,上手难度低。缺点是不能直接操作数据库。
(3)jmeter是一个很强大的工具,可以做接口测试,自动化测试,性能测试。如果只是做接口测试的话,在便捷性上是不如postman的,但是jemter功能更强大,也可以直接操作数据库。
总结:这三个都可以做接口测试,但是侧重点不一样。如果是单独做接口测试,postman是最方便的,如果需要做性能测试和接口测试,则优先选择jemter。

28.一般使用的抓包工具有哪些?

(1)Fiddler:是免费开源的,但只能在windows下使用,Mac和Linux是不支持的
(2)Charles:支持Windows、MacOS和Linux操作系统,但是不免费
(3)Wireshark:可以抓取所有协议的内容,非常适合协议的学习和网络问题的分析,但是Wireshark需要具备一定的网络知识,所以对于初学者来说不是很友好
(4)F12:最简单最轻量级,但是和其他的抓包工具还是存在一定的差距
(5)TCPdump:主要用于Linux命令的抓包工具,前提是要会操作Linux系统

29.fiddler有哪些用途?

(1)辅助定位bug:出现bug时,通过fiddler可以抓取request和response,通过对参数进行分析,可以定位是前端问题还是后台问题
(2)构建模拟测试场景:利用fiddler的Breakpoints、AutoResponsder等功能,可以通过修改request或者response的参数,来实现构建模拟测试场景
(3)APP弱网模拟测试:修改fiddler脚本中m_simulate的网络参数数值,设置弱网环境
(4)前端性能分析及优化:通过fiddler的Statistics和Timeline来获取前端的性能数据,从而为性能分析及优化提供依据

30.fiddler抓不到请求的原因有哪些?

(1)抓不到App的请求,可能是代理或者端口设置的不对
(2)Fiddler配置问题导致:
① Fiddler添加了域名过滤,导致抓不到其他域名的请求
② Fiddler关闭了代理功能,导致抓不到请求(开关在左下角)
③ Fiddler设置了process,只能抓到某个浏览器的请求
(3)IOS抓不到包有可能是证书过期了,需要重新安装证书

31.postman在工作中使用流程是什么?

(1)在 postman 先建好 url 环境变量
(2)根据接口用例所属的模块新建集合进行管理
(3)在集合中不同模块下录入测试用例
(4)录入测试用例的时候根据预期结果在 tests 页签中增加断言
(5)选择相应测试数据文件,运行测试脚本
(6)导出和分享测试结果

32.postman全局变量和局部变量区别是什么?

(1)全局变量可以在Postman的所有集合中使用,它们在任意位置都可见,无需在每个环境中重新定义。全局变量的设置可以通过Postman的全局配置进行,他的值值可以通过在请求中使用 {{全局变量名}} 的语法来引用。
(2)局部变量是在Postman的单个请求中定义的变量,它们只在该请求的范围内有效。局部变量的设置可以通过在请求的“Tests”脚本部分使用 pm.variables.set(“variable_name”, value) 来实现,并且可以通过 pm.variables.get(“variable_name”) 来获取其值。
总结:全局变量在整个Postman环境中都是可用的,而局部变量仅在定义它们的单个请求中有效。

33.postman内置动态参数以及自定义动态参数是什么?

(1)内置动态参数:表现形式{{ $ }}
{{$ timestamp}}:生成当前时间的时间戳
{{$ randomInt}}:生成0~1000之间的随机数
{{$ guid}} :生成随机的GUID的字符串
内置的动态参数 有局限,局限在于无法断言。
(2)自定义动态参数:在pre-request script中定义参数,然后设置为全局变量,即可实现自定义动态参数
var times = Date.now(); //手动获得时间戳
pm.globals.set(“times”, times); //设置为全局变量
使用时:{{times}}

34.postman常规断言、动态参数断言、全局断言是什么?

(1)最常用常规断言:
Status code: Code is 200 检查返回的状态码是否为200
Response body :Contains string 检查响应中包含指定字符
Response body :Json value check 检查响应中其中json的值
Response body :is equal to a tring 检查响应等于一个字符串
(2)自定义动态参数(全局变量)断言的方式:
在tests中不能通过{{times}}的方法进行调用全局变量,只能通过下面3种方式调用:
pm.globals.get(“times”);
globals[“times”];
globals.times;
(3)全局断言:选择集合,点击编辑Edit,在tests中添加全局断言,全局断言一般只断言状态码

35.postman接口测试如何实现数据驱动?

对参数批量校验时,可通过数据驱动实现,即把参数值配置在文件中,直接导入文件,循环调用接口
(1)测试数据文件配置:
在json文件or CSV文件中配置相应参数,
(2)参数引用:
在请求参数(请求行、请求头、请求体)中,通过{{name}}引用数据文件中的数据,name为CSV文件的 字段名 或 json 文件中的 key
(3)添加及执行:在Runner ->选择接口 ->Data处选择测试数据文件上传,上传后点击“Run 接口测试集”运行接口
注:添加测试数据文件后,点击Preview可预览测试数据

36.如何用 postman 设置关联?

关联就是把上一个接口返回值的部分截取出来,作为下一个接口的参数,能让接口串联运行在 postman 中设置关联的步骤如下:
(1)先通过正则表达式提取的方式或 json 取值的方式把下一个接口需要的信息从上一个接口截取出来
(2)使用设置全局变量的代码把取出来的值保存到全局变量

37.Jmeter中常用的断言方式有哪些?

(1)Json断言,可以通过Json路径表达式判断接口返回的Json字符串中某些字段是否符合预期
(2)响应断言,可以判断响应头/响应体中是否包含预期的字符串。区别在于:Json断言只能判断Json格式;响应断言只要是文本格式都可以判断,应用范围更广
(3)beanshell断言,可以判断当一个接口经过CSV数据驱动之后,对返回的正常结果和异常结果同时进行判断。

38.Jmeter的参数是如何传递的?

参数的传递分为线程组内和多个线程组之间的传递
(1)线程组内传递:正则表达式、json提取器,$ {api_token}
当数据返回是html格式,一般用正则表达式提取器
当数据返回是Json格式,一般用JSON提取器
(2)多个线程组之间的传递需要用到beashell后置处理器将提取的参数设置为全局变量;提取时使用
$ {__setProperty(newtoken,${api_token},)},引用时使用 ${__property(newtoken)}即可。

39.fiddler 断点有什么用?

(1)修改HTTP请求头信息,如修改Cookie,User-Agent等
(2)突破表单限制,修改请求数据,提交任意数字,如充值最大100,可以修改成10000
(3)拦截响应数据,修改响应体,如修改服务端返回的页面数据

40.需要鉴权的接口,你是如何处理的?

首先,确认一下接口是采用什么方式进行的鉴权的,是 cookie/session 还是 token方式:
(1)如果是 cookie/session 的方式,那么可以直接用 requests 模块里面的 session 类去创建一个对象直接发送请求,它会自动记录 cookie 信息;
(2)如果是 token ,在接口返回的响应数据中提取对应的 token 的值,在发送请求的时候需要根据需求传入这个 token

  • 13
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值