接口测试部分

接口测试部分

1.什么是接口测试
概述:接口测试就是代替前端验证后台程序是否正确
详述:
	接口测试是测试系统组件间接口的一种测试。

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

	提交接口测试的重要意义:实现开发期并行测试,减少页面层测试的深度,缩短整个项目的测试周期。
2.接口测试用例编写要点
1.测试每个参数类型不合法的情况(类型不合法容易遗漏NULL型)
2.测试每个参数取值范围不合法的情况
3.测试参数为空的情况
4.测试参数前后台定义的一致性
5.测试每个参数的上下限(这里容易出致命的BUG,如果程序处理不当,可能导致崩溃)
6.如果两个请求有严格的先后顺序,需要测试调转顺序的情况
#注意事项
必填字段:请求参数必填项、可选项
合法性:输入输出合法、非法参数
边界:请求参数边界值等
容错能力:大容量数据、频繁请求、重复请求(如:订单)、异常网络等的处理
响应数据校验:断言、数据提取传递到下一级接口...
逻辑校验:如两个请求的接口有严格的先后顺序,需要测试调转顺序的情况
性能:对接口模拟并发测试,逐步加压,分析瓶颈点
安全性:构造恶意的字符请求,如:SQL注入、XSS、敏感信息、业务逻辑(如:跳过某些关键步骤;未经验证操纵敏感数据)
3.接口测试优点
1.可以发现很多在页面上操作发现不了的bug 
2.检查系统的异常处理能力 
3.检查系统的安全性、稳定性 
4.前端随便变,接口测好了,后端不用变 
5.可以测试并发情况,一个账号,同时(大于2个请求)对最后一个商品下单,或不同账号,对最后一个商品下单 
6.可以修改请求参数,突破前端页面输入限制(如金额)
4.怎样测试一个接口
#通过性验证:
	首先肯定要保证这个接口功能是好使的,也就是正常的通过性测试,按照接口文档上的参数,正常传入,是否可以返回正确的结果。
#参数组合:
	现在有一个操作商品的接口,有个字段type,传1的时候代表修改商品,商品id、商品名称、价格有一个是必传的,type2的时候是删除商品, 商品id是必传的,这样的,就要测参数组合了,type1的时候,只传商品名称能不能修改成功,id、名称、价格都传的时候能不能修改成功。
#接口安全: 
	1、绕过验证,比如说购买了一个商品,它的价格是300元,那我在提交订单时候,我把这个商品的价格改成3元,后端有没有做验证,更狠点,我把钱改成-3,是不是我的余额还要增加? 
	2、绕过身份授权,比如说修改商品信息接口,那必须得是卖家才能修改,那我传一个普通用户,能不能修改成功,我传一个其他的卖家能不能修改成功 
	3、参数是否加密,比如说我登陆的接口,用户名和密码是不是加密,如果不加密的话,别人拦截到你的请求,就能获取到你的信息了,加密规则是否容易破解。 
	4、密码安全规则,密码的复杂程度校验
#异常验证: 
	所谓异常验证,也就是我不按照你接口文档上的要求输入参数,来验证接口对异常情况的校验。比如说必填的参数不填,输入整数类型的,传入字符串类型,长度是10的,传11,总之就是你说怎么来,我就不怎么来,其实也就这三种,必传非必传、参数类型、入参长度。
#性能测试: 
	接口并发情况,如上面提到的:一个账号,同时(大于2个请求)对最后一个商品下单,或不同账号,对最后一个商品下单 接口响应时间,响应时间太长了,肯定需要优化,一般都是毫秒级别
5.get和post请求区别
- GET在浏览器回退时是无害的,而POST会再次提交请求。
- GET产生的URL地址可以被Bookmark,而POST不可以。
- GET请求会被浏览器主动cache,而POST不会,除非手动设置。
- GET请求只能进行url编码,而POST支持多种编码方式。
- GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
- GET请求在URL中传送的参数是有长度限制的,而POST么有。
- 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
- GET参数通过URL传递,POST放在Request body中。
GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
6.HTTP请求类型
GET:获取URL下的资源、提交表单信息(用户名、密码)

POST:向服务器提交更新数据(创建或更新服务器资源)

PUT:存储一个资源到请求的URL

DELETE:删除给定的URL所标志的资源

HEAD:返回URL标志的头信息

TRACE:返回TRACE请求附带的头字段

OPTION:返回服务器支持的HTTP请求

7.HTTP状态码
- 200 请求已成功,请求所希望的响应头或数据体将随此响应返回。
- 201 请求已经被实现,而且有一个新的资源已经依据请求的需要而建立,且其 URI 已经随Location 头信息返回
- 202 服务器已接受请求,但尚未处理
- 301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
- 302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
- 303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
- 304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
- 305 (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。
- 307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
- 401 当前请求需要用户验证。如果当前请求已经包含了 Authorization 证书,那么401响应代表着服务器验证已经拒绝了那些证书
- 403 服务器已经理解请求,但是拒绝执行它。与401响应不同的是,身份验证并不能提供任何帮助,而且这个请求也不应该被重复提交
- 404 请求失败,请求所希望得到的资源未被在服务器上发现
- 500 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器的程序码出错时出现。
- 501 服务器不支持当前请求所需要的某个功能。当服务器无法识别请求的方法,并且无法支持其对任何资源的请求。
- 502 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
- 503 由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是临时的,并且将在一段时间以后恢复。

8.HTTP报文
请求报文包含三部分: 
a、请求行:包含请求方法、URl、HTTP版本信息 
b、请求头部(headers)字段 
c、空行
d、请求内容实体(body) 
响应报文包含三部分: 
a、状态行:包含HTTP版本、状态码、状态码的原因短语 
b、响应头部(headers)字段 
c、响应内容(body)实体

9.HTTP和HTTPS的区别
HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司 设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。
简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
HTTPS和HTTP的区别主要如下:
总的来说: HTTPS=SSL+HTTP
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。 (这个只是默认端口不一样,实际上端口是可以改的)
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

10.什么是Http协议无状态协议?怎么解决Http协议无状态协议?
1.无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息 
2.无状态协议解决办法: 通过1、Cookie 2、通过Session会话保存。

11.cookies,session,token区别
    cookie 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能。
cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。由于cookie是存在客户端上的,所以浏览器加入了一些限制确保cookie不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的cookie数量是有限的。

    session 从字面上讲,就是会话。这个就类似于你和一个人交谈,你怎么知道当前和你交谈的是张三而不是李四呢?对方肯定有某种特征(长相等)表明他就是张三。
session 也是类似的道理,服务器要知道当前发请求给自己的是谁。为了做这种区分,服务器就要给每个客户端分配不同的“身份标识”,然后客户端每次向服务器发请求的时候,都带上这个“身份标识”,服务器就知道这个请求来自于谁了。至于客户端怎么保存这个“身份标识”,可以有很多种方式,对于浏览器客户端,大家都默认采用 cookie 的方式。
服务器使用session把用户的信息临时保存在了服务器上,用户离开网站后session会被销毁。这种用户信息存储方式相对cookie来说更安全,可是session有一个缺陷:如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候session会丢失。

    Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。
Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由token的前几位+盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接token请求服务器)。
使用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。

12.fiddler工具怎样做移动端抓包HTTPS协议
1.fiddler设置
- 打开fiddler--->tools--->Option
- HTTPS栏勾选前三项,并导出fiddler证书
- connection选项,勾选允许远程连接
- 保存设置,重启fiddler
2.手机设置
- 安装fiddler证书
- 手机WIFI设置代理,即

13.接口加密
  • 对称加密
    • 概念
      • 对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。
    • 常见的对称加密算法有DES、3DES、Blowfish、IDEA、RC4、RC5、RC6和AES
  • 非对称加密
    • 概念
      • 非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。
    • 目前最常用的非对称加密算法是RSA算法
    • 虽然非对称加密很安全,但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。
    • 非对称加密的典型应用是数字签名。
14.接口测试工具
  • postman
  • python+requests
    • 接口自动化测试框架与pom类似
  • jmeter
15.TCP三次握手/四次挥手
TCP协议是传输层的协议,特点是:面向连接、通信可靠

面向连接:在传送TCP报文之前,必须先建立TCP连接,数据传输完成后要进行链路释放

  • 三次握手
第一次握手:客户端通过向服务器发送一个SYN报文段(SYN=1, ACK =0)来请求创建连接,并且生成一个随机序列号seq=x。

第二次握手:服务器端收到用户SYN报文后,为该TCP连接分配一个缓存和变量,并生成一个允许建立连接的报文:SYN=1,ACK=1,同时设置ack确认码为x+1(即告诉客户端,希望下次收到的序列号从x+1开始),此时,该SYN/ACK序列号seq = y。

第三次握手:客户端收到服务器端的报文后,也要为该连接分配缓存和变量。同时发送一个ACK报文段(SYN=0,ACK=1)表示确认,此时,ack=y+1(表示下次希望收到的序列号从y+1开始),seq=x+1(表示此次数据序列号从x+1开始)。当服务器端收到这个报文以后,就完成了建立。

  • 四次挥手
第一步:通讯中任意一方(例如客户端)提出连接释放请求报文,FIN=1,此时进入“释放等待-1”状态。序列号seq=客户端发送的最后一个序列号+1(u),ack=v(确认收到服务器v-1以前的字节)

第二步:服务器收到“连接释放请求报文”以后,发送“连接释放请求确认报文”,ack=u+1, seq=v,ACK=1,允许该方向TCP连接的释放。至此,从客户端到服务器端这个方向的TCP连接就释放了,但是服务器端到客户端的连接还没释放,称为“半关闭状态”:客户端进入“FIN-WAIT-2”状态,服务器进入“CLOSER_WAIT”状态

第三步:服务器的高层应用已经没有数据需要发送时,服务器端发送“连接释放请求报文”给客户端。此时FIN=1,ACK=1,seq=w,ack=u+1,数据部分不携带数据。服务器端经过“LAST-ACk”状态进入“LISTEN”状态。

第四步:客户端向服务器端回复一个确认该方向连接释放的报文段,其中ACK=1,seq=u+1,ack=w+1。等待一个固定时间,真正关闭TCP连接。

16.TCP协议常见问题

1.为什么进行三次握手

​ 第三次握手的目的是为了防止已失效的客户机请求建立报文段突然又传送到了服务器,因而产生错误。

​ 例如:当客户端发送一次连接请求SYN报文段,因为网络原因,在一定时间内没有收到允许连接的报文。所以客户端会重传这个报文段。客户端发出了两个请求建立报文,服务器响应了第二个报文段,并且建立了连接,完成了数据传输,关闭连连。在这个时候,如果服务器收到了第一个请求建立报文,就会允许建立连接,等待传送资源。

​ 如果没有第三次握手,服务器会认为客户端在传输资源过程中而白白等待——浪费资源

​ 有了第三次握手以后,服务器在一定时间内,没有收到客户端的第三次确认ACK报文段,会自动释放资源。

2.为什么要等待一个固定时间?(为什么是四次释放,第四次释放丢失怎么办?)

当B在第三步发送了“连接释放请求”报文段后,A发送“确认连接释放请求”,并等待一个固定时间,有两个主要原因:

  1. 为了保证A最后的确认报文段能够到达B。即这个报文段可能会丢失,那么B会重传让A在一次确认。如果没有等待时间,A在发出了确认报文段后立即释放资源,那么B无法重传(连接已经释放,任何数据不能传了),则无法获得确认进入CLOSED状态。
  2. 防止已失效的连接请求报文段出现在连接中。经过这个固定时间,滞留在网络中的任何报文段都可以发送到目的地,不会滞留在网络中,这样的话,下一次的连接中就不会出现上一个连接遗留的报文段了。
17.TCP和UDP的区别和应用
TCPUDP
本质面向连接的、可靠的数据流传递三次握手、四次释放差错控制、拥塞控制、流量控制非面向连接的不可靠的
传输单位TCP报文段用户数据报
特点注重数据安全性数据传输快,不需要连接等待
对应的应用层协议FTP:文件传输协议:21 Telnet:远程登录端口,23 SMTP:邮件传输协议,25 POP3:与SMTP对应,用于接受邮件。110 HTTP协议:80文件、邮件传输DNS:域名解析服务,53 SNMP:简单网络管理协议,用于管理网络设备,161 TFTP:简单文件传输协议,69视频
18.怎样判断一个Bug是前端产生的还是服务端产生的?
当手工测试过程中,发现BUG时,需要定位Bug是前端还是服务端,方便开发针对性修复
1.页面显示问题,如,页面按钮,输入框大小出现明显拉伸变形等,输入前端的bug
2.同类型的页面显示的数据都一样,例如商品详情页不同的商品显示的名称,图片,价格都不变,这事说明前端并没有在该页面绑定数据,也属于前端的bug
3.对出现bug的位置进行抓包,通过对接口的请求参数和返回值进行验证,来确定bug的产生来源
	3.1如果请求参数传入错误或请求地址错误,为前端的bug
	3.2如果返回值错误,则为服务端bug
	3.3如果返回数据正确,但是前端显示作物,则为前端问题
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值