软件测试面试题 - 接口测试

接口测试

什么叫接口测试

接口测试是测试系统组件间接口的一种测试方法
接口测试的重点:检查数据的交换,数据传递的正确性,以及接口间的逻辑依赖关系
接口测试的意义:在软件开发的同时实现并行测试,减少页面层测试的深度,缩短整个项目的测试周期

为什么做接口测试

1.可以发现很多在页面上操作发现不了的bug
2.检查系统的异常处理能力 (如传入异常参数)
3.检查系统的安全性、稳定性
4.前端随便变,接口测好了,后端不用变
5.可以测试并发情况,一个账号,同时(大于2个请求)对最后一个商品下单,或不同账号,对最后一个商品下单
重点:6.绕过前端,直接对服务端进行校验,如:可以修改请求参数,突破前端页面输入限制(如金额)
重点:7.可以进行接口自动化测试(jmeter+ant+jenkins)
重点:8.测试可提前介入进行接口测试,方便回归测试。(开发把接口开发完了就可以进行接口测试了,而不用等到联调完成才可以测试)

接口测试主要使用什么工具

1、postman
2、jmeter

接口测试怎么做

我们是用jmeter工具来做接口测试的。

分析出测试需求,开发把接口做好后,把接口文档给到我们,然后就开始进行接口测试了。(没有接口文档的话要等前端和后端联调好了,再用Fiddler进行抓包)整体思路:
    
	1.首先要保证这个接口功能是好的,可以按照接口文档上的参数,正常传入,看看是否能够返回正确的结果。
    2.确定结果正确后,可以从几个维度来进行测试:例如:
        (1)接口的请求参数的数据类型后台有没有做校验;
        (2)必填的参数后台有没有做处理;(在页面上不输入就提交,会提示,但接口测试绕开了前端的校验,要是不输入也能添加成功,那肯定是有bug);
        (3)请求参数的长度是否做了处理(比如页面只允许输入50个字符,那我在接口测试中输入超过50个字符,如果提交成功就说明有bug了);
        (4)提供的接口是否实现了对应的业务场景和业务功能(比如上架一个商品,最本质的是看数据库对应的商品表格中有没有该商品的信息);(即看实际效果)
        (5)根据业务流程做一些接口关联,然后测试异常流的情况下是否有bug。

(看面试官反应,可以继续讲jmeter怎么使用的)

网上的参考答案:

平常你是怎么测试接口的?

通过性验证:首先肯定要保证这个接口功能是好使的,也就是正常的通过性测试,按照接口文档上的参数,正常传入,是否可以返回正确的结果。

参数组合:现在有一个操作商品的接口,有个字段type,传1的时候代表修改商品,商品id、商品名称、价格有一个是必传的,type传2的时候是删除商品,商品id是必传的,这样的,就要测参数组合了,type传1的时候,只传商品名称能不能修改成功,id、名称、价格都传的时候能不能修改成功。

接口安全:
1、绕过验证,比如说购买了一个商品,它的价格是300元,那我在提交订单时候,我把这个商品的价格改成3元,后端有没有做验证,更狠点,我把钱改成-3,是不是我的余额还要增加?
2、绕过身份授权,比如说修改商品信息接口,那必须得是卖家才能修改,那我传一个普通用户,能不能修改成功,我传一个其他的卖家能不能修改成功
3、参数是否加密,比如说我登陆的接口,用户名和密码是不是加密,如果不加密的话,别人拦截到你的请求,就能获取到你的信息了,加密规则是否容易破解。
4、密码安全规则,密码的复杂程度校验

异常验证:
  所谓异常验证,也就是我不按照你接口文档上的要求输入参数,来验证接口对异常情况的校验。比如说必填的参数不填,输入整数类型的,传入字符串类型,长度是10的,传11,总之就是你说怎么来,我就不怎么来,其实也就这三种,必传非必传、参数类型、入参长度。

性能测试
接口并发情况,如上面提到的:一个账号,同时(大于2个请求)对最后一个商品下单,或不同账号,对最后一个商品下单
接口响应时间,响应时间太长了,肯定需要优化,一般都是毫秒级别。

没有接口文档怎么做接口测试

正常情况下,没有接口文档是很难做接口测试的,但是面试时不能说不能做
1、可以与开发沟通,自己整理书写接口文档
2、使用fiddler抓包,查看请求参数,不懂的地方问开发。

上下游有数据依赖怎么处理

1、使用关联(后置正则提取器,后置json提取器)
2、使用全局变量来处理依赖的数据,比如登录后返回的token,如果其他接口需要这个token,那么可以使用全局变量来传token。

如何鉴定bug是属于前端还是后端

1、界面 ui的问题一般都是前端的问题
2、请求过去了,但是接口没响应,一般是后端的问题

1.抓包查看请求报文,对应接口文档,如果请求报文有问题,那么就是前端的bug
2.抓包查看返回报文,如果返回的数据不对,那就是后端的问题。

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

这个标准答案是:mock

接着面试官会问你,如果mock的,然后你就顺着坑继续挖,搭建mock服务,参考这篇【https://www.cnblogs.com/yoyoketang/p/9348552.html】

你遇到过的bug?

面试官询问遇到过哪些印象深刻的bug,其实它并不关心你描述的这个bug是否真的有价值,或有多曲折离奇?他只是:了解你平时工作中的测试能力,所以,这就要求的你平时工作中遇到bug时试着自己去定位,定位bug的过程远比你的单纯的执行测试用例有“价值”(自我技能提高的价值),在定位bug的过程中你需要掌握和运用更多知识。

另外,建议你平时养成总结的好习惯,发现的bug,开发解决了,最好问问他原因以及解决的方法,这样再遇到类似问题时,自己也可以试着定位解决。遇到难解决的bug,也可以把最终的解决过程记录下来。(这不是就有素材了)

所以,建议你平时可以主动要求去分享一些自己工作中用到或学习的技术。或者多去参加集体活动,加强自己的表达能力。From:虫师
	接口测试常见的bug有以下几个:

        1.特殊值处理不当导致程序异常退出或者崩溃(比如新建学校那里,传入空值参数时,页面会显示异常)
        2.类型边界溢出,导致数据独处和写入不一致
        3.取值边界外未返回正确的错误信息
        4.权限未处理,可以访问其他用户的信息
        5.逻辑校验不完善,可以利用漏洞获取非正当利益
        6.状态处理不当,导致逻辑出现错误
        7.数组类型item个数为0或者item重复时程序异常退出

jmeter你是怎么用的

总体思路:
    1.首先要添加线程组、http请求、察看结果树
    2.通过抓包或接口文档来填写http请求的内容,包括协议类型、服务器名称、端口号、请求方法、路径、参数等要特别注意参数的填写:get请求没有body,参数可以直接附在路径后面或者填在jmeter的parameter中;post请求要看content-type是什么格式,如果是www-form格式,就把body参数填在jmeter的Parameters中,如果是json格式,就把body参数填在jmeter的Body Data中,还要添加http信息头管理器
    3.写好接口脚本后,可以在察看结果树中运行,查看结果响应数据是否正确,接口能不能跑得通

细节部分:
    1.保持登录状态要添加Cookie管理器。
    2.如果当前接口要用到之前接口的响应数据,就要用接口关联,可以用正则表达式提取器,请求的数据类型是json格式时也可以用json关联,或者直接连接数据库,从数据库中提取数据进行关联
    3.可以用debug sampler查看提取出来的数据,便于检验
    4.验证响应数据是否正确,要用断言,响应断言和json断言,主要断言相应的状态码或者message。
    5.在新建或修改功能中,要求名称或数据唯一时,需要用函数参数化;要实现多个用户登录或不同用户购买不同商品,可以用csv参数化或连接数据库参数化。

jmeter报错怎么办

1.通过查看“察看结果树”的内容的红色标记,找出错误的请求的位置
2.在取样器结果中查看状态码,并通过状态码的信息分析原因所在点
3.看看请求的内容或者格式是否正确 (重点)
4.查看请求中的信息,通过对比请求的信息以及自己输入的内容或者抓包工具中抓取的信息是否匹配

怎么判断一个接口是否成功

从现象到本质
1.先看"察看结果树”中请求颜色—绿色
2.再通过响应信息里面的状态码code,信息message以及响应的内容判断(业务状态码)
3.最重要是看这个接口有没有实现相应的业务功能:看实际效果(也可以在数据库中查看有没有这个数据)

了解哪些协议状态码

1xx:指示信息–表示请求已接收,继续处理。
2xx:成功–表示请求已被成功接收、理解、接受。
3xx:重定向–要完成请求必须进行更进一步的操作。
4xx:客户端错误–请求有语法错误或请求无法实现。
5xx:服务器端错误–服务器未能实现合法的请求。

常见的协议状态码:
	200 OK/客户端请求成功
	301 /永久重定向
	302 //临时重定向
	400 Bad Request//客户端请求有语法错误,不能被服务器所理解
	401 Unauthorized//请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
	403 Forbidden/服务器收到请求,但是拒绝提供服务
	404 Not Found/请求资源不存在,eg:输入了错误的URL
	500 Internal Server Error/服务器发生不可预期的错误
	503 Server Unavailable/服务器当前不能处理客户端的请求,一段时间后可能恢复正常

请求方式有哪些

get 提取数据
post 提交数据
put 修改数据
delete 删除数据

get和post请求的区别

1.`get`请求的参数直接放在url中,`post`请求的参数放在`body`中
2. GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制
3. get和post都一样,没啥所谓的哪个更安全,无论 get 还是 post 传输的数据没有加密的话,通过抓包工具还是可以抓取到数据内容的

拓展:get和post请求的重大区别:
    GET产生一个TCP数据包;POST产生两个TCP数据包。长的说:
        对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
        而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

http请求全过程

1.DNS域名解析,将域名解析成ip地址
2.建立TCP连接,也就是三次握手,只有客户端可以发起连接请求举例:
    客户端:“你好,在家不,有你快递"
    服务器:“在的,送来就行”
    客户端:“好嘞”
3.发送http请求
4.服务器处理请求
5.返回响应结果
6.关闭TCP连接,也就是四次握手,任意一方都可以发起关闭请求举例(以客户端发起为例):
    客户端:“兄弟,我这边没数据要传了,咱关闭连接吧”
    服务端:“收到,我看看我这边有木有数据了”
    服务端:“兄弟,我这边也没数据要传你了,咱可以关闭连接了”
    客户端:“好嘞”
7.浏览器解析HTML
8.浏览器布局渲染,展示页面

osi七层协议

从下到上分别是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
传输层的协议有TCP和UDP,TCP是面向连接的,UDP是面向非连接的;TCP用于传输大量数据,UDP用于传输少量数据;TCP传输比较可靠(因为TCP连接需要三次握手,传输完成后要四次挥手),UDP传输不可靠;TCP传输速度慢,UDP传输速度快
应用层的协议有HTTP、SMTP、ftp、telnet、HTML等

image-20201003025926059

http与https的区别

1、HTTP 标准端口是 80 ,而 HTTPS 的标准端口是 443
2、https比http多了一个SSL证书,https更加安全

怎么设计接口测试用例

主要从四个方面来设计接口用例:功能,逻辑业务,异常,安全

1、功能:
    1)功能是否正常;
    2)功能是否按照接口文档实现
    举例:比如博客园添加随笔,需要登录才能添加。也就是业务要求不支持游客添加随笔功能,如果设计一个没有登录的用户,然后去测试添加随笔接口,结果接口能添加到随笔,说明功能不正常,不符合需求和接口文档描述。

2、逻辑业务:是否依赖业务;
    举例:该接口调用之前,需要调用登录接口,如果不登录也能请求数据,不符合业务规则。

3、异常:参数异常和数据异常
    参数异常:关键字参数,参数为空,多,少参数,错误参数
    数据异常:关键字数据,数据为空,长度不一致,错误数据
    	举例:不管数据异常还是参数异常,测试点差不多,一个参数有key和value,key表示参数,value表示数据。第一,看看参数和数据能不能支持关键字,例如Java中的保留关键字等等。第二个就是参数和数据都为空,看看是否做了判断。第三个,参数多和少,例如有两个参数的接口,你需要设计一个三个参数的用例,一个只有一个参数的用例。数据那边长度不一致,例如设计很长的字符串是否支持,因为数据库创建表过程都设置好了每个字段的长度。输入错误的参数和数据,例如故意输出单词等等。

4、安全测试用例设计:
    1)cookie:有cookie才能获取数据,如果不带cookie还有信息返回,说明有问题
    2)header:正常接口带header信息,删除header看是否能够返回数据。
    3)唯一识别码:app手机识别码,一般是唯一的。

    安全测试主要从上面三点检查。第三个是唯一识别码,主要是指app上手机的识别码,一般很少用到,除非很严格的接口测试,	例如银行app登录,需要指纹,而指纹来源手机,一般有一个手机识别码判断过程。

接口测试参数加密怎么办

1、MD5加密,就直接去网站上面解密
2、比较复杂的话,要开发进行协助,问开发解密的方法,然后加载jar解析包,使用beanshell后置处理器调用方法进行解密,将结果附在变量中,然后引用到相应的入参位置。

接口测试用例包含哪些字段(内容)

用例编号	用例说明	请求参数	请求方法	请求地址	请求头部信息	预期响应状态	测试结果

如何保持登录状态

可以通过cookie、session和token来保存登录状态

cookie保存在客户端中
session保存在服务器中,会占用服务器资源
token可用于分布式部署,用提取器提取出来,放在一个变量里面,然后放在请求头里面,下一次请求的时候带上token,就可以保持登录态 
	(token放在客户端或服务端都可以,一般放在请求头里面,有些会放body里,token关键字眼是:Authorization)

cookie和session的区别

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗, 考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。


使用session机制时,服务器需要检查客户端的请求里是否包含了与服务端对应的session id,检查通过后保持登录状态。
session id往往借助于cookie来进行session id的保存。

image-20200905163416380

怎么做接口自动化测试

为什么做接口自动化?
	做接囗自动化是为了提升回归测试的效率,能在最短的时间发现重要的问题;
怎么做?
	我们之前是挑选重要的和主流程接口进行持续集成测试,比如电商系统中的搜索、商品详情、购物车、订单结算页、下单等;
	首先要搭建并配置好自动化测试环境,写好jmeter测试脚本,用参数化、关联、断言等优化脚本;
	然后配置build文件,build文件中主要是获取jmeter的安装位置、脚本路径、测试报告存放路径;
	这时在cmd中输入ant就可以驱动build文件执行jmeter脚本;
	搭好Jenkins之后,在Jenkins中构建ant,选好报告生成路径;然后点击build now就可以实现接囗自动化,可以进行定时,每天上下班之前跑一遍。

当一个接口出现异常时,怎么办

1.抓包,用fiddler工具抓包,或者浏览器上f12 , app上的话,那就用fiddler设置代理,去看请求报文和返回报文了
2.查看后端日志,xhell连上服务器,查看日志

如何模拟弱网测试

fiddler和charles都可以模拟弱网测试,平常说的模拟丢包,也是模拟弱网测试
posted @ 2020-10-04 09:38  Whatever_It_Takes  阅读(68)  评论(0编辑  收藏  举报