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

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests&#xff1a;发送 …...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...