面试题准备--接口测试

1、你们公司的接口测试流程是怎样的?

我们公司的接口测试流程如下:

开发提供API文档(文档里包括各种接口参数,请求方式,返回方式,接口地址等)-->测试针对文档进行接口需求分析,理清楚接口之间关系-->设计接口用例(包括通过性验证/数据验证/异常验证/参数组合及边界值验证/性能测试/安全测试)-->排测试计划和测试优先级-->使用jmeter或者postman进行测试

Jmeter通常使用来测试性能测试较多

postman通常用来做轻量级的接口测试较多

2、请简述一下cookie、session以及token的区别

cookie数据存放在客户的浏览器上,session数据放在服务器上。而token是接口测试时的鉴权码,一般情况下登陆后才可以获取到token,然后在每次请求接口时需要带上token参数。

cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session,session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面应当使用cookie

cookie:单纯使用cookie,用户信息会被保存在客户端,并不安全;可被人破解攻击

session:客户端存储 SessionID,还是需要借助 cookie 来实现;传输数据少,数据结构灵活:相较于 cookie 来说,session 存储在服务端,客户端仅保留换取 session 的用户凭证。因此传输数据量小,速度快。但是从服务器角度来看,session过多会造成服务器负载过重,影响性能;且服务器是有状态的,多台后端服务器无法共享 session,当访问服务器非对应session id 服务器时,则需重新建立session

token:鉴权码;服务器通过加密+签名客户端传过来的用户名和密码,再返回已加密的token给客户端,后续每次请求都带上相应token鉴权;

  好处:安全,可实现跨域使用,跨服务器使用

  坏处:增加服务器运算压力因为要加密

 

 

3、接口测试如何设计测试用例?


接口测试用例设计一般关注以下几个方面:接口业务逻辑,接口传入和传出参数数据验证,异常情况验证,翻页数据及排序验证,数据增删改操作,资源URL验证等

多采用的是边界值,等价类,场景法,正交分析法(pairwise)等

①接口业务逻辑

为不同功能业务流验证

例如创建用户反馈接口,需覆盖写标题不写正文,写正文不写标题诸如此类的创建业务流。

②接口传入和传出参数数据验证

使用等价类和边界值测试接口输入参数

验证相关有效类无效类和最大最小值,空值等

例如输入页码的接口,页码可为正负数,非数字,空值,0,9999等来验证

③异常情况验证

在其他分类或多或少有验证到异常情况,这里是要补充token错误或者错误码验证这些情况

④翻页数据及排序验证

指的是翻页接口

需关注的是翻页的顺序码,翻页的数据显示是否连贯等问题

⑤数据增删改操作验证

指的是当用户数据发生变化,相关接口有无相应变化

例如创建完用户反馈,再使用查看用户反馈的接口验证有无该数据产生,或者可直接查询数据库对照

⑥资源URL验证

指的是一些接口返回资源是以URL地址返回,需查看能否点击下载或者跳转

⑦接口联动相关功能验证

 

以上是针对接口功能用例设计,还有相关安全方面和性能方面case就另算了。

安全方面:

具体需了解接口安全需求才可进行对应测试

例如:如接口使用token鉴权,则修改token或者不同用户使用不同token情况的验证

如接口有数据加密处理,则验证使用市面常用加密方式加密看能否反编译出密码 MD5

更高级的就涉及到修改时间戳验证服务器有无超时验证等

相关内容参考:

https://www.cnblogs.com/yizhiamumu/p/9150462.html 

性能方面:

使用jmeter覆盖多用户高并发场景

jmeter上设置线程组数(用户数),线程数启动时长,循环次数,添加监视器如结果树来做对应压测

也可以使用badboy进行录制jmeter脚本

单次调试可使用postman

https://www.cnblogs.com/jpfss/p/10972298.html

https://blog.csdn.net/zuozewei/article/details/82836158

性能指标

一般系统性能水平都是通过吞吐量来体现,而系统吞吐量有以下几个重要指标:

  • QPS(TPS):每秒钟request/事务 数量
  • 并发数:系统同时处理的request/事务数
  • 响应时间:一般取平均响应时间

作为应用测试,对于服务器接口测试并无十分深入测试,所以并无深入操作jmeter 例如设置mock,RPC接口测试等。

 

4.谈谈你对HTTP协议的了解?


http是超文本传输协议,是应用层的协议,特点是快速,无状态(即请求后就关闭)且http是明文传输,不安全。

http协议传输会先进行TCP连接,通常使用80端口

传输时该协议主要包括请求和响应部分

请求包括 请求行(传输协议及版本),请求头,请求正文

响应包括 响应行,响应头,响应正文

而现在公司主要使用的是https协议

https = http+SSL/TLS

即在传输前再进行一次加密。在握手建立通信时使用非对称加密,然后服务器和客户端各自根据互相传输的三个随机数生成会话密钥进行接下来的通信。

https://www.cnblogs.com/chyingp/p/https-introduction.html

http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html

 

5、get和post请求有什么区别?

get 和post都是客户端向服务器发送的http请求方式,两种方法本质上是 TCP 连接,没有差别

get 产生1个TCP 数据包,且请求信息明文附在URL上传输,有大小限制,通常用来请求服务器资源

post 产生2个TCP 数据包,请求信息不可见,以表单形式发送给服务器端

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

 

6.响应状态码有哪些?

1xx:指示信息--表示请求已接受,继续处理

2xx:成功--表示请求已被成功接收、理解、接受

3xx:重定向--要完成请求必须进行更进一步的操作

4xx:客户端错误--请求有语法错误或请求无法实现

5xx:服务器端错误--服务器未能实现合法的请求

 

7、在接口测试过程中发现的bug多不多?能举几个栗子?


不多

1.测接口时,使用接口创建用户反馈,其中一个时间值传为空值,能创建成功,但当设备同步已创建反馈下到历史记录时,会产生系统的crash。

原因是列表排序会根据创建时间排序,当有个问题无创建时间,则会引发空指针crash,代码内无处理空值操作。

创建用户反馈接口也应该做判空处理。

2.测试接口时,有一次在选填信息一栏填入超长字符,上服务器查看发现信息被截断;

服务器性能测试参考:https://www.cnblogs.com/imyalost/p/10012867.html 

 

8.接口测试中有哪些要注意的测试点?

1.要注意每个接口的必填和选填参数,测试时也要覆盖必填无填路径,选填超长字符场景等

2.接口与接口之间的传参关系

3.数据的加解密处理

 

9.接口执行测试后返回结果做对比,一般比对哪部分内容?

首先是要看返回的状态码,然后看返回的关键信息,通常在接口文档会写清楚哪些返回值对应哪些状态

 

10.为什么开展接口测试?

1.对比与应用界面,接口的改动频率是小很多的,所以测试接口适配工作会少很多;

2.有时候应用多个功能对应是同一个接口,测试接口意味着从更底层测试,能更有效率发现问题;

3.接口测试对于保证服务器安全性这块也是很有必要测试的,许多不法分子会绕过前端直接通过接口入侵服务器;

4.接口测试不依赖功能界面,可以让测试工程师更早介入测试,更快发现问题

11.之前在接口测试过程中,使用的工具是什么?

我们公司使用的是postman,因为对于我们公司没涉及到复杂服务器的业务来说非常轻量级

jmeter,这个工具主要是测试高并发性能相关的内容;

12. 之前用过抓包工具没有?如何使用的?

用过wireshark和fiddler,也了解过Charles 使用起来差不多;

打开fiddler之后,默认浏览器配置了127.0.0.1  8888端口的代理,也可以自己修改,然后设置网站代理或者手机上设置成代理ip+端口(手机需要和电脑一个局域网),fiddler添加一些过滤条件,开启即可抓包;

13 json数据是什么,你平时如何解析json数据?

Json是一种数据格式,可以理解为语法,主要形式是键值对。可以用网上解析工具处理,我们内部会有小工具提供。

14.postman你在工作中使用流程是什么样的?

首先用例设计,设计后在postman建立对应collection,布置测试环境和正式环境,设置global变量和环境变量,理清接口间关系,写好测前的JS脚本和验证脚本;

跑一遍确保没问题,导出使用newman命令行写个脚本去部署在jenkins或者设置个monitor定时跑;

主要跑的是业务基本功能验证;

15.postman中设置环境变量有什么用?

不同接口请求之间传递参数

针对每次都会变的值设置环境变量,可更方便调用;

16.在接口测试中关联是什么含义?如何用postman设置关联?

关联就是把上一个接口返回值的部分截取出来,作为下一个接口的参数,能让接口串联运行

在postman中设置关联的步骤如下:

1) 先通过正则表达式提取的方式或json取值的方式把下一个接口需要的信息从上一个接口截取出来

2) 使用设置全局变量的代码把取出来的值保存到全局变量

3) 在下一个接口中,使用{{全局变量}}代替要替换的静态值

17.postman支持什么类型的协议测试?

http和https

18.postman参数化有哪几种方式?

1.自建环境变量

2.pre-scripts编写js脚本

3.批量运行时导入csv或json格式的文件

 

19.Newman如何执行postman脚本?

Newman run 【脚本名】 -r xxx #生成报告

 

posted @ 2021-02-21 00:43  lms21  阅读(247)  评论(0)    收藏  举报