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

使用 JavaScript 进行 API 测试的综合教程

说明

        API 测试是软件测试的一种形式,涉及直接测试 API 并作为集成测试的一部分,以确定它们是否满足功能、可靠性、性能和安全性的预期。

先决条件:

  1. JavaScript 基础知识。
  2. Node.js 安装在您的计算机上。如果没有,请在此处下载。
  3. npm(节点包管理器),它是 Node.js 附带的。
  4. 对 API 和 HTTP 方法(GET、POST、PUT、DELETE)有基本了解。

第 1 章:了解 API 测试

1.1 什么是API?

API 代表应用程序编程接口。它是一组允许程序相互通信的规则。开发人员在服务器上创建 API 并允许客户端与其对话。

1.2 什么是API测试?

API 测试是一种软件测试,通过测试应用程序编程接口 (API) 来确定它们是否满足功能、可靠性、性能和安全性的预期。由于 API 缺乏 GUI,因此 API 测试是在消息层执行的。

1.3 为什么 API 测试很重要?

API 测试对于发现其他测试级别难以检测的缺陷类型至关重要,例如与集成和功能相关的问题。

第 2 章:API 测试规划

规划对于 API 测试至关重要。以下是规划时需要考虑的一些步骤:

  1. 了解 API:您需要了解您正在测试的 API 的用途。它可以像处理登录功能一样简单,也可以像管理大型系统的数据交换一样复杂。
  2. 定义结果:在开始测试之前,您应该知道您期望的结果。如果没有这种理解,您将无法知道 API 是否按预期运行。
  3. 定义您的测试:确定您要测试的内容。您可以测试 API 的功能、可靠性、安全性和/或性能。每一个都需要不同的方法。
  4. 准备测试环境:在开始测试之前设置测试环境。这包括拥有任何必要的数据库和服务器,并确保 API 可访问。
  5. 创建测试用例:测试用例包括测试步骤、条件和输入。提前准备好这些是很重要的。

第 3 章:API 测试最佳实践

为确保有效的 API 测试,请遵循以下最佳实践:

  1. 测试典型负载、最大负载和最小负载:始终检查 API 在典型负载、峰值负载和最小负载条件下的行为方式。
  2. 确定 API 函数调用的优先级:根据使用频率、重要性和实现复杂性确定 API 测试的优先级。
  3. 按测试类别对 API 测试用例进行分组:这可确保一个类别的所有测试用例按顺序执行,从而节省时间。
  4. 使用自动化进行回归、负载和性能测试:手动测试可能非常耗时且容易出错,因此建议尽可能实现自动化。
  5. 监控生产中的 API:持续监控 API 的性能,以确保其功能、可靠性和安全性。

第 4 章:设置环境

首先,我们将设置我们的项目。导航到您的项目目录并初始化一个新的 Node.js 项目:

npm init -y

接下来,我们需要安装jest用于测试和axios发出 HTTP 请求:

npm install --save-dev jest axios

为您的测试创建一个新文件,例如api.test.js.

第 5 章:编写基本测试

5.1 测试GET请求

const axios = require('axios');test('User with ID 1 exists', async () => {const response = await axios.get('https://jsonplaceholder.typicode.com/users/1');expect(response.status).toBe(200);
});

5.2 测试响应内容

test('User with ID 1 has name "Leanne Graham"', async () => {const response = await axios.get('https://jsonplaceholder.typicode.com/users/1');expect(response.data.name).toBe('Leanne Graham');
});

5.3 测试POST请求

test('Create a new user', async () => {const user = {name: "Test User",username: "testuser",email: "testuser@example.com"};const response = await axios.post('https://jsonplaceholder.typicode.com/users', user);expect(response.status).toBe(201);
});

第 6 章:运行测试

在您的“脚本”部分添加以下内容package.json

"scripts": {"test": "jest"
}

您现在可以使用以下命令运行测试:

npm test

这是使用 JavaScript 进行 API 测试的基本介绍。请记住,随着您的系统变得更加复杂,您的测试将需要变得更加复杂。测试愉快!

第 7 章:不同类型的 API 测试

7.1 验证测试

验证测试可确保 API 以正确的格式返回正确的数据。

test('User email is valid', async () => {const response = await axios.get('https://jsonplaceholder.typicode.com/users/1');expect(response.data.email).toMatch(/\S+@\S+\.\S+/);
});

7.2 功能测试

功能测试验证 API 是否按预期工作以及所有端点交互是否正常运行。

test('Create a new post', async () => {const post = {title: 'foo',body: 'bar',userId: 1};const response = await axios.post('https://jsonplaceholder.typicode.com/posts', post);expect(response.data.title).toBe('foo');expect(response.data.body).toBe('bar');expect(response.data.userId).toBe(1);
});

7.3 安全测试

安全测试可验证您的 API 是否免受攻击和漏洞的影响。

test('Cannot access secured endpoint without token', async () => {try {await axios.get('https://myapi/secure');} catch (error) {expect(error.response.status).toBe(401);}
});

7.4 错误检测

错误检测检查 API 如何处理故障。它会崩溃吗?它是否返回有意义的错误消息?

test('Non-existent endpoint returns 404', async () => {try {await axios.get('https://jsonplaceholder.typicode.com/nonexistent');} catch (error) {expect(error.response.status).toBe(404);}
});

第 8 章:自动化 API 测试

您可以使用 GitHub Actions、CircleCI、Travis CI 或任何其他 CI/CD 工具来自动化测试。每次推送代码更改时,该工具都会自动运行您的测试。

第 9 章:模拟 API 响应

Jest 允许您在测试中轻松模拟模块。这是一个模拟 axios 获取响应的示例:

jest.mock('axios');axios.get.mockResolvedValue({data: {id: 1,name: 'Leanne Graham'}
});test('Get user with ID 1', async () => {const response = await axios.get('https://jsonplaceholder.typicode.com/users/1');expect(response.data.name).toBe('Leanne Graham');
});

第 10 章:高级 API 测试概念

10.1 负面测试

        负面测试是指向 API 提供无效输入,以确保它可以正常处理并返回适当的错误消息。

test('Cannot create user without email', async () => {const user = {name: "Test User",username: "testuser"};try {await axios.post('https://jsonplaceholder.typicode.com/users', user);} catch (error) {expect(error.response.status).toBe(400);}
});

10.2 API 链接

        API 链接涉及使用一个 API 调用的响应来触发另一个 API 调用。当必须根据前一个 API 的响应触发一系列 API 时,这一点非常重要。

test('Get posts by user with ID 1', async () => {const userResponse = await axios.get('https://jsonplaceholder.typicode.com/users/1');const postsResponse = await axios.get(`https://jsonplaceholder.typicode.com/posts?userId=${userResponse.data.id}`);expect(postsResponse.data[0].userId).toBe(1);
});

10.3 API 中的 OAuth

        如果您的 API 使用 OAuth 进行身份验证和授权,您可能需要在测试中处理令牌生成和刷新。

test('Cannot access resource without token', async () => {try {await axios.get('https://myapi/resource');} catch (error) {expect(error.response.status).toBe(401);}
});

        本教程涵盖了使用 JavaScript 进行 API 测试的基础知识和一些高级概念。请记住,随着您的应用程序的增长,您的测试和方法也会随之增长。测试愉快!瓦利德·穆萨

相关文章:

使用 JavaScript 进行 API 测试的综合教程

说明 API 测试是软件测试的一种形式,涉及直接测试 API 并作为集成测试的一部分,以确定它们是否满足功能、可靠性、性能和安全性的预期。 先决条件: JavaScript 基础知识。Node.js 安装在您的计算机上。如果没有,请在此处下载。npm…...

Vue 2.0源码分析-Virtual DOM

Virtual DOM 这个概念相信大部分人都不会陌生,它产生的前提是浏览器中的 DOM 是很“昂贵"的,为了更直观的感受,我们可以简单的把一个简单的 div 元素的属性都打印出来,如图所示: 可以看到,真正的 DOM …...

(HAL库版)freeRTOS移植STMF103

正点原子关于freeRTOS的教程是比较好的,可惜移植的是标准库,但是我学的是Hal库,因为开发速度更快,从最后那个修改SYSTEM文件夹的地方开始替换为下面的内容就可以了 5.修改Systick中断、SVC中断、PendSV中断 将SVC中断、P…...

vue2-axios

下载axios 开发版本:axios.js 生产版本:axios.min.js 搭建服务器:json-server npm i -g json-serverjson-server --watch db.json(启动服务并读取文件,db.json文件目录下启动) json-server --watch db.j…...

创建maven的web项目

(一)创建maven的web项目 Step1、创建一个普通的maven项目 (1)新建一个empty project,命名为SSM2。 点击项目名,右键new,选择Module,左侧选择“Maven archetype”,可以给…...

使用uniapp开发系统懒加载图片效果

1、创建一个Vue组件 在uniapp项目中,我们可以创建一个独立的Vue组件来实现懒加载图片效果。打开uniapp项目,进入components文件夹,创建一个名为"LazeImage"的组件。 2、编写组件模板 在"LazeImage"组件中,…...

导入PIL时报错

在导入PIL时,报以下错误: 查找原因 参考博客 Could not find a version that satisfies the requirement PIL (from versions: ) No matching distributi-CSDN博客,按照wheel后,安装PIL时,报如下的错误。 查找说是python版本与wheel文件版本不同,确认本机python版本 …...

MyBatis Generator 插件 详解自动生成代码

MyBatis Generator(MBG)是MyBatis和iBATIS的代码生成器。可以生成简单CRUD操作的XML配置文件、Mapper文件(DAO接口)、实体类。实际开发中能够有效减少程序员的工作量,甚至不用程序员手动写sql。 它将为所有版本的MyBatis以及版本2.2.0之后的i…...

SkyWalking全景解析:从原理到实现的分布式追踪之旅

🎏:你只管努力,剩下的交给时间 🏠 :小破站 SkyWalking全景解析:从原理到实现的分布式追踪之旅 前言第一:SkyWalking简介第二:实现原理概览第三:主键与架构第四&#xff1…...

新手如何买卖可转债,可转债投资基础入门

一、教程描述 什么是可转债?可转债是可转换债券的二次简称,原始全称是可转换公司债券,这是一种可以在特定时间、按特定条件,转换为普通股票的特殊企业债券,可转换债券兼具债权和股权的特征,其英文为conver…...

研习代码 day39 | 动态规划——完全背包的应用

一、爬楼梯&#xff08;进阶版&#xff09; 1.1 题目 题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬至多m (1 < m < n)个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 注意&#xff1a;给定 n 是一个正整数。 输入描述 输入共一…...

Rust语言入门教程(五) - 流控制语句

if 表达式 在Rust中&#xff0c; if语句的判断条件不需要用( )括起来&#xff0c; 它会认为所有在if 和 {之间的表达式就是判断条件&#xff0c;例如&#xff1a; if num 5 {msg "five"; }判断条件的表达式必须返回一个bool型的值&#xff0c; 因为Rust是一个不喜…...

字符串:leetcode1410. HTML 实体解析器

1410. HTML 实体解析器 「HTML 实体解析器」 是一种特殊的解析器&#xff0c;它将 HTML 代码作为输入&#xff0c;并用字符本身替换掉所有这些特殊的字符实体。 HTML 里这些特殊字符和它们对应的字符实体包括&#xff1a; 双引号&#xff1a;字符实体为 &quot; &#xff…...

springboot+vue项目如何集成onlyoffice开源文档组件

一、onlyoffice是什么 ONLYOFFICE 是一个开源的办公套件&#xff0c;适合多人在线协作。由总部位于总部在拉脱维亚的 IT 公司Acensio System SIA 开发。它提供在线协作文档编辑器&#xff08;包括文档、电子表格、演示文稿和表单&#xff09;&#xff0c;适用于 Windows、Linu…...

Android okhttp3.0配置https信任所有证书

参考: Android okhttp3.0配置https的自签证书和信任所有证书 private OkHttpClient getHttpsClient() {OkHttpClient.Builder okhttpClient new OkHttpClient().newBuilder();//信任所有服务器地址okhttpClient.hostnameVerifier(new HostnameVerifier() {Overridepublic boo…...

大数据基础设施搭建 - Hive

文章目录 一、上传压缩包二、解压压缩包三、配置环境变量四、初始化元数据库4.1 配置MySQL地址4.2 拷贝MySQL驱动4.3 初始化元数据库4.3.1 创建数据库4.3.2 初始化元数据库 五、启动元数据服务metastore5.1 修改配置文件5.2 启动/关闭metastore服务 六、启动hiveserver2服务6.1…...

手把手教你安装 Visual Studio 2022 及其简单使用

软件下载 打开 Visual Studio 官网&#xff0c;个人选择免费的Community社区版就够用了。 软件安装 双击运行安装程序&#xff1a; 点击继续 即可&#xff1a; 等待加载完成&#xff1a; 可以看到 Visual Studio 2022 对应不同的开发需求提供了若干工作负载&#xff0c;这里以…...

在MySQL中,修改字段A相同的记录的字段B ,要使得字段C小的记录的字段B值等于字段C大的记录的字段B值

例如&#xff1a;更新具有相同电话号码的用户记录&#xff0c;使得updatetime小的记录的name值等于updatetime大的记录的name值。 首先&#xff0c;我们需要创建一个用户表&#xff0c;这个用户表包含以下字段&#xff1a;phone&#xff0c;updatetime, name。以下是创建这个表…...

Java WebSocket 客户端接收大量数据

介绍 WebSocket 是一种基于 TCP 协议的全双工通信协议&#xff0c;它能够在客户端和服务器之间建立一个持久连接&#xff0c;实现实时的双向数据传输。在实际应用中&#xff0c;有时候我们需要处理大量的数据&#xff0c;例如实时监控系统或者实时股票行情等。本文将介绍如何使…...

QT 在Windows下实现ping功能(ICMP)

前言 很多时候&#xff0c;我们可能会图省事直接调用系统中的ping命令&#xff0c;但这是很不科学的~ 废话不多说&#xff0c;直接上代码.. .pro文件 在.pro文件末尾添加一行&#xff1a; LIBS -liphlpapi -lws2_32 .h文件 在.h文件中加入&#xff1a; #include <Q…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

Golang——7、包与接口详解

包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域&#xff0c;无损检测&#xff08;NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统&#xff0c;以非接触式光学麦克风技术为核心&#xff0c;打破传统检测瓶颈&#xff0c;为半导体、航空航天、汽车制造等行业提供了高灵敏…...