前言
接口测试是现在软件测试面试中的重点,基本上每家公司面试都会问到,学姐整理一下接口测试相关的面试题,顺便给出一些参考答案。
01
Q1:一个接口用例中有多个API接口,前后两个 API 之间如何进行参数传递的?
也就是上下游接口的依赖,A接口的响应结果a,是B接口的请求入参。
一种方法是:动态获取a的值。
另一种方法:比如在接口测试工具Postman、Jmeter中设置参数变量。也就是说A接口运行完毕后,将结果提取出来放在全局变量中。这样一来,其余接口就可以获取到这个值了。如果这个变量不想放在全局中共享,也可以只提供给当前测试套件使用。
02
Q2:你在实施接口自动化测试的过程中,如果某些接口第一次调用长时间没有返回,如何保证流程顺利进行又可以记录错误信息?
如果一个接口长时间没有返回,会影响整体测试的执行时间以及执行结果。
所以我们要为每个接口设置一个超时时间,比如3秒。一个接口超过3秒还没有返回,就可以定位为异常。
当然也不是一个接口一次调用超时了,就一定是异常了,要设置失败重试(一般为3次),如果执行了3次还是超时,就可以认为是一个异常。在Python中很多单元测试框架都可以添加用例失败重跑机质。另外也可以使用while循环实现用例的重复执行。
当一个接口用例,最终重试了三次依然失败或超时,我们就需要将该问题记录到系统日志中并最终显示在测试报告中。但是该用例执行完毕后,还要保证剩下的用例继续执行。如果在不使用单元测试框架的情况下,我们就需要捕获接口调用超时或错误的异常,以保证测试任务不会中断。
总结一下,要保证每个接口用例执行不会时间过长,不会单次失败就误报,又能成功记录错误信息,保证测试任务不中断。我们需要做到三点:设置超时、添加失败重跑机质、记录错误日志,有必要时要捕获异常对象。
在自动化实施过程中,除了要保证正常流程之外,还要对异常场景做合理的处置。
03
Q3:对于加密接口,如何进行测试?
在调用接口的时候,要搞清楚接口的加密方式时什么。
如果是对称加密,要先从开发那里获取对称密钥,基于对称密钥可以加密请求数据,以及解密响应报文。
如果是非对称加密,先从开发获取服务器公钥和私钥,也要知道当前用户的公钥和私钥信息。以便完成接口的数据加密和解密。
04
Q4:你在接口测试中是怎么校验结果是否正确?
1)验证接口响应状态码是否是200。这是接口测试的最基本要求,响应状态码200代表了该接口能接收请求,能返回响应。
2)验证响应的完整内容是否等于预期。当接口响应正文比较短,响应正文内容固定时,可以验证响应内容是否精确地等于预期的内容。
3)验证响应报文是否包含关键信息。当响应内容较长时,可以判断响应内容中是否包含一些关键信息,以此作为验证接口功能的验证点。
4)验证响应报文关键字段是否存在。当响应正文为XML格式或JSON格式时,可以通过XPATH或JSONPATH表达式,指定其中的某个节点,判断它是否存在。
5)验证响应报文关键字段,值是否正确。除了可以验证字段是否存在,如果值是固定的或有确定规则的,还可以验证其值是否正确。若值固定可以验证相等,如果不固定可以考虑用正则表达式匹配。
6)查询数据库或调用其余接口查询。当要验证的信息在当前测试接口的响应内容中不存在时,可以调用其他接口来验证。例如,一个增加用户信息的接口,要验证信息确实增加成功了,可以再调用查询用户信息接口来确认用户信息添加成功。当然,在获取数据库查询权限的情况下,也可以直接查询数据库来验证。
7)以上说的都是功能方面的验证,另外从性能角度,还可以验证接口的响应时间,看是否在一个合理的范围内。
05
Q5:cookie和session有什么区别?
cookie数据存放在客户的浏览器上,不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗。
session会在一定时间内保存在服务器上。当访问增多,会比较占用服务器的性能。
单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie,可以将登陆信息等重要信息存放为session,其他信息需要保存,可以放在cookie。
06
Q6:如何分析一个bug是前端还是后端的?
这种情况很容易判断,先抓包看请求报文,对着接口文档,看请求报文有没有问题,有问题就是前端发的数据不对;
请求报文没问题,那就看返回报文,返回的数据不对,那就是后端开发的问题。
07
Q7:接口测试如何设计测试用例?
接口测试一般考虑入参形式的变化和接口的业务逻辑,一般设计接口测试用例采用等价类、边界值、场景法居多。
接口测试设计测试用例的思路如下:1.正常用例,验证接口逻辑是否正确。根据业务逻辑、输入参数、输出值的描述,对正常输入情况下所得的输出值
2.异常用例,为了保证数据的安全及程序在异常情况下的逻辑的正确性而进行的测试。
模块接口测试的主要包括以下几个方面:1)鉴权码token异常(鉴权码为空<没有鉴权码>,错误的鉴权码,过期的鉴权码)。2)请求参数正常/异常。 3)返回结果校验,数据库比对
08
Q8:jmeter参数化的方式有哪些?
1)配置元件---用户定义的变量元件可以设置全局变量。
2)函数助手对话框中可以选择比如随机字符串、随机日期、随机数字作为参数化。
3)可以使用 csv 文件作为参数化,通过配置元件中的 csv data set config 元件进行设置即可。
09
Q9:你平常做接口测试的过程中发现过哪些bug?
可以发现很多在页面上操作发现不了的bug。可以修改请求参数,突破前端页面输入限制。
举例说明:
1、比如一个订单支付时,我们页面上是无法改变订单金额的,但我们可以通过抓包工具捕获订单支付请求,然后修改订单金额后提交,然后出现了一个原价100元的订单我们用1分钱完成了支付。
2、比如一个转账的页面,前段做了限制导致我们无法在转账金额的输入框输入负数,但我们可以通过抓包工具修改,然后出现了一个转账金额为负数的bug。
10
Q10:依赖于第三方数据的接口如何进行测试?
1)通过mock工具模拟第三方返回
2)测试环境本身支持mock数据,将mock数据写入json文件中,命名格式与开发代码一致。请问接口时,查看日志直接调用mock数据。
11
Q11:常见的 post 提交数据方式?
application/x-www-form-urlencoded
multipart/form-data
application/json
text/xml
最后: 可以在公众号:【自动化测试老司机】免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。