前言:
我们今天进入接口测试的学习!
今天学习的内容是偏向理论 接口理论
了解接口测试(1)
一、什么是接口测试?
接口统称api,即程序与程序之间的对接、交接、交互。是测试系统组件间接口的一种测试。
主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。
主要是为了检查不同组件(模块)之间数据的传递是否正确,
系统与第三方系统数据传递是否正确,例如微信、支付宝、银行
功能测试一般是在ui界面形成以后测试
中间:动态数据就是通过api 到数据库中获取资源(静态资源和动态资源)
最底层:就是代码
静态资源:图片、css ,html 从服务器端获取
动态资源:一般要查询数据库
前端页面中调用接口从服务器或者数据库中调用数据
二、为什么要做接口测试?(接口测试在什么时候测?)
1. 当界面功能未能显示出来时,可通过接口测试,测试平时测不出来的功能,也可节省时间
2. 数据主要通过接口进行传输,若系统间未能正常调用,对业务的处理影响巨大
3、测试一些界面功能测不到的场景
三、如何做接口测试?
项目前后台调用主要是基于http协议的接口,测试主要通过工具或代码模拟http请求发送和接收
来实现手工接口测试和自动化测试。
四、公司具体情况?
在企业中,前端与后端是独立开发的,最终的项目会进行前后端的接口联调,来确保
后端的数据能正常的在前端页面展示,因此需要确保接口功能能正常的传输数据
1. 有些公司页面未完成时(项目周期长,接口多),需要提前去做测试接口
2. 有些公司需页面做完后,接口和功能一起做;
3. 接口一般先由开发进行自测,然后再交由测试进行验证;
注意:开发测试接口以接口通的问题 和测试测试接口 校验数据 正确性 不一样;
接口联调:
前后端开发,我们前端开发好了,后端的逻辑代码开发好了,就合并代码,部署到环境中,在前端登录,查看是否有数据返回,
接口联调一般在冒烟测试的提测之前,
接口联调一般不用我们测试,开发做的
联调测试性质:集成测试,又称组装测试、联合测试、联调测试、子系统测试、部件测试。不同的称呼而已,侧重点在于模块间接口的正确性、各模块间的数据流和控制流是否按照设计实现其功能、以及集成后整体功能的正确性。所以联调测试涉及面广,要掌握的知识面广。
网络基础管理
一、网络概念
IT领域中,网络是信息传输、交换、接收、共享的虚拟平台,通过它把各个点、线、
面的信息联系在一起,从而实现资源共享。
二、网络的四要素
1. 有独立功能的计算机
2. 有通讯设备和通讯线路
3. 有网络的软件支持
4. 有实现资源共享
三、网络发展
第一代: 远程终端连接(20世纪6060年代初)
例如: xshell连接Linux服务器
第二代: 局域网 (20世纪60年代中期)
例如: 校园网 同一一个网络,我们教室连接网络
第三代: 广域网
例如: 跨城市,跨洲
第四代: 信息高速阶段
例如: 可视电话,网上点播平台,千兆,以太网
四、服务模式(我们了解下)
ISP(internet service provider): 互联网业务提供商
如: 电信、移动、联通
ICP(internet content provider): 互联网内容提供商
如: 腾讯、新浪、抖音
五、网络分类
1. 按覆盖范围分: 局域网、城域网、广域网
2. 按拓扑结构分: 总线型、环型、星型、网状型
3. 按传输介质分: 有线、无线、光纤
六、TCP/IP
网络协议(TCP/IP) (network protocol)
1)什么是tcp/ip协议?
TCP/IP协议是一个协议集合。所以统称为TCP/IP
按照层次分为五层: 应用层、传输层、网络层、数据链路层、物理层
分层的目的: 出现错误只需要维护对应的层即可
七、OSI
OSI参考模型(OSI/RM),全程是开放系统互联参考模型,
它是由国际标准化组织提出的一个网络系统互联参考模型。
八、OIS的七层模型
应用层: 文件传输、电子邮件发送、文件服务、虚拟终端
表示层: 数据格式化、代码转换、数据加密
会话层: 解除和建立与别的接点的联系
传输层: 提供端对端的接口 (QQ保持在线功能用TCP,QQ聊天信息通信用UDP)
网络层: 为数据包选择路由
数据链路层: 传输有地址的帧以及错误检测功能
物理层: 以二进制数据形式在物理媒体上传输数据
TCP/IP 五层协议用的最多
osi参考协议目前也很少人用
协议层级关系密切相关,一切建立在另一层的基础上形成。
比如:qq登录在网络上能持续登录,在有网络的情况下,就是建立了网络协议。
常见的协议及端口号
一、HTTP: 超文本传输协议 80
1. http协议,是用于万维网(www:World Wide Web)服务器传输超文本到本地浏览器的传输协议
2. http协议是基于TCP/IP通信 + 协议来传递数据(HTML文件、图片文件、查询的结果)每层都为上一层提供访问接口和服务
3. http协议是一个属于应用层的面向对象的协议
4. http协议工作于客户端-服务端架构上。
浏览器作为http客户端通过URL向http服务器(web服务器)发送所有请求
web服务器根据接收到的请求后,向客户端发送响应信息
5. 客户端访问网址时,DNS域名会解析得到的服务器的IP地址,服务器在80端口监听
客户端请求,端口通过TCP/IP协议建立连接。
http是输入TCP/IP模型中的应用层协议,所以通信的过程是对数据的入栈和出栈
二、HTTPS: 超文本安全传输协议 443
1. http与https的区别?
http: 默认80端口,对数据不加密传输
https: 默认443端口,对数据加密传输,需要用SSL/TLS对数据进行加密和解密
2. https = http + SSL/TLS
对称加密: 通过私钥进行加密
常见的算法有: DES,3DES,TDEA,blowfish,RC5,IDEA
加密过程: 明文 + 对称加密算法 + 私钥 = 密文
解密过程: 密文 + 对称解密算法 + 私钥 = 明文
非对称加密: 通过公钥、私钥进行加密
常见的算法有: RSA,D-H,ECC,Rabin
被公钥加密过的密文只能被私钥解密
加密过程: 明文 + 非对称加密算法 + 公钥 = 密文
解密过程: 密文 + 非对称解密算法 + 私钥 = 明文
被私钥加密过的密文只能被公钥解密
加密过程: 明文 + 非对称加密算法 + 私钥 = 密文
解密过程: 密文 + 非对称解密算法 + 公钥 = 明文
拓展:
HTTP 与 HTTPS 区别
(1)HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好。
(2)使用 HTTPS 协议需要到 CA(Certificate Authority,数字证书认证机构) 申请证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。
(3)HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
(4)http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
(5)HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源
三、TCP: 传输控制协议
1. 是一种面向连接的、可靠的、基于字节流的传输层通信协议
2. 电脑通过增删改查四种方式与服务器进行交互
3. TCP让电脑与服务器建立连接,采用三次握手进行连接,四次挥手断开连接
- 第一次握手:客户端尝试连接服务器,向服务器发送 syn 包(同步序列编号Synchronize Sequence Numbers),syn=j,客户端进入 SYN_SEND 状态等待服务器确认
- 第二次握手:服务器接收客户端syn包并确认(ack=j+1),同时向客户端发送一个 SYN包(syn=k),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态
- 第三次握手:第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手
讲解过程:客户端和服务端建立连接:
客户端说你好,我想你建立连接; 发了一个包
服务端说你好,我也想和你建立连接; 可以,我想和你建立,发了一个包
客户端发送,可以 建立连接,
一旦建立了就不会关闭,
详解:
fin 主动方发送关闭请求, 被动关闭方ok
被动方也发送一主动关闭请求,主动关闭方请求
应用到我们qq上:主要不主动退出,就不会退出
四、其他协议
Tenlnet: 远程终端协议 23
FTP: 文件传输协议 21
SMPT: 简单邮件传输协议 25
DNS: 域名解析协议 53
POP3: 邮件协议版本3 110
UDP: 用户数据报协议
ARP: 地址解析解析
RARP: 反地址解析地址
ICMP: 控制信息协议
OSI: 网络协议 (IOS: 苹果操作系统 、ISO: 镜像文件格式)
接口测试(2)
一、接口测试工具
postman (谷歌浏览器插件,最常见的接口测试工具) 现在用的少
jmeter (最流行的接口和性能测试工具)
soapUI (接口和性能测试工具)
fiddler (抓包工具,可进行接口测试)
wireshark (抓包工具,可抓取TCP、UDP、TLS协议数据)
Charles (mac系统的抓包工具)
二、接口类型
http协议接口 (http、https 、RESTful风格的接口)
请求报文都是key-value形式的,返回报文一般都是json串和文本格式等等。
注意:RESTful API也是基于HTTP协议的,只不过RESTful它并不是一种规范,它是一种设计准则,用不同的HTTP动词(GET、POST、DELETE、PUT等)来表达不同的请求。
webservice (soap webservice、restful webservice)
注解:Web Service其实是一种概念,我们可以将以WEB形式提供的服务称为Web Service,所以像RESTful、XML-RPC、SOAP等都可以当成是Web Service的一种实现方式。
不过Web Service接口和HTTP接口存在一些细小区别就是,Web Service接口支持更复杂的对象,而HTTP接口更多的就是传输字符串或者JSON文本。
rmi协议接口:Webservice是系统对外的接口
RMI是针对于java语言的, RMI 允许您使用Java编写分布式对象
rpc协议接口
RPC技术是指远程过程调用,它本质上是一种Client/Server模式,可以像调用本地方法一样去调用远程服务器上的方法,它支持多种协议(如:HTTP、TCP、UDP、自定协议)和多种数据传输方式(如:Json、XML、Binary、Protobuf等)。
后面用微服务用的多
三、接口测试流程
1. 接口测试需求分析
2. 接口测试需求评审
3. 编写接口测试计划(有些接口要压力测试、性能测试)
4. 编写接口测试用例、用例评审(一般不需要写用例)
5. 用例在接口测试工具中执行
6. 发现Bug提交到用例管理工具中
7. 小结报告
8. 总结报告(一般放功能报告里,若需要做接口性能测试,需单独放出来)
备注:一般接口测试有一个接口文档,是开发写的
如果没有接口文档,就自己去抓包
在这里我们先安装下postman和fidder
------------------------------------------------------------------------------------------------------------------到这里
一、接口测试抓包工具之fiddler
1、fiddler的简介:
Fiddler是一款免费且功能强大的数据包抓取软件。
2、fiddler抓包工具的原理:
Fiddler是位于客户端和服务器端之间的HTTP代理, 它可以设置断点、修改请求的数据和服务器返回的数据,Fiddler启动后会自动将代理服务器设置成本机,默认端口为888
四、接口测试的基本方法
1. 接口的请求方法(8种方式)
get(查) 请求指定的页面信息,并返回实体主体 (通常用于查询)
post(增) 向指定资源提交数据进行处理的请求,数据包含在请求体中 (通常用于增删改)
put(修改) 从客户端向服务器传送的数据取代指定的文档的内容
delete(删除) 请求服务器删除指定的页面
(以上四个用的多)
connect http/1.1协议预留给能够将连接改为管道方式的代理服务器 (connect 读音:肯内可迟,意思:连接)
trace 回显服务器收到的请求,主要用于传送或者诊断 (trace 读音“”:去死)
opions 返回服务器针对特定资源所支持的HTML请求方法 或web服务器发送*测试服务器功能(允许客户端查看服务器性能)(opions 读音:o破悬死 , 意思:及因)
HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
(head:读音:黑德 ,)
- head 类似get,没有返回内容,用于获取报头
2. get请求方法
请求数据一般显示在地址栏
安全性差,请求的入参信息全部暴露在url地址栏
请求数据量比较少
处理速度快、性能高
3. post请求方法
请求数据会被封装在表单中(requests body当中),然后提交
安全性比较高
请求数据量比较大
处理速度没有get快,性能没有get好
二.get 和 post区别:
1.get请求无消息体,只能携带少量数据,且不安全
post请求有消息体,可以携带大量数据,且安全
2.携带数据的方式:
get请求将数据放在url地址中
post请求将数据放在消息体body中
3.GET方式提交的数据最多只能有1024字节,而POST则没有此限制。
五、http请求内容
请求头 和 请求体 : 客户端发给服务器的数据
响应头 和 响应体 : 服务器发给客户端的数据
请求头:
请求方式 + url + 超文本传输协议/版本1.1
POST url HTTP/1.1
URI 统一资源定位符
URL 统一资源标识符
URN 统一资源名称
域名 + 请求的服务器地址
Host: 192.168.0.151:8080
客户端与服务器的连接类型 + 持久连接
Connection: keep-alive
请求长度
Content-Length: 33
浏览器支持的 mime 消息内容类型
Accept: application/json, text/javascript, */*; q=0.01
标识跨域资源请求
Origin: url
标识Ajax请求,大部分JS框架发送请求都会设置成这样
X-Requested-With: XMLHttpRequest
用户代理的字符串值,浏览器的身份标识字符串
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36 #Mozilla(读音:摸子那,意思:浏览器)
设置请求体的信息类型(get,post)和编码格式(UTF-8)
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
设置前一个页面的地址,并且前一个页面中的连接指向当前请求
Referer: url
设置接收的编码格式
Accept-Encoding: gzip, deflate
设置接收的语言 (en-US 英文,zh-CN 中文) 我能接收的语言
Accept-Language: zh-CN,zh;q=0.9
设置服务器使用 set-cookie 发送 http
Cookie: JSESSIONID=EF23BE03473F0141E28D737C3CE96EE2; hudson_auto_refresh=false
请求体:
userAccount = admin & loginPwd = 123456
响应头:
超文本传输协议/版本1.1 + 请求解释码
HTTP/1.1 200 OK
服务器名称
Server: Apache-Coyote/1.1
设置响应头的信息类型
Content-Type: application/json;charset=UTF-8
设置传输实体的编码格式
Transfer-Encoding: chunked
设置消息发送的日期时间
Date: Thu, 05 Sep 2019 04:04:59 GMT
响应体:
31
{"code":"200","msg":"登录成功!","model":{}}
0
六、常见的http状态码解释
200 请求已成功,数据可响应
201 请求已经被实现,且有新资源在创建
302 请求资源被临时转移到新的URL
400 语法错误,服务器无法理解 (数据重复)
403 服务器已经理解请求,但拒绝执行
404 请求失败,未在服务器上发现所需资源
500 服务器遭遇异常,无法处理
501 服务器不支持当前操作的功能
505 服务器不支持或拒绝请求该HTTP版本
七、URI和URL的区别?
URI
1. 统一资源标识符
2. 主要记录资源的主机名,资源命名机制
URL
1. 统一资源定位符
2. 主要记录使用协议,访问资源的具体地址
一、cookie与session的区别?
1. cookie数据存放在客户的浏览器上,session数据放在服务器上。
2. cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗。
3. session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。
4. 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5. 个人建议: 将登陆信息等重要信息存放为SESSION,其他信息如果需要保留,可以放在COOKIE中。
6. cookie是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能。
cookie
cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。
由于cookie是存在客户端上的,所以浏览器加入了一些限制确保cookie不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的cookie数量是有限的。
1. session和sessionid: 服务器会保存一份,可能保存到缓存/数据库/文件。
2. session就是会话,服务器会给每个客户端一个身份标识,作为识别。浏览器一般是用cookie。
3. 服务器使用session把用户的信息临时保存在了服务器上,用户离开网站后session会被销毁。
这种用户信息存储方式相对cookie更安全,但如果web服务器做了负载均衡,session请求另一台服务器时会丢失。
1. Token的引入: 当客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。
2. Token的定义: Token是客户端首次登录时,服务端生成的一串字符串,再次登录只需要用Token即可,无需用户名和密码。
最简单的token组成: uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由token的前几位 +沿以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接token请求服务器)
3. 使用Token的目的: Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。
4. token的原理:
第一步: 第一次登入成功之后,服务器会产生一个token值,这个值会被服务器保存,同时将token值发送给客户端。
第二步: 客户端拿到token值后要进行保存
第三步: 当你客户端再次发起网络请求时(该请求是一些登录之后的请求),再将请求中token值会发送给服务器。
第四步: 服务器接受到客户端的请求后,会进行token值的对比。
若一致,登入成功,处于登入状态
若不一致,信息已失效,需重新登入
若不在服务中,处于未登入状态
同步接口:
发起一个请求必须要等到响应结果才能发起下一个接口请求(绑定银行卡,支付接口)
异步接口:
发起一个请求不需要等到响应结果就能发起下一个接口请求(借款时)
------------------------------------------------------------------------------------------------------不讲;
使用requests库进行接口测试
组建接口的三种方式:
1. s = requests.get()
2. s = requests.requests()
3. s = requests.session(); s.get()
向对应网址传入信息 (get、post)
s = requests.get(url = '测试网址', params = {传入的键值对信息})
s = requests.post(url = '测试网址', data = {传入的键值对信息})
s.text 可打印出响应体
返回的变量s为json格式,将json转换成dict格式的两种方法 (import json)
1. json.loads(s.text)
2. s.json()
正则表达式筛选信息
'<string>(.+?)</string>' 满足整个格式,匹配括号中的内容