Apifox接口测试教程(一)接口测试的原理与工具

2023-11-08

前言

掌握了http协议,就掌握了接口测试

笔者在网络上看过不少接口测试教程,一上来就开始讲怎么操作工具,而不告诉读者为什么要这么操作。读者可能照猫画虎成功了,也可能操作失败了但不知为何出错。

因此,本文作为接口测试的入门第一课首先会给大家了解到执行接口测试每一步操作的目的和原理,由此大家才能从理论到实践上掌握接口测试,并且熟练之后有自己的创造性发挥。

本文所用的接口测试工具为Apifox,请大家在往下读之前先安装注册好工具。

Apifox官方下载地址:http://www.apifox.cn

一、接口测试测什么

接口测试主要是测试系统 组件间接口的一种测试,主要用于测试服务器与前端(web浏览器,APP)之间的数据交互接口。测试的重点是要检查接口参数传递的正确性,接口功能实现的正确性,输出结果的正确性,以及对各种异常情况的容错处理的完整性和合理性。

由引文对接口测试的定义可得,接口测试的对象是服务器接口,接口测试的内容包括:接口参数检验,接口功能实现是否正确,接口异常情况容错处理。

接口测试的内容是《Apifox接口测试》系列教程后面的内容,本文主要讲解服务器接口,前端如何通过http协议与服务器通信,Apifox等接口测试工具如何实现接口测试。

二、接口测试的对象:服务器接口

API指的是一组预先定义好的函数,来让系统或外部的其他组件可以执行它内部实现的功能,但又无须访问源代码或者理解其内部逻辑。

在需求开发过程中,前后端分离开发,两端的研发人员会共同定义好接口,编写接口文档,此后的开发过程中需要遵循这份协议文档。

因此接口测试也是一种黑盒测试,测试人员需要根据接口文档来对服务器Api进行测试,来检测约定的功能是否正确实现,是否有对异常情况做容错处理。

而接口文档的编写是依据前后端数据传输的协议——Http协议进行的。

要会用接口文档,首先先理解http协议。

三、服务器接口与前端通信的方式:http协议

服务器和前端通过互相发送http报文完成数据交互。本小节将介绍如何创建http报文,以及如何理解报文的每一个部分,了解完就可以掌握接口测试的基础内容。

  • http报文的三个组成部分 http报文是一个格式化数据块。报文类型包括客户端请求,服务器响应。它们由3个部分组成:

    • 起始行(start line) 对报文进行描述

    • 首部块(header) 包含属性 Content-Type:Content-Length:

    • 主体(body) 包含文本或二进制数据,可以为空

    • 请求报文的格式

<method><request-URL><version>
<headers>
<entity-body>

响应报文的格式

<version><status><reason-phrase>
<headers>
<entity-body>

各个字段的含义如下:

方法(method):前端希望对服务器执行的操作,包含get,post,put,delete等方法;

方法 功能
GET 从服务器获取数据
POST 向服务器发送要处理的数据
HEAD 只从服务器获取文档的首部
DELETE 从服务器上删除数据
PUT 向服务器提交数据

请求url(request-URL):所请求资源路径,通过它可找到资源放置的位置。格式类似于:https://www.apifox.cn/help/app/contact-us/

版本(version):报文所使用的http版本,格式类似于:HTTP/1.0

首部(headers):可以有0个或多个首部,常见的首部如下:

实体主体(entity-body):包含一个数据块,支持多种数据格式,如html页面,图片,视频,源代码等等。

状态码(status-code):描述请求结果,成功或者失败。

原因短语(reason-phrase):原因短语是状态码的可读版本,只对人类有意义。

这些字段初学者会觉得非常抽象难以理解和记忆,但当后面接触到api文档和用apifox做接口测试的时候,就会顿悟——api文档里的参数和方法,url的含义和接口测试界面每个空格要填什么,返回值代表什么含义。

请耐心继续往下读。

四、读懂API文档

对于测试人员,准备接口测试所需要的文档有产品需求文档+API文档。

需求文档用于梳理接口为何这么设计、是否合理;

针对单个接口,接口文档用于获取:接口描述,请求说明,返回说明。

以百度开放API,文字识别接口为例:我们想要使用它的文本识别功能,需要去调用它的接口,那么需要了解发起这个文本识别接口请求,每个字段需要填什么内容。

 *注:Apifox的ApiHub中,收集了大量开放的API,初学者可选取某个api深入了解接口文档,或作为接口测试的练习物料,注意有些接口需要先获取使用权限。

五、Apifox接口测试原理

对于服务器来说,Apifox也是一个前端,只不过其他前端的接口请求由研发人员在代码里封装好,在特定条件下被触发发起请求,而Apifox中,接口请求由用户手动封装,手动发起。

 Apifox界面

看完Apifox接口测试的界面,读者想必能发现,整个界面就是让读者手动构建出一个http请求出来,上两节我们讲的抽象的http协议终于落了地。

因此一个最基础的http接口测试所需要做的步骤就是手动填写完成并发出一个http请求,校验参数。

step1.选择请求方法->填写请求url->填写url参数->填写body参数和header参数(如果有)

step2.手动发送请求

step3.查看返回参数是否正常,是否符合接口文档的约定

六、用Apifox构建你第一个测试请求

在铺垫完上述那么多理论基础之后,大家终于可以开始上手使用apifox来做接口测试了。

练习1:用get请求获取html页面

step1:在apifox的新建接口tab输入“http://www.baidu.com”,请求方法选择GET,header参数,url参数,body参数均为空,接着点击send按钮。

step2:查看返回值,可以看到请求回来的数据是一个html页面,即百度首页,我们点击‘preview’按钮,可以看到一个完整的页面显示出来

 点击preview tab

练习2:获取百度开放API的acess_token,即获得使用api的授权

step1:查看百度开放api获取acess_token的接口文档,获取请求方法和请求参数

step2:根据接口文档描述的,在apifox接口测试界面选择post方法,在params里填写3个请求参数, (client_id和client_secret需要创建应用后才能获得,没有可以先去创建)

填写请求参数 

 step3:点击下方「实际请求」tab,可以看到apifox实际发出的接口请求形式 如下:

 step4:查看返回参数可看到返回了我们需要的acess_token 字段:

练习完成。大家可以利用自己公司内部的接口文档/外部开放api继续进行练习巩固。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Apifox接口测试教程(一)接口测试的原理与工具 的相关文章

  • AttributeError:模块“keras.engine”没有属性“Layer”

    当我试图运行时Parking Slot mask rcnn py文件我收到如下错误mrcnn model py文件我该如何解决 gt 2021 06 17 08 25 18 585897 W tensorflow stream execut
  • 是否有与 Java 的 IdentityHashMap 等效的 Python 版本?

    我正在遍历一个数据结构 想要构建一个映射 X gt Y 的字典 其中 X 是我正在遍历的数据结构中的一个字段 Y 是我正在动态构建的数据结构中的一个字段 X 是不可散列的类型 Java的IdentityHashMap的目的是模拟动态字段 由
  • 如何配置 VS Code 以便能够单步执行调试 Python 脚本时加载的共享库 (.so)?

    从命令行使用 gdb 我可以在加载共享库时中断 知道我有共享库的源代码 如何在 VS Code 中获得相同的行为 对我来说 它以某种方式起作用 这是我的设置 Ubuntu 18 04 调试我从 Python3 加载的 C 共享库 更具体地说
  • Python:如何使用 f 字符串进行数学运算

    我正在尝试使用 python 3 6 的新 f 字符串功能编写自己的 99 瓶啤酒实现 但我被困住了 def ninety nine bottles for i in range 10 0 1 return f i bottles of b
  • Python正则表达式查找所有单个字母字符

    我想找到字符串中单个字母字符每次出现的所有索引 我不想捕获单个字符 html 代码 这是我的代码 import re s fish oil B stack peanut c b words re finditer S s has alpha
  • 将 Python 脚本导入另一个脚本?

    我正在阅读 Zed Shaw 的 艰难学习 Python 正在学习第 26 课 在本课中 我们必须修复一些代码 这些代码从另一个脚本调用函数 他说我们不必导入它们来通过测试 但我很好奇我们将如何做到这一点 课程链接 http learnpy
  • pythonic方式来反转一个字典,其中值是列表?

    我有一本看起来像这样的字典 letters by number 1 a b c d 2 b d 3 a c 4 a d 5 b c 我想将其反转为如下所示 numbers by letter a 1 3 4 b 1 2 5 c 1 3 5
  • 如何在 PyCharm 社区版中运行 Django 项目的调试服务器?

    有人在 PyCharm 社区版中为 Django 项目设置调试配置时遇到问题吗 IDE 的社区版缺少项目设置中的项目类型选项 然后当我设置 调试 或 运行配置 时 它会要求我提供应该运行的脚本 Django 需要什么脚本 manage py
  • 如何在pytorch中动态索引张量?

    例如 我有一个张量 tensor torch rand 12 512 768 我得到了一个索引列表 说它是 0 2 3 400 5 32 7 8 321 107 100 511 我希望从给定索引列表的维度 2 上的 512 个元素中选择 1
  • 查找提供的 Sum 值的组合

    我有一系列这样的数字 myvar 57 71 87 97 99 101 103 113 114 115 128 129 131 137 147 156 163 186 现在我想计算所有这些可能的组合 长度为1到20 其总和等于给定的数字m
  • 忽略 NaN 的列表理解

    我正在尝试构建一个列表理解 其条件是不导入 nan 值 但运气不佳 以下是当前代码以及结果输出 什么条件会将 nan 从列表中删除 def generate labels filtered df columnName return labe
  • Scrapy规则如何与爬行蜘蛛一起工作

    我很难理解 scrapy 爬行蜘蛛规则 我有一个例子 它并不像我希望的那样工作 所以它可能是两件事 我不明白规则是如何运作的 我形成了不正确的正则表达式 导致我无法获得所需的结果 好吧 这就是我想做的 我想编写爬行蜘蛛 它将获取所有可用的统
  • 如何将字符串转换为二进制?

    我需要一种方法来获取 python 中字符串的二进制表示形式 例如 st hello world toBinary st 是否有一个模块可以以某种巧妙的方式执行此操作 像这样的东西吗 gt gt gt st hello world gt g
  • 从 DST 感知日期时间对象在 Dataframe 中创建 pandas DatetimeIndex

    我从在线 API 收集了一系列数据点 每个数据点都有一个值和一个 ISO 时间戳 不幸的是我需要循环它们 所以我将它们存储在临时的dict然后从中创建一个 pandas 数据帧并将索引设置为时间戳列 简化示例 from datetime i
  • 在 C++ 中运行 python [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个用 C 编写的应用程序和一个测试系统 也是用 C 编写的 测试系统非常复杂并且很难改变 我只想做一些小的改变 我的班级是这样的
  • 将人员分配到床位 - 自动化方法[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我每年都会帮助举办青年营 将与会者分配到卧室是一项艰巨的任务 有 92 个卧室 活动持续一周 与会者停留的时间长短不一 而且床需要重复
  • 打开 PDF 到书签/指定目标?

    我正在尝试使用 python 打开特定书签的 PDF 到目前为止 我可以在命令提示符中运行以下命令并得到我想要的 last是 PDF test pdf 中指定目的地的名称 C Program Files x86 Adobe Reader 1
  • Discord-py Rewrite - Cog 中的基本 aiohttp Web 服务器

    我正在尝试将基本的 aiohttp 网络服务器集成到 Cog 中 使用 discord py 重写 我对齿轮使用以下代码 from aiohttp import web import discord from discord ext imp
  • 为文件中的每个单词创建字典并计算其后面的单词的频率

    我正在尝试解决一个难题 却迷失了方向 这就是我应该做的 INPUT file OUTPUT dictionary Return a dictionary whose keys are all the words in the file br
  • python函数中的Return语句不返回任何内容[重复]

    这个问题在这里已经有答案了 我不明白退货和打印之间的区别 有人告诉我应该在函数语句中使用 return 但它不会返回任何内容 所以我一直在函数中使用 print 但我想了解为什么我的函数中的 return 语句不起作用 def triang

随机推荐

  • mybatis查询返回空,sql数据库执行有数据

    需要编写一个统计功能 在Navicat Premium里调整好sql 然后编写后台代码 controller service serviceImpl dao 在serviceImpl 上添加 Service 注解 在dao 添加 Repos
  • 【测试 3】三、软件测试方法

    4 软件测试方法 包括白盒测试 灰盒测试 黑盒测试 静态测试 动态测试 手动测试 自动测试等 学习目标 熟悉白盒测试方法 掌握黑盒测试方法 掌握黑盒测试用例设计的方法 等价类划分法 边界值分析法 因果 图分析法 判定表分析法 正交试验法等
  • 图像特征提取三大算法:HOG特征,LBP特征,Haar特征

    一 HOG特征 from http dataunion org 20584 html 1 HOG特征 方向梯度直方图 Histogram of Oriented Gradient HOG 特征是一种在计算机视觉和图像处理中用来进行物体检测的
  • Intellij IDEA运行报Command line is too long的解决办法

    报错信息大概如下 Error running xxx Command line is too long Shorten command line for xxx or also for Application default configu
  • leet116. 每个节点的右向指针

    题目 给定一个二叉树 struct TreeLinkNode TreeLinkNode left TreeLinkNode right TreeLinkNode next 填充他的每个 next 下一个 指针 让这个指针指向其下一个右侧节点
  • Mybatis-Plus-【通俗易懂全讲解】

    Mybatis Plus 简介 MyBatis Plus opens new window 简称 MP 是一个 MyBatis opens new window 的增强工具 在 MyBatis 的基础上只做增强不做改变 为简化开发 提高效率
  • 08-go mod和vendor

    文章目录 1 go mod 1 1 创建项目 1 2 mod初始化 1 3 重新构建依赖 1 4 编译 2 vendor 2 1 拷贝依赖 2 2 使用vendor目录编译 1 go mod 1 1 创建项目 创建一个目录 root liu
  • QT中私有公有化(Q_DECLARE_PUBLIC Q_DECLARE_PRIVATE)原理小DEMO

    结果 b ljtcnt 8889 b ljtcnt 1457 代码如下 DrawToolButton h ifndef DrawToolButton H define DrawToolButton H include
  • CSDN中发布文章时上传图片上传失败的问题

    多是与搜狗输入法有关联 解决办法 在需要上传图片的时候切换到其他的输入法即可正常上传
  • Python中常用的正则表达式

    正则表达式是对字符串操作的一种逻辑公式 就是用事先定义好的一些特定字符 及这些字符的组合 组成一个 规则字符串 这个 规则字符串 用来表达对字符串的一种过滤逻辑 非python独有 但是python的re模块提供了实现 在python中写正
  • python实战-JSON形式爬虫-批量爬取图片并下载

    文章目录 一 前言 二 思路 1 网站返回内容 2 url分页结构 3 根据请求快速构造代码 三 具体代码的实现 四 总结 一 前言 上一篇文章已经对html形式的爬虫进行实战 批量爬取电影下载链接 接下来将实战json形式爬虫 批量爬取并
  • Java环境配置

    文章目录 windows环境 linux环境 yum安装 压缩包安装 首先需官网下载所需版本jdk 注意与机器对应 官网下载地址 https www oracle com technetwork cn java javase downloa
  • 时间序列--平滑+特征工程

    https machinelearningmastery com moving average smoothing for time series forecasting python 平滑的希望是消除噪声 更好地揭示潜在的因果过程的信号
  • [mpeg4]mpeg4码流分析

    基于内容的AV编码 以前AV信息被看作纯粹的数据 编码时没有结合自身包含的内容 例如视频序列被认为是象素的组合 MPEG 4采用了对象的概念 不同的数据源被视作不同的对象 分别编码 数据的接收者不再是被动的 他可以对不同的对象进行自己的操作
  • 特征工程和多项式回归

    特征工程的定义 特征工程 Feature Engineering 特征工程是将原始数据转化成更好的表达问题本质的特征的过程 使得将这些特征运用到预测模型中能提高对不可见数据的模型预测精度 特征工程简单讲就是发现对因变量y有明显影响作用的特征
  • Multimodal Machine Learning: A Survey and Taxonomy/多模态机器学习综述

    目录 1 介绍 introduction 2 历史回顾 review 3 表示 representation 4 映射 Translation Mapping 5 对齐 Alignment 6 融合 Fusion 7 联合学习 Co lea
  • Spring系列之玩转bean scope

    本文内容 详细介绍5中bean的sope及使用注意点 自定义作用域的实现 应用中 有时候我们需要一个对象在整个应用中只有一个 有些对象希望每次使用的时候都重新创建一个 spring对我们这种需求也提供了支持 在spring中这个叫做bean
  • MySql索引原理与使用大全

    林炳文Evankaka原创作品 转载请注明出处http blog csdn net evankaka 一 索引介绍 索引是对数据库表中一列或多列的值进行排序的一种结构 在关系数据库中 索引是一种与表有关的数据库结构 它可以使对应于表的SQL
  • 一步一步学Silverlight 2系列(5):实现简单的拖放功能

    版权声明 原创作品 允许转载 转载时请务必以超链接形式标明文章 原始出处 作者信息和本声明 否则将追究法律责任 http terrylee blog 51cto com 342737 67221 概述 Silverlight 2 Beta
  • Apifox接口测试教程(一)接口测试的原理与工具

    前言 掌握了http协议 就掌握了接口测试 笔者在网络上看过不少接口测试教程 一上来就开始讲怎么操作工具 而不告诉读者为什么要这么操作 读者可能照猫画虎成功了 也可能操作失败了但不知为何出错 因此 本文作为接口测试的入门第一课首先会给大家了