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

聊一聊接口测试是如何进行的?

目录

一、需求分析与文档理解

二、 设计测试用例

三、选择测试工具

四、搭建测试环境

五、执行测试

六、验证与结果分析

七、缺陷管理与回归测试

八、 持续集成(CI/CD)


在进行接口测试前,需要对涉及的接口文档进行熟悉,明确接口功能、输入输出参数、协议类型(HTTP/RPC等)、数据格式(JSON/XML)、鉴权方式等。

还有工具(如Swagger、OpenAPI)生成可视化接口文档,便于团队协作。其次就要对测试环境进行搭建,确保依赖服务(如数据库、第三方API)可用,配置Mock工具(如WireMock)模拟未就绪的依赖服务。

不管是进行手动接口测试,还是自动化工具进行接口,或者放在持续集成工具里,都要依据不同类型的项目选择合适的工具。手动测试的工具可以选择Postman、curl,自动化测试工具可以选择JMeter、Python(Requests+pytest)、RestAssured(Java),持续集的工具可以选择Jenkins、GitLab CI集成接口测试流程。

比如需求分析、设计测试用例、执行测试、结果分析等

紧接着就要对涉及的接口设计测试用例,通过正向的用例,异常的用例,边界值用例,性能用例思路来完善测试用例。用例完成后开启对测试用例的评审流程。

执行测试时,要手动和自动化结合,强调自动化的重要性,尤其是回归测试。结果验证不仅要看响应数据,还要检查数据库和日志。

一、需求分析与文档理解

明确接口规范:获取接口文档(如Swagger、OpenAPI),确认请求方法(GET/POST/PUT/DELETE)、URL、请求头、请求参数(Query/Body)、响应格式(JSON/XML)及状态码。

业务逻辑分析:理解接口在业务流程中的角色,例如用户注册接口如何与数据库、其他服务交互。

二、 设计测试用例

正常场景:验证参数合法时接口返回正确结果(如HTTP 200)。

示例:GET /users?id=123 返回用户数据。

异常场景:

错误参数:缺失必填参数、类型错误、越界值(如年龄=150)。

边界值测试:字符串长度超限、数值极限(如分页参数page=0)。

安全测试:未授权访问(401)、Token失效、SQL注入尝试。

性能测试:高并发下的响应时间、吞吐量(如JMeter模拟1000用户)。

依赖验证:接口是否正确处理第三方服务故障(如支付网关不可用)。

三、选择测试工具

手动测试工具:

Postman:图形化界面,支持预脚本(Pre-request Script)和结果断言。

cURL:命令行工具,适合快速调试。

自动化测试框架:

Python:requests库 + pytest

示例 1:基础 GET/POST 请求测试

import pytestimport requests# 定义基础 URL(可在 conftest.py 中全局配置)BASE_URL = "https://jsonplaceholder.typicode.com"# 测试类形式(推荐)class TestUserAPI:    # 测试 GET 请求:获取用户列表    def test_get_users(self):        url = f"{BASE_URL}/users"        response = requests.get(url)        # 断言状态码        assert response.status_code == 200        # 断言返回数据长度        data = response.json()        assert len(data) > 0        # 断言数据结构        assert "name" in data[0]        assert "email" in data[0]    # 测试 POST 请求:创建用户    def test_create_user(self):        url = f"{BASE_URL}/users"        headers = {"Content-Type": "application/json"}        payload = {            "name": "John Doe",            "email": "john@example.com",            "username": "johndoe"        }        response = requests.post(url, json=payload, headers=headers)        assert response.status_code == 201        # 验证返回数据包含生成的 ID        assert "id" in response.json()# 函数形式测试示例def test_get_single_user():    user_id = 1    url = f"{BASE_URL}/users/{user_id}"    response = requests.get(url)    assert response.status_code == 200    assert response.json()["id"] == user_id

示例 2:参数化测试(多组输入)

import pytest# 参数化测试:验证不同查询参数@pytest.mark.parametrize("user_id, expected_name", [    (1, "Leanne Graham"),    (2, "Ervin Howell"),    (3, "Clementine Bauch")])def test_user_names(user_id, expected_name):    url = f"{BASE_URL}/users/{user_id}"    response = requests.get(url)    assert response.json()["name"] == expected_name

示例 3:异常测试(错误参数/权限)

def test_invalid_user_id():    # 测试不存在的用户 ID    url = f"{BASE_URL}/users/9999"    response = requests.get(url)    assert response.status_code == 404def test_unauthorized_access():    # 测试未授权的接口(需要 Token)    url = "https://api.example.com/protected"    response = requests.get(url)    assert response.status_code == 401    assert "Unauthorized" in response.json()["message"]

Java:RestAssured

链式断言

then().statusCode(200).body("data.size()", equalTo(10))

性能工具:JMeter(线程组配置)、Gatling(高并发场景)。

Mock工具:WireMock(模拟未完成的后端服务)、Postman Mock Server。

四、搭建测试环境

测试环境:独立于生产的环境,使用测试数据库(如Docker容器化的MySQL)。

Mock服务:当依赖接口未就绪时,模拟返回预设响应(如使用JSON Server模拟GET /users返回静态数据)。

五、执行测试

手动测试:在Postman中逐条运行用例,检查响应体和状态码。

自动化脚本:

# pytest示例def test_get_user():    response = requests.get("https://api.example.com/users/1")    assert response.status_code == 200    assert response.json()["name"] == "John"

性能测试:在JMeter中配置线程组(100并发)、HTTP请求、监听器(查看聚合报告)。

六、验证与结果分析

响应验证:

状态码(如403表示无权限)。

数据结构(JSON Schema验证)。

业务逻辑(如创建订单后数据库订单表新增记录)。

日志与监控:检查服务日志是否有错误堆栈(如Nginx日志中的500错误),结合ELK(Elasticsearch, Logstash, Kibana)分析。

七、缺陷管理与回归测试

Bug提交:使用JIRA、禅道记录问题(附请求/响应截图和日志)。

回归测试:修复后通过自动化脚本重新执行相关用例,确保无回归问题。

八、 持续集成(CI/CD)

集成到流水线:Jenkins/GitLab CI自动触发接口测试。​​​​​​​

# GitLab CI示例test_api:  image: python:3.8  script:    - pip install -r requirements.txt    - pytest tests/api/

质量门禁:设置测试通过率阈值(如95%),未达标则阻断部署。

接口测试的核心是验证数据交互的正确性、健壮性和安全性,需结合手工与自动化手段,贯穿开发全生命周期。

相关文章:

  • Vue3如何选择传参方式
  • 虚幻基础:ue引擎的碰撞
  • HTTP/1.1 队头堵塞问题
  • 函数对象-C++
  • Linux 系统的启动流程
  • 树莓派超全系列教程文档--(30)autoboot.txt介绍
  • 2000-2017年各省发电量数据
  • 【Java学习笔记】关键字汇总
  • 嵌入式软件--stm32 DAY 1
  • 每日算法-链表(23.合并k个升序链表、25.k个一组翻转链表)
  • 用Prompt 技术【提示词】打造自己的大语言智能体
  • 第十六届蓝桥杯大赛软件赛省赛 C++ 大学 B 组 部分题解
  • UEFI Spec 学习笔记---12 - Protocols —CONSOLE SUPPORT(一)
  • 网络安全知识点2
  • 前端api(请求后端)简易template
  • 多模态模型 Grounding DINO 初识
  • HFSS(李明洋)学习记录1
  • 算法:双指针(快慢指针|对撞指针)、快排、模拟、二分、贪心
  • 4月17号
  • Ubuntu利用docker搭建Java相关环境问题记录
  • 财政部农业农村司司长吴奇修接受纪律审查和监察调查
  • 习近平:在庆祝中华全国总工会成立100周年暨全国劳动模范和先进工作者表彰大会上的讲话
  • 中消协发布“五一”消费提示:践行“光盘行动”,抵制餐饮浪费
  • 上海“生育友好岗”已让4000余人受益,今年将推产假社保补贴政策
  • 四川苍溪县教育局通报“工作人员辱骂举报学生”:停职检查
  • 只在上海!德国剧团新作亚洲首演:一张古典与流行的声音网络