常见的接口测试面试题

本文详细介绍了HTTP与HTTPS协议的区别,包括安全性和端口使用。同时,讨论了GET和POST请求的不同,以及cookie、session和token在鉴权方面的异同。针对接口测试,提出了包括用例设计、测试工具使用(如JMeter和Postman)以及自动化测试策略。此外,还涵盖了数据驱动、异常处理和接口稳定性的保障方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、get和post的区别

区别在于:
1) GET一般用于查询数据;而POST一般用于添加、删除或修改数据。
2) 传参方式不同:get通过地址栏传输,post通过表单报文传输,所以post请求比get请求的安全性相对 较好。get请求可以直接通过浏览器访问,支持刷新和后退。post请求不能直接使用浏览器访问,刷新后 数据要重新发送。
3) 传参长度不同:get参数有长度限制(受限于url长度),而post无限制
4) GET产生一个TCP数据包(对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200返回数据),POST产生两个TCP数据包(对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok返回数据)、

2、http和https的区别

1) http是超文本传输协议,信息是明文传输,Https协议是由HTTP协议+SSL协议构建的加密传输协 议,比http协议安全;
2) http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443;
3) HTTP 无需证书,而 HTTPS 需要认证证书

3、cookie,session,token有什么相同点和不同点

相同点:三者都是用于鉴权并且都是由服务器产生的。
不同点:
生成时间:cookie 是第一次访问服务器生成,session每一次登录生成,token 一般是由一个单独的接口生成。
保存位置:cookie保存在客户端,session保存在服务器内存(默认30分钟的生命周期),token保存在服务器的磁盘(一般2小时,生命周期由开发设定)
安全方面:cookie不安全,session相对安全,token比较安全
长度方面:cookie保存的数据不能超过4k, session浏览器对其没有限制,token 也没有限制。

4、如果模块请求 http 改为了https,测试方案应该如何制定,修改?

分别用 http 还有 https 登录试试。如果用 https 可以正常登录,地址栏显示一把锁头,那么这个网站是有部署 SSL 的。如果 http 和 https 都能够正常登录,进一步说明该网站没有设置强制 https 登录,或者说没有设置 http 链接自动跳转 https 链接;相反如果用 http 登录,结果跳转到 https 页面,说明网站部署了 SSL, 而且设置了 http 自动跳转 https。

5、测试的数据你放哪

1、全局的参数,如主机地址、数据库地址、账号密码等,都可以写在配置文件里面;
2、一次性消耗的数据可以随机函数生成
3、对于反复使用的数据可以放到数据库,每次使用时记得恢复环境;
4、多组测试数据可以使用参数化,放到yaml,text,json,excel、csv中都可以

6、常见的http接口请求头

在这里插入图片描述
在这里插入图片描述

7、你们项目中有哪些接口,请结合项目举几个案例

5-10个案例,凡是有数据交互的地方就有接口

8、你是怎么做接口测试的?

1、获取接口文档,熟悉单接口和链路接口,包括地址、请求方式、鉴权、入参、出参、错误码等。
2、编写接口测试用例以及评审(三方会审)
正例: 单接口是返回成功的,链路接口是返回成功的
反例:
鉴权的反例: 鉴权码是否必填,鉴权码错误、鉴权码过期。。。(鉴权:鉴定是否有权访问接口的权限)
参数反例:必填, 类型异常、长度异常的、边界值。。
错误码反例: 根据接口文档而定
分页场景
因项目而定,可能的其他反例,接口黑名单,接口调用次数限制
兼容性:(一个接口对应多个版本的app, 调用方式不同的)
3、使用接口工具(jmeter)工具实施接口测试, 有bug提bug。
实施接口测试的过程中要考虑的是接口关联、加密、动态参数、数据驱动等。
4、继续集成
jmeter+ ant + jenkins + gitlab 自动生成报告发送相关人员邮件。

9、你做接口测试过程中发现了哪些bug? 多吗?

接口测试发现的bug ,一般都是接口没有按约定返回数据,参数必填没有限制,参数长度没有控制,类型没有校验,包括边界值没有处理,代码逻辑错误,数据错误,或没有返回合理的错误提示,没有鉴权。
前后端联调接口的bug非常多。

10、依赖于第三方的数据接口你们是怎么测试的?

1、首先看第三方的接口有没有可以用的测试环境,如果有的话,就像其他接口一样进行测试,考虑正例反例
2、如果第三方没有测试环境,就使用mock工具moco来模拟返回值。

11、如何验证接口是否返回成功?

我们是这么做的,接口用例中一般有两种断言:1状态断言(1一个) 2、业务断言(多个)
1、验证接口返回码是否为200
2、当接口返回的报文比较少的情况下,那么就会使用相等断言
3、当接口返回的报文比较多的情况下,那么就会使用包含核心的业务关键字。
4、我们返回的是json格式的数据,一般会使用响应断言和json断言
5、像我们有做数据驱动的接口,那么一般会使用beansell断言。
6、针对一些接口的业务流,就会去查数据库校验最核心的业务流完成的标识字段。

12、jmeter 中常用的断言有哪些?

响应断言: 一般是对响应文本进行断言,只要返回的是文本信息都可以断言
json断言:只能对返回格式是json的响应进行断言,所以响应断言适用的范围更广,使用更多
断言持续时间:就是通过请求响应的时间去断言,超过设置的值就断言失败,一般在做性能测试的时候使用

13、有postman,jmeter,apifox 等工具实施接口测试,为什么还要自动化?

1、大中型的项目或产品,接口或功能很多,需要团队协作,版本控制,通过这些工具没办法做到。
2、安全问题,像postman、apifox这个接口工具是在别人服务器上的,安全性降低了。
3、多种不同的协议,有些工具没办法实现。
4、排错,定位问题,自己开发的框架,可以输出清晰的日志
5、报告不详细,不美观,自己搭建的框架可以二次开发,完善报告
6、日志监控,自己搭的框架可以做日志监控。

14、接口自动化/web自动化怎么做?

说流程:细化
1、自动化可行性分析,项目周期,自动化率,需求变更。
2、调研项目组的自动化能力及自动化工具或框架的选择。
因为我对python 比较熟悉,而且这个语言比较容易上手,我选择了python+ pytest + yaml + allure+ logging+gitlab + jenkins
3、计划、框架的搭建和完善,落地实施的程度
框架主要包括的那些目录和功能,common(放一些公共的方法,比如yaml的处理的方法,统一请求接口的,)、hotloads(热加载)、log(打印日志的方法,和日志文件的存放)、testcase(各模块的用例)、reports(生成的报告文件)、temp(生成报告的临时文件)、config.yaml(全局变量的配置文件)、extract.yaml(中间变量的存放文件)、conftext(固件,处理特定接口前后处理的事情)、run.py(启动文件)、pytest.ini (用例执行策略配置文件)
4、编写、调试、维护自动化测试用例
5、持续集成,无人值守测试
6、添加用例
7、生成报告及通知

15、 工作中常用的jmeter自带函数有哪些?

Random: 随机数
RandomDate :随机日期
RandomString :随机字符串
MD5: MD5加密
strLen:字符串长度
time:当前时间戳
setProperty: 跨线程组保存属性
property:跨线程组获取属性值

16、 postman中常见的post提交数据方式有哪些?有什么区别

1、application/x-www-form-urlencoded 表单
2、multipart/form-data 表单+文件上传
3、application/json(test/plain, text/xml) json,text、xml、js、html
4、binary 二进制

17、你在哪个项目做了自动化,自动化率是多少?多少case?执行需要多久?

根据自己实际情况描述
一般的项目
接口自动化覆盖率在98%以上, webui 自动化的覆盖率在30%左右
项目3年以上做自动化

18、框架是如何实现数据驱动的?

数据驱动就是从文件像execl或yaml 读取输入输出的测试数据,然后通过数据驱动方法,比如像pytest里面的paramerize方法,把数据传入到自动化脚本中,自动化脚本中的方法去做接口请求以及判断测试的结果,从而实现代码和数据的分离。
数据和代码分离
unitest: ddt
pytest: parametrize

19、自动化用了哪些python库,处理过哪些异常?

web
webdriver, webdriverwait , by, os ,xlrd,xlwt, pytest, time, logging
接口:
os , requests, re , jsonpath ,pytest , yaml , allure , time, logging,
re.search() 1个,group 获取值
re.findall() 多个, list
nosuchelementexception
nosuchframeexception
timeoutexception
nosuchfilename

20、接口测试用例设计主要考虑哪些方面?

1、考虑输入参数的合法性:参数是否必填,是否有默认值,参数长度或类型的校验,边界值等,图片上传考虑图片的大小或格式,查询考虑数据库排序,分页考虑数据分页显示等。
2、链路接口考虑业务逻辑,如果有状态的变化的要做数据库校验。
3、兼容性(app多个版本,比如微信1.0,2.0 都是调用的方式不一样,要测试不同的方式调用都正常)
4、安全性(鉴权,敏感信息加密,sql注入等)
5、性能(主要关注Tps , 响应时间)
6、幂等性(调用1次和调用1万次结果一样)

21、一个接口请求不通,你一般会考虑哪些方法?

1、检查请求的四要素:请求方式、请求路径、请求参数、请求头
2、客户端和服务器之间的网络是否通,检查服务器上的项目是否运行正常。
3、检查服务器的防火墙。
4、确定鉴权码是否有效。
5、检查是否有打开代理服务器,比如fiddler,jmeter的代理
6、设置了dns , 比如之前公司有一个项目开发、测试、演示三个环境,每个环境要设置不同的dns, 有一个项目不需要设置dns ,设置了dns就访问不了。

22、你们是怎么做接口测试的?(接口测试的流程)

1、获取接口文档,熟悉单接口和链路接口,包括地址、方式、鉴权、入参、出参、错误码等。
2、编写接口测试用例以及评审(三方会审)
正例: 单接口是返回成功的,链路接口是返回成功的
反例:
鉴权的反例: 鉴权码必填,错误、过期。。。(鉴权:鉴定是否有权访问接口的权限)
参数反例:必填, 类型异常、长度异常的。。。
错误码反例: 根据接口文档而定
因项目而定,可能的其他反例,接口黑名单,接口调用次数限制,分页场景
兼容性:(一个接口对应多个版本的app, 调用方式不同的)
3、使用接口工具(jmeter)工具实施接口测试, 有bug提bug。
实施接口测试的过程中要考虑的是接口关联、加密、动态参数等。
4、继续集成
jmeter+ ant + jenkins + gitlab

23、如何保证接口的稳定性?

提高脚本的稳定性,既要满足稳定的要求,又要兼容不同的环境、平台等
稳定性,即自动化的脚本能重复使用,且脚本不报错,系统报错除外
兼容性,即是能在不同的平台、环境下运行
解决方法
1、为了能重复运行脚本,应在运行之前、以及运行完后进行数据清理,分为前置清理、后置清理
2、加入失败重跑机制,如遇到失败,设置重试次数
3、将测试环境独立出来,可灵活配置运行环境
4、Windows、Linux环境下文件路径要做兼容,因为两个系统获取文件路径的方式不一致
5、异常捕获处理,有异常跳过、或标记
6、确保用例的完整性、独立性,可耦合,可独立运行
7、依赖第三方服务的接口需要设置合理的超时时间
8、做到业务闭环。
9、脚本中要使用相对路径,确保换了位置一样执行成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

javascript_good

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值