API自动化测试是什么?我们该如何做API自动化测试呢?
API测试已经成为测试工作中的常规任务之一。为了提高测试效率并减少重复的手工操作,API自动化测试变得越来越重要。本文总结了API自动化测试方面的经验和心得,旨在与读者分享。
掌握自动化技能已经成为高级测试工程师的必备技能。敏捷和持续测试改变了传统测试自动化的做法,使得测试工程师不得不重新思考自动化的实施方式。如今,自动化工程师需要深入到API级别,通过API测试来保证软件的质量。
以下是API测试的基本使用指南:
一、什么是API测试?
API测试是指绕过用户界面,直接与应用程序后端或服务进行通信的测试。通过调用API来发送请求并验证响应内容,以确保应用程序按预期工作。
在这种测试中,客户端通过请求资源来发出请求,并寻找能够满足请求的服务器。服务器找到所需的资源,并将响应发送回客户端。

二、为什么API测试如此重要?
随着敏捷开发成为大多数互联网公司的标准,我们对软件开发和自动化测试的方式发生了巨大变化。在敏捷开发之前,大部分自动化测试都是通过图形用户界面(GUI)完成的。这些测试往往耗时,容易出错且难以维护。
然而,如果您已经进行了一段时间的自动化测试,您就会意识到这种方式的局限性。企业投入大量资金来创建自己的GUI测试自动化框架,但往往最终导致对可靠性失去信心,直到人们停止投入。
此外,GUI测试往往需要很长时间来完成。对于敏捷实践中的一些场景,例如持续构建,无法接受等待GUI回归测试套件的反馈时间。
API测试能够提供更快的反馈。在发现错误的早期阶段,开发人员可以立即知道他们的代码更改是否破坏了构建,从而需要进行修复。在测试驱动的流程中,需要大量的测试集来进行快速且频繁的运行,并且必须能够将它们整合到开发周期中。
GUI测试仍然非常重要,因为它是唯一能够真正测试用户在实际生产环境中如何体验应用程序的测试类型。某些缺陷只能通过GUI测试来捕获。尽管GUI测试至关重要,但它不应该是唯一关注的自动化类型,也不应该占据自动化测试总量的大部分。
敏捷开发更关注可靠的API层次下的测试,而较少涉及GUI自动化。
三、API测试金字塔

GUI测试:GUI测试专注于测试应用程序的用户界面,以确保其功能正确。它位于金字塔的顶部,占据了自动化测试类型总数中的一小部分。
单元测试:单元测试构成了金字塔的最底部,也是最大的部分。它用于验证源代码的单个单元(例如方法),开发人员可以通过此方式隔离代码中最小的可测试部分。单元测试最容易创建并且收益最大。由于单元测试通常使用与应用程序开发相同的编程语言编写,因此开发人员可以轻松地将其纳入开发流程中。
API测试:API测试位于金字塔的中间层,用于验证多个组件的交互是否无误。由于API测试绕过了用户界面,因此比GUI测试更快速、可靠。最重要的是,由于API测试不依赖于GUI,因此可以在开发周期的早期创建。
四、API负载测试
API测试的另一个好处是可以利用相同的功能性API自动化测试来进行性能测试。许多公司使用JMeter进行负载测试,而这些测试用例都是基于API功能测试构建的。
基本思想是,您正在使用工具进行性能测试,但是在针对您的API运行例如负载测试之前,需要确保它实际上可以正常工作。因此,您想先进行功能测试,然后可以利用功能测试脚本完成性能测试。
因此,API测试脚本是性能测试工作流程中的一大优势。
五、如何进行Web服务测试
测试Web服务与测试其他应用程序类似,只是在Web服务中,没有图形用户界面(GUI)这个区别。因此,我们仍然可以使用常规功能测试技术,只需将Web服务视为没有业务流程的应用程序,并相应地编写测试用例。
以下是一些在自动化Web服务测试中需要考虑的问题:
-
服务是否正确响应并返回正确的值?
-
服务的行为是否符合最终用户的预期?
-
服务响应时间是否在可接受范围内?
-
服务能否处理预期和意外的用户负载?
-
服务能否处理无效数据和错误数据导致的异常?
Web服务测试术语 对于大多数测试人员来说,最大的挑战是适应Web服务测试中使用的术语。
例如:
-
XML格式:XML是一种标记语言,允许用户定义自己的标签,并通过Internet与其他系统共享结构化数据。
-
REST:REST(Representational State Transfer)是一种轻量级的用于开发使用HTTP协议的Web服务的选项。
六、HTTP
HTTP是一种用于通过网络传输消息的通信协议。HTTP被称为无状态协议,因为每个请求都是独立的,不依赖于之前的请求。
Cookies用于跟踪先前请求的状态。它们是存储在客户端上的文件,包含从HTTP标头信息中提取的数据。当用户再次访问网站时,存储在Cookies中的信息将被发送回浏览器。这样,网站可以记住先前的活动和当前状态。
理解HTTP对于掌握大多数API测试工具的功能非常重要。
关于HTTP请求 HTTP客户端请求由三个主要部分组成:
-
请求行(HTTP方法):告诉服务器正在发出的请求类型。常见的HTTP方法有GET、POST、PUT、DELETE等。
-
标头:包含额外的信息,如浏览器、操作系统、接受类型和Cookie信息。
-
请求体:包含对应请求方法所需的数据,GET方法为空。
服务器返回的响应也由三个部分组成:
-
响应行(状态码):表示请求的状态,常见的状态码有200表示一切正常。
-
标头信息:包含响应的其他信息。
-
正文:包含响应的文本内容。
HTTP状态码根据请求的情况而不同,200表示一切正常,其他状态码表示不同的情况。
可以从服务器返回的状态码是:
1xx – 100-199范围内的响应表示服务器正在处理请求。2xx – 200-299范围内的响应表示请求成功。3xx –响应范围在300-399之间表示未执行请求-需要采取进一步的措施。4xx –响应范围为400-499,表示请求不完整,可能需要更多信息。5xx – 500-599范围内的响应表示服务器遇到错误
相关文章:
API自动化测试是什么?我们该如何做API自动化测试呢?
API测试已经成为测试工作中的常规任务之一。为了提高测试效率并减少重复的手工操作,API自动化测试变得越来越重要。本文总结了API自动化测试方面的经验和心得,旨在与读者分享。 掌握自动化技能已经成为高级测试工程师的必备技能。敏捷和持续测试改变了传…...
PyTorch 的 10 条内部用法
欢迎阅读这份有关 PyTorch 原理的简明指南[1]。无论您是初学者还是有一定经验,了解这些原则都可以让您的旅程更加顺利。让我们开始吧! 1. 张量:构建模块 PyTorch 中的张量是多维数组。它们与 NumPy 的 ndarray 类似,但可以在 GPU …...
Django、Echarts异步请求、动态更新
前端页面 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>echarts示例</title> <script src"jquery.min.js"></script><script type "text/javascript" src "echarts.m…...
Mac部署Odoo环境-Odoo本地环境部署
Odoo本地环境部署 安装Python安装Homebrew安装依赖brew install libxmlsec1 Python运行环境Pycharm示例配置 Mac部署Odoo环境-Odoo本地环境部署 安装Python 新机,若系统没有预装Python,则安装需要版本的Python 点击查询Python官网下载 安装Homebrew 一…...
【✅面试编程题:如何用队列实现一个栈】
✅面试编程题:如何用队列实现一个栈 💡典型回答 💡典型回答 使用两个队列可以实现一个栈,一个队列用来存储栈中的元素,另一个队列用来在pop操作时暂存元素。 上才艺: import java.util.LinkedList; impo…...
Windows本地的RabbitMQ服务怎么在Docker for Windows的容器中使用
1. 进入管理界面 windows安装过程请访问:Windows安装RabbitMQ、添加PHP的AMQP扩展 浏览器访问:http://127.0.0.1:15672/ 2. 创建虚拟主机 上面访问的是 RabbitMQ 的管理界面,可以在这个界面上进行一些操作,比如创建虚拟主机、…...
YOLOv5改进 | 2023卷积篇 | AKConv轻量级架构下的高效检测(既轻量又提点)
一、本文介绍 本文给大家带来的改进内容是AKConv是一种创新的变核卷积,它旨在解决标准卷积操作中的固有缺陷(采样形状是固定的),AKConv的核心思想在于它为卷积核提供了任意数量的参数和任意采样形状,能够使用任意数量…...
微信小程序:模态框(弹窗)的实现
效果 wxml <!--新增(点击按钮)--> <image classimg src"{{add}}" bindtapadd_mode></image> <!-- 弹窗 --> <view class"modal" wx:if"{{showModal}}"><view class"modal-conten…...
uniapp交互反馈api的使用示例
官方文档链接:uni.showToast(OBJECT) | uni-app官网 1.uni.showToast({}) 显示消息提示框。 常用属性: title:页面提示的内容 image:改变提示框默认的icon图标 duration:提示框在页面显示多少秒才让它消失 添加了image属性后。 注…...
XUbuntu22.04之HDMI显示器设置竖屏(一百九十八)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…...
如何用 Cargo 管理 Rust 工程系列 甲
以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/ceMTUzRjDoiLwjn_KfZSrg 这几年 Rust 可谓是炙手可热的新兴编程语言了,而且被投票为最受程序员喜爱的语言。它很现代,专门…...
Windows下ping IP+端口的方法
有两种方法: 1. windows 开通 telnet 参考: https://zhuanlan.zhihu.com/p/570982111 2. 安装插件 参考:Windows下ping IP端口的方法 推荐使用第二种。...
【python】os.getcwd()函数详解和示例
os.getcwd() 是 Python 的一个内建函数,用于获取当前工作目录的路径。这个函数属于 os 模块,需要导入这个模块才能使用它。 import os data_rootos.path.abspath(os.path.join(os.getcwd(),"../.."))# get data root path data_root1os.path.…...
Linux(二十一)——virtualenv安装成功之后,依然提示未找到命令(-bash: virtualenv: 未找到命令)
Linux(二十一)——virtualenv安装成功之后,依然提示未找到命令(-bash: virtualenv: 未找到命令) 解决办法: 创建软连接 ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv...
RNN介绍及Pytorch源码解析
介绍一下RNN模型的结构以及源码,用作自己复习的材料。 RNN模型所对应的源码在:\PyTorch\Lib\site-packages\torch\nn\modules\RNN.py文件中。 RNN的模型图如下: 源码注释中写道,RNN的数学公式: 表示在时刻的隐藏状态…...
Qt 文字描边(基础篇)
项目中有时需要文字描边的功能 1.基础的绘制文字 使用drawtext处理 void MainWindow::paintEvent(QPaintEvent *event) {QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing, true);painter.setRenderHint(QPainter::SmoothPixmapTransform, true);painte…...
.360勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
导言: 在数字化时代,.360勒索病毒如影随形,威胁个人和组织的数据安全。本文将深入介绍.360病毒的特征、威胁,以及如何有效地恢复被加密的数据文件,同时提供预防措施,助您更好地保护数字资产。如不幸感染这…...
Nginx(四层+七层代理)+Tomcat实现负载均衡、动静分离
一、Tomcat多实例部署 具体步骤请看我之前的博客 写文章-CSDN创作中心https://mp.csdn.net/mp_blog/creation/editor/134956765?spm1001.2014.3001.9457 1.1 访问测试多实例的部署 1.2 分别在三个tomcat服务上部署jsp的动态页面 mkdir /usr/local/tomcat/webapps/test vim …...
【前端】vscode 相关插件
一 插件: 01、ESLint 用来识别并检查ECMAScript/JavaScript 代码的工具 02、Prettier 用来格式化代码,如.js、.vue、css等都可以进行格式化 03、Vetur 用来识别并高亮vue语法 04、EditorConfig 用来设置vscode的编程行为 二、安装依赖 01、…...
【MySQL】MySQL库的增删查改
文章目录 1.库的操作1.1创建数据库1.2创建数据库案例 2.字符集和校验规则2.1查看系统默认字符集以及校验规则2.2查看数据库支持的字符集2.3查看数据库支持的字符集校验规则2.4校验规则对数据库的影响 3.操纵数据库3.1查看数据库3.2显示创建语句3.3修改数据库3.4数据库删除3.5备…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
