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备…...

Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...

计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...