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:接口测试的更多相关文章

  1. 【Python全栈-后端开发】嵩天老师-Django

    嵩天老师-Python云端系统开发入门教程(Django) 视频地址:https://www.bilibili.com/video/av19801429 课前知识储备: 一.课程介绍: 分久必合.合久 ...

  2. 【Python全栈-后端开发】Django入门基础

    Django基础知识 一. 什么是web框架? 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的 ...

  3. 【Python全栈-后端开发】Django进阶2-Form表单

    Django进阶2-Form表单 Django的Form主要具有一下几大功能: 生成HTML标签(可以保留上次输入内容) 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页 ...

  4. 【Python全栈-后端开发】数据库进阶

    数据库进阶 python关于mysql的API---pymysql模块 pymsql是Python中操作MySQL的模块,其使用方法和py2的MySQLdb几乎相同. 模块安装 pip install ...

  5. 【Python全栈-后端开发】Django进阶之Model操作复习

    Django进阶之Model操作复习 一.字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - ...

  6. 【Python全栈-后端开发】Django进阶1-分页

    Django[进阶篇-1 ]分页 分页 一.Django内置分页 from django.core.paginator import Paginator, EmptyPage, PageNotAnIn ...

  7. 【Python全栈-后端开发】Django入门基础-2

    Django入门基础知识-2 一 .模版 一.模版的组成 HTML代码+逻辑控制代码 二.逻辑控制代码的组成 1  变量(使用双大括号来引用变量) {{var_name}} 2  标签(tag)的使用 ...

  8. 【Python全栈-后端开发】MySQL数据库-练习题

    MySQL数据库-练习题 一.表关系 请创建如下表,并创建相关约束 二.操作表 1.自行创建测试数据 2.查询“生物”课程比“物理”课程成绩高的所有学生的学号: 3.查询平均成绩大于60分的同学的学号 ...

  9. Python 全栈开发 -- 监控篇

    如果你已经玩转了 Python 编程语言语法,肯定想用这些知识,开发一款应用程序,它可以是在网上,可以炫耀或出售,那就需要全栈式开发 Python.具体如何创建,部署和运行生产 Python Web ...

  10. python 全栈开发之路 day1

    python 全栈开发之路 day1   本节内容 计算机发展介绍 计算机硬件组成 计算机基本原理 计算机 计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可 ...

随机推荐

  1. MySQL 查询常用操作(0) —— 查询语句的执行顺序

    MySQL中明确查询语句的执行顺序极其重要,了解执行顺序才不至于犯一些简单错误,例如having 后面是否可以使用 select 中重命名的列名等问题.另外SQL中实际使用最频繁的就是查询(Quein ...

  2. 转码服务serverless探索

    背景 公司目前主要聚焦于视频这个领域,利用视频为媒体.文旅.会议等行业进行赋能. 既然聚焦于视频领域,那么视频转码则是绕不开的话题. 为了降低成本,以及保证产品的核心能力,公司自建了一套转码系统. 转 ...

  3. html(Angular) 调用本地安装exe程序

    1.写注册表 新建 .reg文件 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\creoparametric] "URL P ...

  4. 代数余子式的由来/代数余子式为什么-1的系数是ⁱ⁺ʲ?/证明一个n阶行列式,如果其中第i行(或第j列)所有元素除aᵢⱼ外都为零,那么这行列式等于aᵢⱼ与它的代数余子式的乘积/证明行列式按行(列)展开法则:n(n>1)阶行列式等于它任意一行(列)的所有元素与它们对应的代数余子式的乘积的和。

    代数余子式的由来/代数余子式为什么-1的系数是ⁱ⁺ʲ?/证明一个n阶行列式,如果其中第i行(或第j列)所有元素除aᵢⱼ外都为零,那么这行列式等于aᵢⱼ与它的代数余子式的乘积/证明行列式按行(列)展开法 ...

  5. Ubuntu 安装 Nginx

    Ubuntu版本:20.04.1 LTS Nginx版本:1.22.0 下载地址: https://nginx.org/en/download.html 上传目录:/usr/local/src 安装目 ...

  6. k8s之pod的生命周期

    pod生命周期 和一个个独立的应用容器一样,Pod 也被认为是相对临时性(而不是长期存在)的实体. Pod 会被创建.赋予一个唯一的 ID(UID),并被调度到节点,并在终止(根据重启策略)或删除之前 ...

  7. C++标准库string学习笔记

    string概述 作为c++语言用作字符串处理的标准库,和Python字符串类型有较多相似之处.可以使用'='进行赋值,"=="来比较,"+"进行拼接. 构造函 ...

  8. 2021年爆出log4j漏洞修复

    (1)用户可自查系统是否引用 Apache log4j-core 依赖,没有引用则不受漏洞影响. (2)排查系统中日志配置是否采用远程动态加载模式.(3)排查系统中是否正在使用JDBCAppender ...

  9. 02. C语言基础知识

    一.注释   注释 就是对代码进行解释说明的文字,注释的内容不会参与编译和运行,仅仅是对代码的解释说明.在 C语言 中注释主要分为以下两类: 单行注释://,注释内容从 // 始到本行和结尾 多行注释 ...

  10. jmeterGUI&非GUI模式之如何减负性能调优

    jmeter之如何减负-实现稳定超高并发测试(性能调优)在测试过程中,初学者使用工具不当,添加众多监控组件,非常想看到实时报告,跑不了一会,jmeter就卡死甚至内存耗尽,只得重启,之前的统计报告没了 ...