当前位置: 首页 > news >正文

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>&#xff0c;这通常与预编译头文件的处理、GCC 版本或者头文件搜索路径有关。下面…...

HTML综合案例

为了前端考试。 效果图&#xff1a; HTML代码&#xff1a; <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…...

TanStack——为现代前端开发提供高性能和灵活的工具

TanStack 是一个由社区主导的开源项目集合&#xff0c;专注于为现代前端开发提供高性能和灵活的工具。它包括多个流行的 JavaScript 和 TypeScript 库&#xff0c;主要用于处理表格、查询、虚拟化、状态管理等功能。 文章目录 1、TanStack Query&#xff1a;1.1 useQuery&#…...

Java爬虫️ 使用Jsoup库进行API请求有什么优势?

在Java的世界里&#xff0c;Jsoup库以其强大的HTML解析能力而闻名。它不仅仅是一个简单的解析器&#xff0c;更是一个功能齐全的工具箱&#xff0c;为开发者提供了从网页抓取到数据处理的一站式解决方案。本文将深入探讨使用Jsoup库进行API请求的优势&#xff0c;并提供代码示例…...

React源码02 - 基础知识 React API 一览

1. JSX到JavaScript的转换 <div id"div" key"key"><span>1</span><span>2</span> </div>React.createElement("div", // 大写开头会当做原生dom标签的字符串&#xff0c;而组件使用大写开头时&#xff0c;这…...

COMSOL with Matlab

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

【报表查询】.NET开源ORM框架 SqlSugar 系列

文章目录 前言实践一、按月统计没有为0实践二、 统计某月每天的数量实践三、对象和表随意JOIN实践四、 List<int>和表随意JOIN实践五、大数据处理实践六、每10分钟统计Count实践七、 每个ID都要对应时间总结 前言 在我们实际开发场景中&#xff0c;报表是最常见的功能&a…...

PostgreSQL数据库访问限制详解

pg_hba.conf 文件是 PostgreSQL 数据库系统中非常重要的一个配置文件&#xff0c;它用于定义哪些用户&#xff08;或客户端&#xff09;可以连接到 PostgreSQL 数据库服务器&#xff0c;以及他们可以使用哪些认证方法进行连接。 pg_hba.conf 的名称来源于 "Host-Based Aut…...

【test linux】创建一个ext4类型的文件系统

创建一个ext4类型的文件系统 dd 是一个非常强大的命令行工具&#xff0c;用于在Unix/Linux系统中进行低级别的数据复制和转换。这条命令的具体参数含义如下&#xff1a; if/dev/zero&#xff1a;指定输入文件&#xff08;input file&#xff09;为 /dev/zero&#xff0c;这是一…...

如何在繁忙的生活中找到自己的节奏?

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

AI-PR曲线

PR曲线 人工智能里面的一个小概念。 2.3 性能度量&#xff08;查全率&#xff0c;查准率&#xff0c;F1&#xff0c;PR曲线与ROC曲线&#xff09; 预测出来的是一个概率&#xff0c;不能根据概率来说它是正类还是负类&#xff0c;要有一个阈值。 查准率&#xff08;Precision&…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...