HTTP协议和接口测试详解
介绍接口测试前我们先来介绍一下HTTP协议,为什么先要介绍HTTP协议呢因为因为我们做接口测试其实就是用测试工具(postman,fiddler,jmeter等等)或代码来模拟用户使用软件的场景,在我们模拟的时候不像平时功能测试时我们有已经开发完成的网页界面,因为接口测试它是在开发或架构师写完接口文档后和开发工作同步进行的,那时候没有页面,所以我们必须先在底层逻辑上了解我们软件时怎样运行的,怎么完成我们的操作的这就需要了解网络传输协议HTTP协议。
一、HTTP协议简介
1、什么是HTTP协议
HTTP是英文直译过来超文本传输协议,它是数据在互联网上传输的一种协议,就像我们社会运行的某种法律一样,我们在日常生活和工作中要遵守法律法规,那数据在互联网上传输也要遵循一定的规则。其中的一项规则就是HTTP协议,在我们的生活中有很多种法律,例如,婚姻法,未成年人保护法等等。同样的网络上的数据传输也有很多的协议,例如TCP、IP、FTP等等。
2、HTTP 协议的特点
1.支持客户端/服务器模式、2.简单快速、3.灵活、4.无连接、5.无状态 。
无状态和无连接是相对应于TCP协议的连接的,(扩展:TCP想要建立连接要三次握手,想要断开连接,需要四次挥手。)
3、什么是HTTP请求和响应
前面我们提到HTTP请求是网络上数据传输时的法律,那么我们网络上的数据是从什么地方传到什么地方呢,其实网络上数据传输时有客户端和服务器端两端,我们自己平时用的电脑就是客户端,服务器就是存储网络数据的一端。我们上网时从客户端发送请求给服务器,服务器接收到我们的请求,然后发送响应给我们,响应里面就有我们要的数据。在这个过程中又遵循HTTP协议所以这就是HTTP请求和响应
HTTP请求和响应里面都有什么呢?我们要学习接口测试就必须要搞清楚这个问题
4、HTTP请求(也叫请求报文)
一般来说请求分为三个部分,分别是请求行、请求头、请求体。
请求行包含请求方法,URL和协议版本,其中请求方法有我们常见的get 、post、 put、 delete四种方法。get和delete请求方法是不需要请求体的post和put需要请求体。URL中文直译过来叫 统一资源定位符 就是网络上每个数据的地址,简单理解未我们人类社会每个人都有居住地址一样,通过这个地址就能在网络上定位到该数据。协议版本就是字面意思协议的版本例如HTTP1.1。
请求头里面都是一些我们发送请求的格式数据,请求头里的数据都是以键值对(姓名:张三 就是一个键值对)的方式存储的,我们目前阶段要掌握的就两个,一个是Content-Type,它是用来解释我们发的请求体里面的数据类型是什么类型的。另一个是User-Agent,意思是客户端发送请求所用的浏览器信息。
请求体里存放着我们请求的数据,例如我们要修改我们的昵称,我们就要把我们的新昵称写在请求体里发个服务器,服务器帮我们修改,有人就要说了我怎么从来没写过请求体,那是因为浏览器帮我们做了这一步,我们只需要在输入框输入就行,但我们要学习接口测试就要自己写入请求体了。请求体里的数据一般为json格式。
请求报文的例子:
URL例子:
协议不用解释,域名和协议之间用://隔开。域名也叫IP,是用来定位计算机的,就像计算机的身份证一样,每个计算机都有自己的ip地址,它有两种书写形式还有一种是 127.168.1.1这种。域名和端口号之间用:隔开。 端口号是网络通信中用于区分不同服务和进程的数字标识,有时我们看到的URL没有端口号,那是因为端口号被省略了。例如HTTP协议默认的端口号是80,HTTPS的默认端口号是443,MySql的默认端口号是3306等等。你可以把端口号和资源路径之间的/当作是资源路径,也可以当作它们之间的分隔符。资源路径就是存放该资源的地址,资源路径和查询参数中间用?隔开,查询参数可以有多个每个查询参数之间用&隔开,有的URL是没有查询参数的。
响应报文例子:
这个响应报文图片里面没有响应体,但我们通过响应头的Content-Type知道响应体是json格式的。
5、json格式
json格式就是键值对和python里的字典是一样的,只不过json里的字符串只能用双引号,不能用单引号。json和python里的字典一样有两种书写方式
第一种:[值1,值2,值3,值4.........]
第二种:{"键":"值","键":"值","键":"值"....}
两种书写方式可以相互嵌套,例如:[{"键":"值"},{"键":"值"},{"键":"值"},{"键":"值"}...],
{"键":[值1,值2,值3......]}等等
6、响应(也叫响应报文)
有请求当然就有响应,响应体也分为三个部分响应行,响应头,响应体。
响应行包含协议版本、状态码和状态描述三个内容。状态码有以下五种
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现 (403,404)
(403 请求的资源存在,拒绝被访问,404 请求的资源不存在)
5xx:服务器端错误--服务器未能实现合法的请求
响应头里面存储的是一些响应的格式信息,例如响应体的数据类型等等。
响应体里面就是我们所需要的数据,它可以是一个图片,一个HTML网页等等任意类型。
二、接口测试简介
1、什么是接口
接口就是系统和系统之间模块和模块之间进行数据传输的通道
2、什么是接口测试
那么什么是接口测试呢,接口测试就是通过工具(postman,fiddler,jmeter等等)或者代码,来测试接口传输的正确性和逻辑依赖关系的正确性。数据传输的正确性不难理解那么逻辑依赖关系如何理解呢?例如我们在接口测试时查看订单页面那我们是不是要先登录才能查看订单页面,当我们在未登录情况下发出查看订单页面HTTP请求的时候我们需要先跳转到登陆页面让用户登录,这就是逻辑依赖关系。
3、接口测试的特点和流程
特点:
1、测试可以提前介入,提早发现Bug,符合质量控制前移的理念
2、 可以发现一些页面操作发现不了的问题
3、接口测试低成本高效益(底层的一个Bug能够引发上层8个左右Bug,接口测试可以实现自动化)
4、 不同于传统的单元测试,接口测试是从用户的角度对系统进行全面的检测
流程:
1.结合需求文档,需求分析
2.结合开发提供的接口文档,进行接口分析
3.出具接口测试用例(送审)
4.执行接口测试用例(两种方法1.工具:Pistman、fiddler、jmeter2.代码:Python + UnitTest + requests)
5.缺陷(bug)的管理和跟踪
6.生成测试报告
7.接口自动化持续集成(可选)
4、接口文档
接口文档顾名思义就是写有接口信息的文档,它包含整个项目所要用到的所有接口信息,例如每个接口的请求方法,URL,和协议版本,还有一些请求头的数据和请求体数据,一般我们现在书写接口文档都用RESTful风格。
5、什么是RESTful风格
RESTful 风格是一种约定俗成的接口文档的编写风格,它不具有强制性,就是比较流行在当前阶段。下面时RESTful 风格的请求方法和其对应的响应状态码。但一般RESTful风格的状态码在编写接口文档时不够用的,所以一般会自己定义一些状态码。
查询某个用户 get 200(成功状态码)
查询所有用户 get 200(成功状态码)
增加用户 post 201(成功状态码)
修改用户 put 201(成功状态码)
删除用户 delete 204(成功状态码)
那么如何界定RESTful风格呢?
通过请求方法界定,RESTful风格一般有四种请求方法。
通过url界定,RESTful风格每个资源的URL唯一。
通过成功状态码界定,响应成功状态码有三种(200,201,204)。
接口测试的例子:
我们以postman工具为例,通过接口完成黑马开源项目的登陆操作。首先选择请求方法,填写URL,端口号默认80我们不用填写。由于我们使用post请求方法所以需要填写请求体,请求体中填写账号和密码以json格式。postman会自动识别我们的请求体并给我们填写请求头。我们只要看到响应体中出现操作成功就说明我们登陆成功了,那我就恭喜你已经完成了首次接口测试工作。
相关文章:

HTTP协议和接口测试详解
介绍接口测试前我们先来介绍一下HTTP协议,为什么先要介绍HTTP协议呢因为因为我们做接口测试其实就是用测试工具(postman,fiddler,jmeter等等)或代码来模拟用户使用软件的场景,在我们模拟的时候不像平时功能测试时我们有已经开发完…...
vue3【实战】定义全局方法(两种方案)
以全局方法 calculate 为例 src/utils/calculate.ts export default {sum: function (a: number, b: number) {return a b} }方案1: 依赖注入 provide inject main.ts import calculate from ./utils/calculateapp.provide(calculate, calculate)页面中 // esl…...

基于JavaScript的DBUtils增删改查操作实验
1、实验目的 学习和掌握数据库连接池的配置与管理。使用DBUtils进行增删改查操作。按照步骤,掌握并实现使用DBUtils实现增删改查的全过程。 2、实验所用方法 上机实践 3、实验步骤及截图 创建一个数据库表,使用下面sql语句创建数据库表并插入数据&#x…...

初学stm32 --- 系统时钟配置
众所周知,时钟系统是 CPU 的脉搏,就像人的心跳一样。所以时钟系统的重要性就不言而喻了。 STM32 的时钟系统比较复杂,不像简单的 51 单片机一个系统时钟就可以解决一切。于是有人要问,采用一个系统时钟不是很简单吗?为…...
实现星星评分系统
使用HTML、CSS和JavaScript实现星星评分系统 本文将详细讲解如何使用 HTML、CSS 和 JavaScript 实现一个简单的星星评分系统。用户可以通过点击星星进行评分,并且还能够看到星星的悬浮效果和已选中状态。 1. HTML 结构 我们首先在 HTML 中定义了一个星星评分的结…...

数据库建模工具 PDManer
数据库建模工具 PDManer 1.PDManer简介2.PDManer使用 1.PDManer简介 PDManer(元数建模)是一款功能强大且易于使用的开源数据库建模工具。它不仅支持多种常见数据库,如MySQL、PostgreSQL、Oracle、SQL Server等,还特别支持国产数据…...
后台运维操作建议
文章目录 1.版本升级2.配置发布3.数据库/脚本操作4.发布依赖确认5.发布规范6.服务下线参考文献 1.版本升级 版本升级是软件维护和演进中的关键环节,但它可能带来一系列问题。这些问题涉及兼容性、功能、性能、安全性等方面。 【强制】版本管理:使用版本…...
NX二次开发调用内部函数设置对象穿透显示DSS_ATTR_set_show_through
获取动态库libdisp.dll的路径 void TcharToChar(const TCHAR* tchar, char* _char) {int iLength; #if UNICODE//获取字节长度 iLength = WideCharToMultiByte(CP_ACP, 0, tchar, -1, NULL, 0, NULL, NULL);//将tchar值赋给_char WideCharToMultiByte(CP_ACP, 0, tchar, …...

ubuntu16.04ros-用海龟机器人仿真循线系统
下载安装sudo apt-get install ros-kinetic-turtlebot ros-kinetic-turtlebot-apps ros-kinetic-turtlebot-interactions ros-kinetic-turtlebot-simulator ros-kinetic-kobuki-ftdi sudo apt-get install ros-kinetic-rocon-*echo "source /opt/ros/kinetic/setup.bash…...
解决Ubuntu 20.04上编译OpenCV 3.2时遇到的stdlib.h缺失错误
解决Ubuntu 20.04上编译OpenCV 3.2时遇到的stdlib.h缺失错误 您在 Ubuntu 20.04 上编译 OpenCV 3.2 时遇到的错误与 C 标准库的头文件配置问题有关。错误消息指出系统无法找到 <stdlib.h>,这通常与预编译头文件的处理、GCC 版本或者头文件搜索路径有关。下面…...

HTML综合案例
为了前端考试。 效果图: HTML代码: <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…...
TanStack——为现代前端开发提供高性能和灵活的工具
TanStack 是一个由社区主导的开源项目集合,专注于为现代前端开发提供高性能和灵活的工具。它包括多个流行的 JavaScript 和 TypeScript 库,主要用于处理表格、查询、虚拟化、状态管理等功能。 文章目录 1、TanStack Query:1.1 useQuery&#…...
Java爬虫️ 使用Jsoup库进行API请求有什么优势?
在Java的世界里,Jsoup库以其强大的HTML解析能力而闻名。它不仅仅是一个简单的解析器,更是一个功能齐全的工具箱,为开发者提供了从网页抓取到数据处理的一站式解决方案。本文将深入探讨使用Jsoup库进行API请求的优势,并提供代码示例…...

React源码02 - 基础知识 React API 一览
1. JSX到JavaScript的转换 <div id"div" key"key"><span>1</span><span>2</span> </div>React.createElement("div", // 大写开头会当做原生dom标签的字符串,而组件使用大写开头时,这…...

COMSOL with Matlab
文章目录 基本介绍COMSOL with MatlabCOMSOL主Matlab辅Matlab为主Comsol为辅 操作步骤常用指令mphopenmphgeommghmeshmphmeshstatsmphnavigatormphplot常用指令mphsavemphlaunchModelUtil.clear 实例教学自动另存新档**把语法套用到边界条件**把语法套用到另存新档 函数及其微分…...

【报表查询】.NET开源ORM框架 SqlSugar 系列
文章目录 前言实践一、按月统计没有为0实践二、 统计某月每天的数量实践三、对象和表随意JOIN实践四、 List<int>和表随意JOIN实践五、大数据处理实践六、每10分钟统计Count实践七、 每个ID都要对应时间总结 前言 在我们实际开发场景中,报表是最常见的功能&a…...
PostgreSQL数据库访问限制详解
pg_hba.conf 文件是 PostgreSQL 数据库系统中非常重要的一个配置文件,它用于定义哪些用户(或客户端)可以连接到 PostgreSQL 数据库服务器,以及他们可以使用哪些认证方法进行连接。 pg_hba.conf 的名称来源于 "Host-Based Aut…...
【test linux】创建一个ext4类型的文件系统
创建一个ext4类型的文件系统 dd 是一个非常强大的命令行工具,用于在Unix/Linux系统中进行低级别的数据复制和转换。这条命令的具体参数含义如下: if/dev/zero:指定输入文件(input file)为 /dev/zero,这是一…...

如何在繁忙的生活中找到自己的节奏?
目录 一、理解生活节奏的重要性 二、分析当前生活节奏 1. 时间分配 2. 心理状态 3. 身体状况 4. 生活习惯 1. 快慢适中 2. 张弛结合 3. 与目标相符 三、掌握调整生活节奏的策略 1. 设定优先级 2. 合理规划时间 3. 学会拒绝与取舍 4. 保持健康的生活方式 5. 留出…...

AI-PR曲线
PR曲线 人工智能里面的一个小概念。 2.3 性能度量(查全率,查准率,F1,PR曲线与ROC曲线) 预测出来的是一个概率,不能根据概率来说它是正类还是负类,要有一个阈值。 查准率(Precision&…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...

USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...