读后笔记 -- Python 全栈测试开发 Chapter8:接口测试
8.1 接口测试
1. 市场分布
- UI(web、app)自动化:10%
- 接口自动化:20%
- 单元测试:70% -- 测开
2. 接口类型:
1)结构划分:模块间(系统间)的接口称为内部接口;系统与第三方(如支付宝、微信、身份验证等。)接口称为外部接口。
较常用的第三方接口:聚合API(https://www.juhe.cn/apiservice),通联API(金融相关,https://apidoc.datayes.com/app/overview)
2)接口类型划分:
| 接口类型 | 协议 | 数据格式 | 测试工具 |
| http 接口 | HTTP 协议(应用层) | application/json,text/html,text/xml.... |
fiddler、postman、jmeter、lr、 框架(RF、python+request、java+httpclient) |
| webservices 接口 | SOAP 协议(应用层基于 http 协议封装) | 请求和响应的数据格式都是 XML 格式 | SoapUI、jmeter |
| socket 接口 |
socket 基于 tcp/udp 传输层抽象出的一层, 大多在 c/s 架构。建立连接后,可实现客户端 和服务器的双向数据通讯 |
socketTest、jmeter |
3. 实际工作中接口的管理:
- office 文档管理;
- 共享、会话等功能的管理工具:postman、eolinker、apizza、easy_api、jira、confluence等
4. 接口模拟发送请求:
fiddler:实现抓包、分析数据(篡改数据)、模拟请求发送、模拟弱网
fiddler \ Composer:可以模拟请求发送。
5. 测试方法:参数的组合、极值、是否必填
8.2 报文分析
1. 一个请求包含::请求行 + 请求头 + 请求体
1)请求行: 请求方法 + 请求地址 + 请求协议版本
请求方法: GET、POST、PUT、DELETE、TRACE、OPTIONS、HEAD 等
- GET:从服务器获取资源。1)数据直接暴露在地址栏,不适合私密数据传输;2)最多识别 1024 个字符,不适合大数据传输;
- POST:提交表单数据资源。
- PUT:数据存储在服务器
- DELETE:删除服务器资源
- TRACE:回显信息,主要用于测试或debug
- OPTIONS:获取服务器针对某些特定的资源所支持的 HTTP 请求方法
- HEAD:获取头信息
GET v.s. POST:
- (1)GET 参数在 URL 中(导致:a. 长度限制, b. 相对安全性);POST 参数在 body 中;
- (2)GET 请求只提交一次数据;POST 提交 2 次数据(先发送 head 数据 -> 服务器回应 100 -> 再发送 body 数据)
POST v.s. PUT:
- POST 对数据的增加;PUT:对数据的修改
2)请求头:键值对组成
- (1)Connection:keep-alive (常连接,client 可继续向服务器发送请求,且保持当前状态);close 当前会话关闭;
- (2)Content-Length:请求体文本长度,可用于检测是否丢包;
- (3)Cache-Control:缓存控制,含:age,max-age,min-age,单位秒,还可设置访问权限 private;与之对应的是 Expires 缓存到期时间
- (4)Content-Type:文本类型,值语法:type/subtype; params.
- 常用的 4 种类型:
- (4.1)text/html:最常用的一种,返回一个 html 页面
- (4.2)application/json:接口测试常用,返回 json 数据
- (4.3)application/x-www-form-urlencoded:针对需要提交表单所声明的文本类型。值通常是 键值对 形式,key1=value1&key2=value2....
- (4.4)application/form-data:通常应用在文件上传下载,数据格式以分割线形式表示。
- 注意:不同工具在 post 请求时,其参数都以 key=value 形式存在,但是默认值不同。jmeter 默认是 application/x-www-form-urlencoded,fiddler、postman 都表单请求 默认类型 不是
- 常用的文本类型: text/plain、text/html、text/xml、image/png、image/jpg、image/jpeg ...
- (5)Accept:当前客户端允许解析的文本数据类型。 */* 表示允许解析所有类型
3)请求体:请求体的值与请求头之间会空一行;如果是 GET 请求,则是空值
Fiddler 的详细使用参照: https://www.cnblogs.com/bruce-he/p/16906966.html
***** 下面是测试 不同测试工具的默认类型 *****

Postman 请求:

!!! Postman
1. Params 中放置的 参数键值对,最终会被放置在 url 中,形成 get 请求方式,即使请求类型选择为 post 2. Post 请求,其参数需要放置在 body 中


Fiddler:
1)直接默认发送请求:
- 在 Composer 请求栏:http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo
- body 中输入:mobileCode=18918457828&userID=
- 请求类型:post
=> 结果:报 500,


(2)Header 中添加 Content-Type 后,请求成功。
- 在 Composer 请求栏:http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo
- body 中输入:mobileCode=18918456666&userID=
- 请求类型:post
- Header 里添加:Content-Type: application/x-www-form-urlencoded

2. HTTP 相应:状态行 + 消息报文 + 相应正文
状态行:协议/版本 + 状态码 + 状态(状态码的文本描述)
状态码,主要包含:
- 1xx : 提示信息,服务器已接受当前请求;代表有 100
- 2xx :请求被接受;代表有 200
- 3xx : 重定向,要完成请求必须进行下一步操作;代表有 301, 302, 304
- 4xx : 客户端错误,请求有语法或无法实现;代表有 403, 404
- 5xx : 服务器错误;代表有 500
8.2.4 cookie、token 和 session
1. cookie:客户端向服务器发送请求,服务器响应后,客户端进行部分数据(即cookie、缓存)的存储在本地,
cookie 一般包含:名称、内容、域名、路径、为何发送、创建时间、到期时间。
cookie 主要有两种cookie:
- 会话 cookie:只作用于当前会话,一旦会话结束,则 cookie 失效或消失
- 持久(本地化) cookie:将 cookie 存储在本地硬盘,同样有对应的生命周期;

2. session:
服务器对客户端的标识。
存储在服务器端,
用户操作完对应的网站后会被销毁,此时 session 会将用户访问的相关信息临时存储在服务器上。
3. token
目前 web、APP 进行认证的最佳方式。完成 token 身份认证有如下特征:无状态、扩展性高、支持移动平台、跨程序应用、安全等。
基于 token 认证的过程:
- 用户通过用户名、密码发送请求
- 程序验证
- 程序返回一个签名的 token 给客户端
- 客户端存储 token,并且用于每次发送请求
- 服务端验证 token,并返回数据
具体实现授权的方式有: cookie、session、token 等
cookie v.s. session
- 1)cookie 客户端存储;session 服务器存储
- 2)cookie 只支持字符串存储(如有其他类型,会先转成字符串);session 可存储任意数据类型
- 3)cookie 可设置长时间保存(如网页几天内不用登录);session 一般客户端关闭或 session 超时就失效
- 4)cookie 保存的数据容量有限,最大不超过 4K;session 存储数据容量大于 cookie,但一般不会存储过多,否则影响服务器资源
token v.s. session
- 1)session 是有状态化的,会记录并存储会话信息;token 无状态化,不会存储会话信息
- 2)session 依赖 链路层 提高通信安全;token 通过身份认证方式,对请求进行签名从而防止监听或重放攻击等
- 3)session 的认证是通过 sessionID 完成存储,只是相对安全,只要存在 sessionID,就可以获得用户全部权限;token 不同机制认证方式不同,如果是 oAuth token 或类似机制,提供的是 认证和授权两种形式,认证对用户,授权对应用程序,此时 token 是唯一的,不能转移到其他用户或程序
如果系统的用户信息需要与第三方共享,甚至允许第三方调用其 API 接口,就需要考虑 token 方式
读后笔记 -- Python 全栈测试开发 Chapter8:接口测试的更多相关文章
- 【Python全栈-后端开发】嵩天老师-Django
嵩天老师-Python云端系统开发入门教程(Django) 视频地址:https://www.bilibili.com/video/av19801429 课前知识储备: 一.课程介绍: 分久必合.合久 ...
- 【Python全栈-后端开发】Django入门基础
Django基础知识 一. 什么是web框架? 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的 ...
- 【Python全栈-后端开发】Django进阶2-Form表单
Django进阶2-Form表单 Django的Form主要具有一下几大功能: 生成HTML标签(可以保留上次输入内容) 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页 ...
- 【Python全栈-后端开发】数据库进阶
数据库进阶 python关于mysql的API---pymysql模块 pymsql是Python中操作MySQL的模块,其使用方法和py2的MySQLdb几乎相同. 模块安装 pip install ...
- 【Python全栈-后端开发】Django进阶之Model操作复习
Django进阶之Model操作复习 一.字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - ...
- 【Python全栈-后端开发】Django进阶1-分页
Django[进阶篇-1 ]分页 分页 一.Django内置分页 from django.core.paginator import Paginator, EmptyPage, PageNotAnIn ...
- 【Python全栈-后端开发】Django入门基础-2
Django入门基础知识-2 一 .模版 一.模版的组成 HTML代码+逻辑控制代码 二.逻辑控制代码的组成 1 变量(使用双大括号来引用变量) {{var_name}} 2 标签(tag)的使用 ...
- 【Python全栈-后端开发】MySQL数据库-练习题
MySQL数据库-练习题 一.表关系 请创建如下表,并创建相关约束 二.操作表 1.自行创建测试数据 2.查询“生物”课程比“物理”课程成绩高的所有学生的学号: 3.查询平均成绩大于60分的同学的学号 ...
- Python 全栈开发 -- 监控篇
如果你已经玩转了 Python 编程语言语法,肯定想用这些知识,开发一款应用程序,它可以是在网上,可以炫耀或出售,那就需要全栈式开发 Python.具体如何创建,部署和运行生产 Python Web ...
- python 全栈开发之路 day1
python 全栈开发之路 day1 本节内容 计算机发展介绍 计算机硬件组成 计算机基本原理 计算机 计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可 ...
随机推荐
- MySQL 查询常用操作(0) —— 查询语句的执行顺序
MySQL中明确查询语句的执行顺序极其重要,了解执行顺序才不至于犯一些简单错误,例如having 后面是否可以使用 select 中重命名的列名等问题.另外SQL中实际使用最频繁的就是查询(Quein ...
- 转码服务serverless探索
背景 公司目前主要聚焦于视频这个领域,利用视频为媒体.文旅.会议等行业进行赋能. 既然聚焦于视频领域,那么视频转码则是绕不开的话题. 为了降低成本,以及保证产品的核心能力,公司自建了一套转码系统. 转 ...
- html(Angular) 调用本地安装exe程序
1.写注册表 新建 .reg文件 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\creoparametric] "URL P ...
- 代数余子式的由来/代数余子式为什么-1的系数是ⁱ⁺ʲ?/证明一个n阶行列式,如果其中第i行(或第j列)所有元素除aᵢⱼ外都为零,那么这行列式等于aᵢⱼ与它的代数余子式的乘积/证明行列式按行(列)展开法则:n(n>1)阶行列式等于它任意一行(列)的所有元素与它们对应的代数余子式的乘积的和。
代数余子式的由来/代数余子式为什么-1的系数是ⁱ⁺ʲ?/证明一个n阶行列式,如果其中第i行(或第j列)所有元素除aᵢⱼ外都为零,那么这行列式等于aᵢⱼ与它的代数余子式的乘积/证明行列式按行(列)展开法 ...
- Ubuntu 安装 Nginx
Ubuntu版本:20.04.1 LTS Nginx版本:1.22.0 下载地址: https://nginx.org/en/download.html 上传目录:/usr/local/src 安装目 ...
- k8s之pod的生命周期
pod生命周期 和一个个独立的应用容器一样,Pod 也被认为是相对临时性(而不是长期存在)的实体. Pod 会被创建.赋予一个唯一的 ID(UID),并被调度到节点,并在终止(根据重启策略)或删除之前 ...
- C++标准库string学习笔记
string概述 作为c++语言用作字符串处理的标准库,和Python字符串类型有较多相似之处.可以使用'='进行赋值,"=="来比较,"+"进行拼接. 构造函 ...
- 2021年爆出log4j漏洞修复
(1)用户可自查系统是否引用 Apache log4j-core 依赖,没有引用则不受漏洞影响. (2)排查系统中日志配置是否采用远程动态加载模式.(3)排查系统中是否正在使用JDBCAppender ...
- 02. C语言基础知识
一.注释 注释 就是对代码进行解释说明的文字,注释的内容不会参与编译和运行,仅仅是对代码的解释说明.在 C语言 中注释主要分为以下两类: 单行注释://,注释内容从 // 始到本行和结尾 多行注释 ...
- jmeterGUI&非GUI模式之如何减负性能调优
jmeter之如何减负-实现稳定超高并发测试(性能调优)在测试过程中,初学者使用工具不当,添加众多监控组件,非常想看到实时报告,跑不了一会,jmeter就卡死甚至内存耗尽,只得重启,之前的统计报告没了 ...