当前位置: 首页 > 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…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意&#xff1a;运行前…...