接口测试

1 接口测试的重点?

检查数据的交换,数据传递的正确性,以及接口间的逻辑依赖关系

2 GET请求和POST请求区别是什么?

GET在浏览器回退时是无害的,而POST会再次提交请求。

GET产生的URL地址可以被Bookmark,而POST不可以。

GET请求会被浏览器主动cache,而POST不会,除非手动设置。

GET请求只能进行url编码,而POST支持多种编码方式。

GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

GET请求在URL中传送的参数是有长度限制的,而POST么有。

对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

GET参数通过URL传递,POST放在Request body中。

GET请求:用于信息获取,相对而言是安全和幂等的;在做数据查询时,建议用GET方式,如:商品信息接口、搜索接口、博客访客接口…

POST请求:表示可能会修改服务器上资源的请求;在做数据添加、修改时,建议用POST方式。如:上传图片接口、登录注册接口..

3 post请求的参数类型有哪些?

application/x-www-form-urlencoded

multipart/form-data

application/json

text/xml

4 postman中post请求的form-data、x-www-form-urlencoded、raw、binary的区别

1、form-data:

等价于http请求中的multipart/form-data,它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。当上传的字段是文件时,会有Content-Type来表名文件类型;content-disposition,用来说明字段的一些信息;

由于有boundary隔离,所以multipart/form-data既可以上传文件,也可以上传键值对,它采用了键值对的方式,所以可以上传多个文件。

 2、x-www-form-urlencoded:

等价于application/x-www-from-urlencoded,会将表单内的数据转换为键值对,比如,name=java&age = 23

 3、raw

可以上传任意格式的文本,可以上传text、json、xml、html等

 4、binary

相当于Content-Type:application/octet-stream,从字面意思得知,只可以上传二进制数据,通常用来上传文件,由于没有键值,所以,一次只能上传一个文件。

5 multipart/form-data与x-www-form-urlencoded区别?

multipart/form-data:既可以上传文件等二进制数据,也可以上传表单键值对,只是最后会转化为一条信息

 x-www-form-urlencoded:只能上传键值对,并且键值对都是间隔分开的

6使用postman进行接口测试的步骤?

1、获取请求的4个要素(请求方法、url、参数(一部分是放在url中,另外一部分是放在body)、header)

  开发提供的api接口文档

  通过抓包工具获取这四个要素(浏览器的网络抓包工具、fiddler等)

 2、根据参数或者header设计测试用例(等价类、边界值、参数组合等)

 3、在postman创建一个请求,将相应的要素填入相应的位置即可

 4、点击send,接口会返回响应,如果响应的结果和预期是一致的,该条测试用例就是通过的,对应的接口功能实现也是对的

7HTTP请求及响应结构?

HTTP的请求结构4部分:请求行、请求头部、空行、请求数据

HTTP的响应结构4部分:状态行、消息报头、空行、响应正文

常见的响应状态码(HTTP Status Code):

   1开头-信息,服务器收到请求,需要请求者继续执行操作

   2开头-成功,操作被成功接收并处理

   3开头-重定向,需要进一步的操作以完成请求

   4开头-客户端错误,请求包含语法错误或无法完成请求

   5开头-服务器错误,服务器在处理请求的过程中发生了错误

8 TCP/UDP(user datagram protocol)的区别

TCP 是面向连接的,UDP 是面向无连接的

 UDP程序结构较简单

 TCP 是面向字节流的,UDP 是基于数据报的

 TCP 保证数据正确性,UDP 可能丢包

 TCP 保证数据顺序,UDP 不保证”

9 接口测试的好处?

1、发现页面测试发现不了的bug(前台验证、后台不验证的问题)

2、检查系统异常处理能力(前台加密了,在发送请求报文中密码没有加密)

3、检查系统个安全性和稳定性

4、前端可以随便改,只要接口测试通过,后台就可以不用变了”

10与界面处功能测试相比,接口测试的特点?

接口测试没有页面;

它是通过接口规范文档上的调用地址、请求参数(请求的方法、请求头部 、数据),进行请求信息拼接;

然后发送请求,检查返回结果;

只需测入参(请求)和出参(响应)就行

10 常见的http响应码?

1XX——信息类(Information),表示收到http请求,正在进行下一步处理,通常是一种瞬间的响应状态

 2XX——成功类(Successful),表示用户请求被正确接收、理解和处理

  200(OK):请求成功。一般用于GET与POST请求

  201(Created):已创建。成功请求并创建了新的资源

  202(Accepted):

 3XX——重定向类(Redirection),表示没有请求成功,必须采取进一步的动作

  301(Moved Permanently):资源被永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,

   浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI

  302(Found):资源临时移动。资源只是临时被移动,客户端应继续使用原有URI

  304:用其他策略获取资源

 4XX——客户端错误(Client Error),表示客户端提交的请求包含语法错误或不能正确执行

  400(Bad Requests):客户端请求的地址不存在或者包含不支持的参数

  401(Unauthorized):未授权,或认证失败。对于需要登录的网页,服务器可能返回此响应

  403(Forbidden):没权限。服务器收到请求,但拒绝提供服务

  404(Not Found):请求的资源不存在。遇到404首先检查请求url是否正确

 5XX——服务端错误(Server Error),表示服务器不能正确执行一个正确的请求(客户端请求的方法及参数是正确的,服务端不能正确执行,如网络超时、服务僵死,可以查看服务端日志再进一步解决)

  500(Internal Server Error):服务器内部错误,无法完成请求

  503(Service Unavailable):由于超载或系统维护(一般是访问人数过多),服务器无法处理客户端的请求?通常这只是暂时状态”

11 Fiddler的工作原理?

Fiddler是位于客户端和服务器端的HTTP代理,也是目前最常用的http抓包工具之一 。 它能够记录客户端和服务器之间的所有 HTTP请求,

 可以针对特定的HTTP请求,析请求数据、设置断点、调试web应用、修改请求的数据,甚至可以修改服务器返回的数据。既然是代理,

 也就是说:客户端的所有请求都要先经过Fiddler, 然后转发到相应的服务器,反之,服务器端的所有响应,也都会先经过Fiddler

 然后发送到客户端

12 HTTP接口传递数据最常用的方式?

Get方式是从服务器上获取数据;在做数据查询时,建议用Get方式;如:商品信息接口、搜索接口、博客访客接口等。

 Post方式是向服务器传送数据 ;在做数据添加、修改或删除时,建议用Post方式 ;如:微博图片上传图片接口、登录注册接口等。

13 我们测试的接口属于哪一类?

1、服务器接口(基于HTTP协议的接口)

2、大多数人常说的接口测试,通常是 B/S架构,由客户端(浏览器)调用,或模拟客户端(浏览器)调用服务器提供的请求接口,

 由服务器完成处理并返回一个应答的过程。例如:Webservice接口,http接口,jms接口,hessian接口。

3、公共服务接口

15什么是接口测试?

1、接口测试是测试系统组件间接口的一种测试。

2、接口测试的重点是检查数据的交换,传递的正确性,以及接口间逻辑依赖关系。

3、提交接口测试的重要意义:实现开发期并行测试,减少页面层测试的深度,缩短整个项目的测试周期。”

16接口测试的常用工具有哪些?

Postman

JMeter

SoapUI

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

先从上一个接口中的响应数据获取对应的返回值,然后使用正则表达式or使用JSON解析来提取需要获取的值,然后存储在一个变量中,最后在下一个接口中直接引用该变量即可,也可以叫关联技术

18 接口测试用例的编写要点有哪些?

1)必填字段:请求参数必填项、可选项

2)合法性:输入输出合法、非法参数

3)边界:请求参数边界值等

4)容错能力:大容量数据、频繁请求、重复请求(如:订单)、异常网络等的处理

5)响应数据校验:断言、数据提取传递到下一级接口…

6)逻辑校验:如两个请求的接口有严格的先后顺序,需要测试调转顺序的情况

7)性能:对接口模拟并发测试,逐步加压,分析瓶颈点

8)安全性:构造恶意的字符请求,如:SQL注入、XSS、敏感信息、业务逻辑(如:跳过某些关键步骤;未经验证操纵敏感数据)

19接口测试中依赖登录状态的接口如何测试?

依赖登最状态的接口,本质上是在每次发送请求时需要带上存储有账户有效信息的Session或Cookie才能发送成功,在构建POST请求时headers中添加必要的Session或Cookie

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

可以利用一些MOCK工具来模拟第三方的数据返回,最大限度降低对第三方数据接口的依赖

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

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

参数组合:现在有一个操作商品的接口,有个字段type,传1的时候代表修改商品,商品id、商品名称、价格有一个是必传的,type传2的时候是删除商品,

商品id是必传的,这样的,就要测参数组合了,type传1的时候,只传商品名称能不能修改成功,id、名称、价格都传的时候能不能修改成功。

接口安全:

1、绕过验证,比如说购买了一个商品,它的价格是300元,那我在提交订单时候,我把这个商品的价格改成3元,后端有没有做验证,更狠点,我把钱改成-3,是不是我的余额还要增加?

2、绕过身份授权,比如说修改商品信息接口,那必须得是卖家才能修改,那我传一个普通用户,能不能修改成功,我传一个其他的卖家能不能修改成功

3、参数是否加密,比如说我登陆的接口,用户名和密码是不是加密,如果不加密的话,别人拦截到你的请求,就能获取到你的信息了,加密规则是否容易破解。

4、密码安全规则,密码的复杂程度校验

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

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

22 没有接口文档如何做接口测试

没有接口文档,那还能咋办,瞎测呗!一个公司的开发流程里面,如果接口文档都没有,是无法展开接口测试的,你都不知道这个接口干什么的,也不知道具体每个字段代表什么意思,那还测啥呢?

–当然,你肯定不能回答面试官不测(心理mmp,脸上笑嘻嘻),接下来就是扯犊子时间

1.没有接口文档,那就需要先跟开发沟通,然后整理接口文档(本来是开发写的,没办法,为了唬住面试官,先说自己整理了)

2.没有接口文档,可以抓包看接口请求参数,然后不懂的跟开发沟通

本题主要靠情商,通俗来说就是忽悠能力,先唬住面试官了再说,进去了也是瞎测测,随时做好背锅的准备

23 当一个接口出现异常时候,你是如何分析异常的?

1. 抓包,用fiddler工具抓包,或者浏览器上f12,app上的话,那就用fiddler设置代理,去看请求报文和返回报文了

2.查看后端日志,xshell连上服务器,查看日志

24如何模拟弱网测试?

fiddler和charles都可以模拟弱网测试,平常说的模拟丢包,也是模拟弱网测试,一般是通过模拟网络延时实现弱网。

参考:https://www.jianshu.com/p/654eeab88119

24 如何分析一个bug是前端还是后端的?

平常提bug的时候,前端开发和后端开发总是扯皮,不承认是对方的bug,这种情况很容易判断,先抓包看请求报文,对着接口文档,看请求报文有没问题,有问题就是前端发的数据不对,请求报文没问题,那就看返回报文,返回的数据不对,那就是后端开发的问题。

25 什么是接口(API)

API全称Application Programming Interface,一个API就是一个Interface。我们无时不刻不在使用interface。我们乘坐电梯里面的按钮是一个interface。我们开车一个踩油门它也是一个interface。(这是目前个人找到比较好理解的一段解释)

接口就是一个位于复杂系统之上并且能简化你的任务,它就像一个中间人让你不需要了解详细的所有细节。像用户登录页面,我们只需要调用我们的登录接口,我们就可以达到登录系统的目的。

现在市面上有非常多种风格的Web API,目前最流行的是也容易访问的一种风格是REST或者叫RESTful 风格的API。

26 简介restful接口、webservice接口?

restful接口其实就是最常用的http接口,主要有get,post方式,请求报文格式主要是json

webservice接口是基于soap通信协议的,所以常说的soap接口和webservice接口是同一个东西,消息格式是xml,处理时要进行xml解析

27 fiddler抓取HTTPS?

第一步,Fiddler截获客户端发送给服务器的HTTPS请求,Fiddler伪装成客户端向服务器发送请求进行握手 。

第二步,服务器发回相应,Fiddler获取到服务器的CA证书, 用根证书(这里的根证书是CA认证中心给自己颁发的证书)公钥进行解密, 验证服务器数据签名, 获取到服务器CA证书公钥。然后Fiddler伪造自己的CA证书(这里的CA证书,也是根证书,只不过是Fiddler伪造的根证书), 冒充服务器证书传递给客户端浏览器。

第三步,与普通过程中客户端的操作相同,客户端根据返回的数据进行证书校验、生成密码Pre_master、用Fiddler伪造的证书公钥,并生成HTTPS通信用的对称密钥enc_key。

第四步,客户端将重要信息传递给服务器, 又被Fiddler截获。Fiddler将截获的密文用自己伪造证书的私钥解开, 获得并计算得到HTTPS通信用的对称密钥enc_key。Fiddler将对称密钥用服务器证书公钥传递给服务器。

第五步,与普通过程中服务器端的操作相同,服务器用私钥解开后建立信任,然后再发送握手消息给客户端。

第六步,Fiddler截获服务器发送的密文, 用对称密钥解开, 再用自己伪造证书的私钥传给客户端。

第七步,客户端拿到信息后,用公钥解开,验证HASH。握手过程正式完成,客户端与服务器端就这样建立了”信任“。

28 请详细阐述接口测试和UI测试在测试活动中是如何协同测试的?

接口测试和UI测试这两块其实是有一部分是重叠的,UI测试是通过前端写的界面,来调用接口,而接口测试是直接调接口。所以排除前端的处理的逻辑和调用的正确性,在理论上接口测试是可以覆盖所有的UI测试。但实际过程中,如果只是在接口层覆盖所有的业务流,在UI上只测试前端的逻辑,最终的结果可能会是忽视很多原有的功能点,导致了UI测试的不充分。所以存在多人分工且时间充分的时候可以尝试接口去做业务流的全覆盖,否则不要轻易尝试。

29 在测试接口中怎么知道请求成功还是失败?

根据接口请求时接口的返回状态码来判断,状态码以4或5开头就可以视为请求失败

30 session和cookies区别?

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,   考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。”

32你们都怎么做接口测试,都用啥工具?

用postman等用进行接口测试,根据接口文档设计测试用例,测试用例包含对数据的校验,用fiddler做一些断点,抓包,后期回归用自动化测试框架。

33 接口产生的垃圾数据如何清理?

造数据和数据清理,需用python连数据库了,做增删改查的操作,测试用例前置操作,setUp做数据准备后置操作,tearDown做数据清理。

34 接口测试的数据放在哪?

1. 对于账号密码,这种管全局的参数,可以用命令行参数,单独抽出来,写的配置文件里(如ini)

2.对于一些一次性消耗的数据,比如注册,每次注册不一样的数,可以用随机函数生成

3.对于一个接口有多组测试的参数,可以参数化,数据放yaml,text,json,csv都可以

4.对于可以反复使用的数据,比如订单的各种状态需要造数据的情况,可以放到数据库,每次数据初始化,用完后再清理

5.对于邮箱配置的一些参数,可以用ini配置文件

6.对于全部是独立的接口项目,可以用数据驱动方式,用excel/csv管理测试的接口数据

7.对于少量的静态数据,比如一个接口的测试数据,也就2-3组,可以写到py脚本的开头,十年八年都不会变更的

35接口自动化测试框架怎么搭建的?

语言:python

测试框架:unittest(assertEqual,assertTure,assertFalse)

接口调用:requests(API非常简洁)

数据格式的转换:text,json

日志处理:logging —清晰的执行过程,快速定位问题

持续集成:Jenkins(通过插件HTML Publisher/git/Email Extension)进行自动构建,生成HTML,发送邮件

35 简述接口自动化框架的设计、维护?

1、数据与代码分离,(数据驱动)==数据驱动框架==

例如:参数不一样,响应不一样

2、结构分层(数据层,用例层,逻辑性)

逻辑层:公用的方法,封装起来,避免用例层的代码冗余

数据层:例如,设计Excel,excel读取,参数化替换等

用例层:存放测试用例

36 描述TCP/IP协议的层次结构,以及每一层中重要协议?

应用层/Application HTTP、SMTP、FTP

传输层/Transport TCP、UDP

网络层/Network IP

链路层/Link ARP、RARP

39 常见应用层协议及默认端口号?

FTP:文件传输协议       端口号为:21

HTTP:超文本传输协议    端口号为:80

DNS:域名系统           端口号为:53

Telenet:远程终端协议   端口号为:23

POP3:邮局协议版本3     端口号为:110

SMTP:邮件传输协议      端口号为:25

40 TCP的三次握手和四次挥手?

三次握手:

第一次握手:客户端向服务器发送访问数据的请求

第二次握手:服务器向客户端反馈信息表示已收到请求,稍后发送数据

第三次握手:客户端确认收到服务器的反馈信息,并做好接受准备

四次挥手:

第一次挥手:先由客户端向服务器端发送一个FIN,请求关闭数据传输。

第二次挥手:当服务器接收到客户端的FIN时,向客户端发送一个ACK,其中ack的值等于FIN+SEQ

第三次挥手:服务器向客户端发送一个FIN,告诉客户端应用程序关闭。

第四次挥手:当客户端收到服务器端的FIN是,回复一个ACK给服务器端。其中ack的值等于FIN+SEQ”

41 mock的概念?

Mock能干啥”mock是一个模拟数据生成器,旨在帮助前端独立于后端进行开发,帮助编写单元测试。mock有如下功能

1.前后端联调,如果你是一个前端页面开发,现在需要开发一个功能:

下一个订单,支付页面的接口,根据支付结果,支付成功,展示支付成功页,支付失败,展示支付失败页。

要完成此功能,你需要调用后端的接口,根据返回给你的结果,来展示不同的页面。此时后端接口还没开发好,

作为一个前端开发总不能等别人开发好了,你再开发,那你只有加班的命了。

为了同步开发完成任务,此时,你可以根据接口文档的规定,把接口的地址和入参传过去,然后自己mock接口的不同返回界面,来完成前端的开发任务

2.单元测试,单元测试的目的是测试某个小小单元的功能,但现实中开发的函数或方法都是有依赖关系的,比如b函数的参数,需要调用a函数的返回结果,但是我前面已经测试a函数了

这种情况下,就不需要再测一次a函数了,此时就可以用mock模块来模拟调用这部分内容,并给出返回结果

3.第三方接口依赖,在做接口自动化的时候,有时候需要调用第三方的接口,但是别人公司的接口服务不受你的控制,有可能别人提供的测试环境今天服务给你开着,别人就关掉了,

给自动化接口测试带来很多的麻烦,此时就可以自己写一个mock-server来模拟接口的返回数据

42 如何Fiddler实现mock的效果?

1、首先在本地创建txt数据:将抓到的response中的json数据拷贝到记事本,我们根据需要进行修改,然后点击保存。(文本保存格式utf-8或ASCI)

2、Fiddler的打开AutoResponder标签设置,enable rules的作用是开启或禁用自动重定向功能。

3、通过“Add…”按钮手动添加规则,第一个文本框中添加接口URL,第二个文本框通过下拉列表选择“Find a file…”,选择第一步中创建的txt文件

4、访问接口的URL地址,则txt文件中的内容就显示在浏览器中了”

43简述Jmeter和postman工具的区别?

1.支持的协议不同

Postman只支持HTTP及HTTPs协议。

Jmeter支持HTTP、HTTPS、socket、POP3、smtp、JDBC的多种协议

2.步骤的实现(有区别)

Postman使用Collections管理用例,Jmeter是线程组管理用例

Postman和jmeter都是创建http请求

区别1:postman请求的请求URL是一个整体,jmeter分成了4个部分(协议、主机、端口、路径)

区别2:postman可以在请求中直接填写请求头信息,  jmeter需要通过添加http请求头管理器添加请求头

3数据用例的实现

区别1:jmeter比较适合进行数据与操作分离,而postman比较适合把数据和操作放在一起,显然postman操作更简单,jmeter更便于维护

区别2: postman也支持csv数据文件的导入,但是每次执行时都需要收工加载数据文件。不方便(所以只能做半自动化)

  Jmeter可以进行完全自动化,特别是引入ant后效果更明显

4断言的实现

区别1:Postman有很多自带的断言函数,直接引用即可,操作非常方便。。。 jmeter也自带断言组件,操作非常直观。 区别: postman用函数断言, jmeter用元件进行断言

区别2:jmeter支持正则表达式断言,postman不支持

区别3:Jmeter的断言更丰富。 postman需要通过编程来实现同样的效果,所以难度更大

5执行

区别:默认执行,postman不能保存结果,jmeter可以报存结果

Postman可以通过newman实现批量执行和保存结果,jmeter可以通过ant实现批量执行和保存结果

6其他

Postman比较适合做手工接口测试,因为简单,可以实现半自动化

Jmeter比较适合自动化接口测试,因为功能强大并且可以保存脚本,批量执行设置很容易

Postman一般用来做接口测试,用来发现BUG,验证后台程序

Jmeter可以进行接口测试及性能测试。”

43 为什么要做接口测试

1.因为很多系统关联都是基于接口实现的,接口测试可以将系统复杂的系统关联进行简化

2.接口工程比较单一,能够比较好的进行测试覆盖,也相对容易实现自动化持续集成

3.接口相对于界面功能 ,会更底层一些,测试覆盖会更容易

45接口测试时机

1.接口测试在单元测试之后,ui测试之前

2.接口测试的函数数量远远小于单元测试,接口定义的稳定性高于函数的稳定性,同时接口定义的稳定性高于类级别的函数

3.接口测试改动的代码比单元测试少很多

4.基于子系统,子模块,接口层次的测试

5.所以接口测试可以获得较高的投资回报”