- 网络协议-http/https1. 复习前后台数据交换过程
前后端分离
后端:写接口(java php .net)-- 响应数据(数据交互格式):JSON XML
前端:app/小程序/pc前台(web页面)
- http协议1. 概念
Http是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程
过程可借助谷歌F12调试模式进行查看
- 请求过程
- 一个请求行
请求方式
POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT、CONNECT
get方式为最常见的请求方式,一般用来获取服务器上的数据,请求参数放到地址栏上,不安全,并且传递数据量有限,根据浏览器的不同大小限制在1-8kb
Post方式一般用于向服务器发送数据,请求的参数放到请求实体内容里面(form data),相对比较安全,修改了服务器支持大数据量传递的情况下,传递数据量的大小没有限制(可以用于大文件的上传)
请求路径
协议版本
- 若干请求头
- 请求实体内容
只有post方式的时候才有内容
- 响应过程
- 一个响应行
协议版本
响应状态码
200 服务器做出响应
302/307 请求重定向
304 使用缓存
404 资源找不到(路径错误)
500 服务器内部错误
- 若干响应头
- 响应的实体内容
响应的实体内容可以是任意类型,例如html json xml text png jpeg等
http1.0:当前浏览器客户端与服务器端建立连接之后,只能发送一次请求,获取一个web资源,一次请求之后连接关闭。
http1.1:当前浏览器客户端与服务器端建立连接之后,可以在一次连接中发送多次请求,获取多个web资源。(基本都使用1.1)
- https协议1. 为什么出现https协议
- https概念
HTTPS是安全套接字层超文本传输协议,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书(certificate)来验证服务器的身份,并为浏览器和服务器之间的通信加密
正在上传…重新上传取消正在上传…重新上传取消正在上传…重新上传取消
- https原理(了解)
https
- https原理(了解)
(1)客户使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。
(2)Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
(3)客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
(4)客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
(5)Web服务器利用自己的私钥解密出会话密钥。
(6)Web服务器利用会话密钥加密与客户端之间的通信。
- http与https区别
1、https协议需要到CA(证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。可以有效进行身份认证及加密处理,防止流量劫持,网页篡改,网络监听,网络漏洞。
- 接口测试1. 接口概念
- 程序内部的接口
方法(函数)与方法之间,模块与模块之间的交互
比如bbs系统,有登录模块、发帖模块等等,那你要发帖就必须先登录,要发帖就得登录,那么这两个模块就得有交互,它就会抛出一个接口,供内部系统进行调用
- 系统对外的接口
比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你提供一个他们写好的方法来获取数据,你引用他提供的接口就能使用他写好的方法,从而达到数据共享的目的,比如说咱们用的app、网址这些它在进行数据处理的时候都是通过接口来进行调用的
简单来说就是通过请求url路径以及传递参数可以获取服务器数据,这个路径系统对外接口
- 接口类型
- webService接口
遵循soap协议通过http协议传输数据,请求报文和返回报文都是xml格式的
- soap协议 = http协议+xml数据格式
使用工具:SoapUI、jmeter、loadrunner,postman
- http api接口
走http协议,通过路径来区分调用的方法,请求报文都是key(键)-value(值)形式的,返回报文一般都是json串,有get和post等请求方式
使用工具:postman、RESTClient、jmeter、loadrunner
- 什么是接口测试
- 接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系(例如购买商品需要先登录)等
所谓接口测试就是通过测试不同情况下的入参与之相应的出参信息来判断接口是否符合或满足相应的功能性、安全性要求
- 为什么做接口测试
- 通过接口测试能够知道后台是否对提交的数据进行了校验
①、可以发现很多在页面上操作发现不了的bug,例如页面展示数据是否正确
②、检查系统的异常处理能力
③、检查系统的安全性(请求及响应的关键敏感数据是否进行了加密)、稳定性(通过接口可以测试服务器的性能)
④、接口测时完成之后,后端数据不用改变,前台展示数据的样式可以随便变化(web页面 app 小程序...)
- 如何做接口测试
准备阶段(80%)
拿到开发的接口文档,并理解每个接口的参数及含义
了解被测试系统的业务流程
编写接口测试用例
执行阶段(10%)
测试用例/测试场景执行
测试数据/系统数据收集
分析阶段(10%)
数据汇总/日志分析
测试报告
流程:接口文档--->编写接口测试用例--->放到接口测试工具中执行
- 接口文档
编写接口文档示例
接口文档中内容
主机路径 公共参数 接口名称 接口路径 请求方式 请求头参数 请求参数 请求示例 返回结果示例
编写接口测试用例
接口测试用例与普通的功能测试用例有什么不同?
id 所属模块 接口名称 接口地址 请求方式 header 是否依赖 请求参数 预期结果 实际结果
用例编号 所属模块 用例名称 操作步骤 输入数据 预期结果 实际结果
- 接口用例设计思路1. 通过性验证:
要保证这个接口功能是正常的,就是正常的通过性测试,按照接口文档上的ip地址,路径,参数,请求头,正常传入,判断是否可以返回正确的结果。
- 参数问题
参数组合判断:
当接口中存在多个参数时,需要对参数进行组合填写,判断后台响应是否正确。
比如:有一个操作商品的接口,有个字段type,
type传1的时候代表修改商品,商品id、商品名称、价格有一个是必传的,
type传2的时候是删除商品,商品id是必传的,这样就要测参数组合了,
type传1的时候,只传商品名称能不能修改成功,id、名称、价格都传的时候能不能修改成功。
Type传2的时候,除了商品id,也传名称,价格,看后台是否不受影响,是否能正确删除
比如:有一个分页获取商品的接口,有两个字段,size(每页条目数)和page(页码值)
在size为10,页码为1的时候,响应数据是展示第1页,数据是1-10条
在size为20,页码为1的时候,响应数据是展示第1页,数据是1-20条
在size为10, 页码为2的时候,响应数据是展示第2页,数据是11-20条
参数异常验证
所谓异常验证,就是不按照你接口文档上的要求输入参数,来验证接口对异常情况的校验。常校验的问题是:必传非必传、参数类型、入参长度,看后台是否提示错误
比如
必填的参数不填,
输入整数类型的,传入字符串类型,
长度是10的,传11,
页码超出最大页码,或者0,-1
- 接口安全:
绕过验证****(业务安全)
判断后台是否对非法操作,非法参数,或者是参数的实际值做验证。
比如说购买了一个商品,它的价格是300元,那我在提交订单时候,我把这个商品的价格改成3元,后端有没有做验证,更狠点,我把钱改成-3,是不是我的余额还要增加。
绕过身份授权
判断后台有没有判断用户是否登录,是否是合法用户,当前用户是否拥有操作数据权限。
比如说修改商品信息接口,那必须得是卖家才能修改,传一个普通用户,判断能不能修改成功,传一个其他的卖家能不能修改成功
参数是否加密
在进行关键信息,敏感参数提交的时候,参数需要做加密处理
比如登陆的接口,用户名和密码是不是加密,如果不加密的话,别人拦截到请求,就能获取到个人敏感信息了,加密规则是否容易破解。
密码安全规则,密码的复杂程度校验
在进行关键信息,敏感参数提交的时候,参数需要做加密处理
加密方式,也需要做测试,判断当前加密方式,是否合理,是否不容易被破解掉.
- 总结:接口测试测什么?
接口的通过性
接口的参数组合
接口的异常性
接口安全性
- Postman接口测试基本操作
参考接口文档,根据接口文档,进行操作
- GET、POST请求
get请求方式
post请求方式
- 请求与响应内容解析
- 请求:
请求方式 请求路径 get方式的请求参数(params)
authorization 认证接口,确认你有权限访问我的接口(认证方式有很多,例如输入用户名密码)
headers 请求头
body post请求方式的实体内容
pre-request scripts 在请求发送之前执行的脚本
tests 添加断言的位置(预期结果)
- 响应
body 响应实体内容
cookies 服务器给返回的缓存数据
headers 响应头
test results 断言结果
status 响应状态码
time 本次接口响应时间毫秒值
size 响应内容(body headers)的大小
- post方式的四种请求报文格式(请求参数格式)
x-www-form-urlencoded 只是键值对文本格式的数据,自动会添加Content-Type请求头,来指定请求参数的类型
form-data 可以上传键值对文本数据及文件数据,,,常用在图文混传,例如评论
raw 传递任意格式的文本数据 text,json,xml,js,html,可以指定数据格式,也可以手动添加content-type请求头
binary 只能上传二进制文件
问题:真正测试的时候传递哪种报文格式?
- 服务器要哪种就需要传递哪一种
- postman参数化1. 全局变量 环境变量
- 使用变量
全局变量
- 主机路径 公共参数
局部/环境变量
- 登录不同的用户
- 创建项目,批量执行测试用例1. 创建项目
- 新建用例
- 添加断言
- 批量执行
- Postman接口测试高级操作
参考金融接口文档、宝淘接口文档
- 接口之间依赖、接口之间数据的传递1. 1. 第一个接口tests中获取数据
- 第二个接口中使用数据
- RESTFul风格的接口
http://127.0.0.1:8089/wemall/product/{goodsid}
- restful风格的接口,更加简洁,可以保证接口的安全性
使用的时候,根据不同的请求方式进行增删改查---->根据id(id会自动添加)
get 查询
post 增加
put 修改
delete 删除
- postman测试webservice接口
webservice大部分公司不再使用,xml数据是重量级数据,解析和组装比较费劲,并且现存的webservice接口并不稳定
*接口 https://www.imooc.com/article/68591 注意:不是所有的都能用,个别可以使用
postman中的操作--->text/xml
- 模拟服务器mock server
新闻头条接口:
地址: http://v.juhe.cn/toutiao/index
请求方式:get/post
请求参数:
key : 597b4f9dcb50e051fd725a9ec54d6653
type: top(头条) shehui (社会) junshi(军事)
前提注册并登录上postman
1.在创建好的项目中请求真实的服务器 拿到返回的json数据
2.创建并保存example
- 把模拟的数据传送到postman服务器上,获取一个模拟主机路径
- 如何模拟500的状态码?
- 单个接口调试(console)
ctrl+alt+c
- 接口项目实战1. swagger接口
Swagger 是一个规范且完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。
Swagger 的目标是对 REST API 定义一个标准且和语言无关的接口,可以让人和计算机拥有无须访问源码、文档或网络流量监测就可以发现和理解服务的能力。当通过 Swagger 进行正确定义,用户可以理解远程服务并使用最少实现逻辑与远程服务进行交互。与为底层编程所实现的接口类似,Swagger 消除了调用服务时可能会有的猜测。
Swagger 的优势
支持 API 自动生成同步的在线文档:使用 Swagger 后可以直接通过代码生成文档,不再需要自己手动编写接口文档了,对程序员来说非常方便,可以节约写文档的时间去学习新技术。
提供 Web 页面在线测试 API:光有文档还不够,Swagger 生成的文档还支持在线测试。参数和格式都定好了,直接在界面上输入参数对应的值即可在线测试接口。
- 在swagger接口工具上直接进行测试
- 接口测试过程中常见的bug:
在做接口测试的时候,本来我们的请求报文格式是x-www-form-urlencoded,但是我在测试的时候尝试了其他报文格式,发现服务器报500状态码,分析了一下原因是NullPointerException(空指针异常),发现了这个bug,不应该报错而是提示传递需要的参数信息
添加购物车的时候,商品的id传递正常存在商品可以添加成功,但是添加不存在的商品id报错空指针异常
通过前端添加商品到购物车的时候,商品数量在库存充足情况下,最多添加200件商品,如果库存不足200,最多添加件数是库存数,但是通过接口直接添加没有任何限制,都能添加成功,这说明前台对商品数量有校验,但是后台没有进行校验
根据二级分类/搜索关键词查看商品信息的时候,有二级分类id和page页码和pageSize(每页展示条数)等参数,按道理不传page及pageSize的时候是有默认值的,但是我们的接口在最初的时候需要必须传递,否则报错
- 会话跟踪技术
在一个会话的多个请求中共享数据,这就是会话跟踪技术。例如在一个会话中的请求如下:
l请求银行主页;
l请求登录(请求参数是用户名和密码);
l请求转账(请求参数与转账相关的数据);
l请求信誉卡还款(请求参数与还款相关的数据)。
在这上会话中当前用户信息必须在这个会话中共享的,因为登录的是张三,
那么在转账和还款时一定是相对张三的转账和还款!这就说明我们必须在一个会话过程中有共享数据的能力。
客户端技术 Cookie
服务端技术 Session
- Cookie
Cookie概念
Cookie翻译成中文是小甜点,小饼干的意思。在HTTP中它表示服务器送给客户端浏览器的小甜点。其实Cookie就是一个键和一个值构成的,随着服务器端的响应发送给客户端浏览器。然后客户端浏览器会把Cookie保存起来,当下一次再访问服务器时把Cookie再发送给服务器。
Cookie是由服务器创建,然后通过响应发送给客户端的一个键值对。客户端会保存Cookie,并会标注出Cookie的来源(哪个服务器的Cookie)。当客户端向服务器发出请求时会把所有这个服务器Cookie包含在请求中发送给服务器,这样服务器就可以识别客户端了!
Cookie应用场景
记录上次访问时间
记录用户名
显示浏览记录
Cookie原理分析
当浏览器进行网络请求时,如果携带当前浏览器的cookie
服务器打给浏览器
Set-cookie:username=zhangsan;Exipres=Moday,具体时间
浏览器打给服务器
Cookie:username=zhangsan;
存储到浏览器的文本中
username=zhangsan 169.254.xxx.xxx/day09_cookie/ name value url
Cookie 使用细节
一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)。
一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点提供的Cookie。
void setPath(java.lang.String uri) :设置cookie的有效访问路径。有效路径指的是cookie的有效路径保存在哪里,那么浏览器在有效路径下访问服务器时就会带着cookie信息,否则不带cookie信息。
void setMaxAge(int expiry) : 设置cookie的有效时间。
正整数:表示cookie数据保存浏览器的缓存目录(硬盘中),数值表示保存的时间。
负整数:表示cookie数据保存浏览器的内存中。浏览器关闭cookie就丢失了!!
零:表示删除同名的cookie数据
Cookie数据类型只能保存非中文字符串类型的。可以保存多个cookie,但是浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。
- Session介绍
在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。
Session和Cookie的主要区别在于:
Cookie是把数据保存在浏览器端的内存中
Session把数据保存在服务器端的内存中
Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象。
- token概念
token 用来标识用户的唯一符号,又叫做令牌
token是有时效的,一段时间之后用户需要重新验证
- cookie session token区别
1)cookie数据存放在客户的浏览器上,session数据放在服务器上;
2)cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session;
3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie;
4)单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie,最多300个站点。
所以个人建议:
将登陆信息等重要信息存放为session;
其他信息如果需要保留,可以放在cookie中
- Token就是令牌,比如你授权(登录)一个程序时,他就是个依据,判断你是否已经授权该软件,Token的状态是存储在客户端
- switchhosts工具的使用
switch选择hosts主机路径
环境
- 开发环境
47.96.86.16 www.develop.baotao.com
- 测试环境
47.96.86.17 www.test.baotao.com
- 预发布/灰度环境
65.169.135.129 www.hui.baotao.com
- 线上/发布/生产环境
47.65.133.123 www.baotao.com
假设每隔环境的域名一样 但是ip地址不一样,如何实现?
- 切换电脑hosts文件来实现....C:\Windows\System32\drivers\etc
----->到公司拿到以上类似的文件,需要想到使用switchHosts工具配置一样,用什么环境就切换到什么环境
版权归原作者 彭雨晏 所有, 如有侵权,请联系我们删除。