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

新手上路:用Python+Requests快速验证电商API(登录、购物车、支付三连测)

Python+Requests实战:电商API自动化测试从入门到精通

引言:为什么选择API自动化测试作为起点?

刚接触自动化测试的开发者常常被复杂的UI自动化框架吓退——元素定位不稳定、浏览器兼容性问题、执行速度慢等问题让人望而生畏。其实,API测试才是自动化测试的最佳切入点。根据2023年测试行业调查报告显示,80%的业务逻辑缺陷其实都集中在后端接口层,而API测试具有执行速度快(比UI测试快10倍以上)、稳定性高、维护成本低等显著优势。

本文将带你用Python生态中最轻量级的Requests库,对电商系统核心业务流程(登录→购物车操作→支付)进行完整测试。不同于传统手工测试文档,我们会直接编写可运行的测试代码,让你在30分钟内就能获得第一个自动化测试成果。特别适合有以下需求的读者:

  • 功能测试人员想转型自动化测试但不知从何入手
  • 开发人员需要快速验证自己编写的接口是否符合预期
  • 技术负责人希望建立基础的自动化测试能力

1. 环境准备与工具链搭建

1.1 基础环境配置

开始前请确保已安装:

  • Python 3.8+(推荐使用3.10稳定版)
  • pip最新版本(python -m pip install --upgrade pip
  • 任意主流IDE(VS Code/PyCharm)

安装核心依赖库:

pip install requests pytest pytest-html

1.2 接口测试辅助工具

工欲善其事必先利其器,推荐安装:

  • Postman:用于初步接口调试
  • Charles/Fiddler:抓包分析接口细节
  • JSON格式化工其:快速格式化接口响应

提示:电商系统推荐使用开源项目Tpshop作为测试目标,其API文档规范且完全开源

2. 电商API测试核心方法论

2.1 接口测试四要素

一个完整的接口测试需要关注:

要素说明示例
请求方法GET/POST/PUT/DELETE等POST
请求地址接口URL/api/user/login
请求参数Query/Header/Body参数{"mobile":"13800138000"}
预期响应状态码+响应体结构200 OK + token字段

2.2 测试脚本设计原则

# 优秀测试脚本的特征 def test_api(): # 1. 准备测试数据(隔离生产环境) test_data = generate_test_data() # 2. 发送请求并记录耗时 start = time.time() response = send_request(test_data) latency = time.time() - start # 3. 多维度断言 assert response.status_code == 200 assert response.json()["code"] == 200 assert "token" in response.json().get("data", {}) assert latency < 1.0 # 性能断言 # 4. 清理测试数据 clean_up(test_data)

3. 登录接口深度测试实战

3.1 获取接口规范

通过抓包或文档获取登录接口详情:

  • 请求方法:POST
  • 请求地址:/api/user/login
  • 请求头:Content-Type: application/json
  • 请求体:
    { "mobile": "13800138000", "password": "123456", "verify_code": "8888" }

3.2 编写基础测试用例

import requests def test_login_success(): url = "http://demo.tpshop.com/api/user/login" headers = {"Content-Type": "application/json"} payload = { "mobile": "13800138000", "password": "12345678", "verify_code": "8888" } response = requests.post(url, json=payload, headers=headers) # 断言响应状态码 assert response.status_code == 200 # 断言业务状态码 response_data = response.json() assert response_data["code"] == 200 # 断言返回token不为空 assert len(response_data["data"]["token"]) > 0 # 返回token供后续测试使用 return response_data["data"]["token"]

3.3 异常场景测试

完善的登录测试应覆盖:

  1. 参数异常测试

    • 手机号格式错误
    • 密码为空
    • 验证码错误
  2. 业务异常测试

    • 账号不存在
    • 密码错误
    • 账号被锁定
  3. 安全测试

    • 频繁登录限制
    • 密码加密传输
    • 错误信息模糊化
@pytest.mark.parametrize("mobile,password,verify_code,expected", [ ("123", "123456", "8888", "手机号格式错误"), # 错误手机号 ("13800138000", "", "8888", "密码不能为空"), # 空密码 ("13800138000", "123456", "9999", "验证码错误") # 错误验证码 ]) def test_login_failure(mobile, password, verify_code, expected): response = requests.post(login_url, json={ "mobile": mobile, "password": password, "verify_code": verify_code }) assert response.json()["msg"] == expected

4. 购物车业务链测试

4.1 购物车接口分析

典型购物车操作流程:

  1. 添加商品到购物车 →POST /api/cart/add
  2. 修改商品数量 →POST /api/cart/update
  3. 删除购物车商品 →POST /api/cart/delete
  4. 获取购物车列表 →GET /api/cart/list

4.2 保持会话状态

电商系统通常采用token鉴权,需要在请求头中携带:

headers = { "Content-Type": "application/json", "Authorization": f"Bearer {token}" # 使用登录返回的token }

4.3 购物车测试脚本示例

def test_cart_workflow(): # 先登录获取token token = test_login_success() # 添加商品到购物车 add_response = requests.post( "http://demo.tpshop.com/api/cart/add", json={"goods_id": 1, "goods_num": 2}, headers={"Authorization": f"Bearer {token}"} ) assert add_response.json()["code"] == 200 # 验证购物车列表 list_response = requests.get( "http://demo.tpshop.com/api/cart/list", headers={"Authorization": f"Bearer {token}"} ) cart_items = list_response.json()["data"] assert len(cart_items) > 0 assert cart_items[0]["goods_id"] == 1

5. 支付流程模拟测试

5.1 支付接口特殊性

支付接口测试需要特别注意:

  • 金额精度:避免浮点数计算问题
  • 幂等性:防止重复支付
  • 状态一致性:支付成功后的订单状态同步

5.2 测试支付流程

def test_payment_process(): # 1. 登录 token = test_login_success() # 2. 创建测试订单 order_response = requests.post( "http://demo.tpshop.com/api/order/create", json={"cart_ids": "1,2", "pay_code": "wechat"}, headers={"Authorization": f"Bearer {token}"} ) order_sn = order_response.json()["data"]["order_sn"] # 3. 模拟支付 pay_response = requests.post( "http://demo.tpshop.com/api/payment/pay", json={"order_sn": order_sn, "pay_amount": "0.01"}, headers={"Authorization": f"Bearer {token}"} ) assert pay_response.json()["code"] == 200 # 4. 验证订单状态 order_detail = requests.get( f"http://demo.tpshop.com/api/order/detail?order_sn={order_sn}", headers={"Authorization": f"Bearer {token}"} ) assert order_detail.json()["data"]["order_status"] == 1 # 已支付

5.3 支付异常测试

必须覆盖的异常场景:

  • 余额不足
  • 重复支付
  • 订单已取消
  • 网络超时

6. 测试进阶技巧

6.1 测试数据管理

推荐使用Faker库生成测试数据:

from faker import Faker fake = Faker() def generate_user(): return { "mobile": fake.phone_number(), "password": fake.password(length=10), "verify_code": "8888" }

6.2 测试报告生成

使用pytest-html生成美观的测试报告:

pytest test_api.py --html=report.html --self-contained-html

6.3 性能基准测试

def test_login_performance(): start_time = time.time() for _ in range(100): test_login_success() elapsed = time.time() - start_time assert elapsed < 10 # 100次登录应在10秒内完成
http://www.jsqmd.com/news/656885/

相关文章:

  • HOJ系统部署避坑指南:从Nacos配置到GoJudge判题机完整流程
  • 联想 / 拯救者 /moto 手机全机型通用|官方操作指导视频合集,新手老手都适用
  • K8s压力测试实战:从HPA动态扩缩容到资源优化
  • 终极指南:使用ROFL-Player免费播放英雄联盟回放文件的完整解决方案
  • 5分钟掌握:这款开源Chrome扩展如何帮你轻松下载网页视频?
  • 用ESP32和微信小程序DIY一个智能花房监控器(附OneNET平台配置全流程)
  • 10 分钟把 Hermes 接入 Telegram:Gateway 实战指南
  • Android Camera2录像实战:从MediaRecorder配置到视频保存到相册的完整避坑指南
  • DEDECMS与帝国CMS深度对比
  • 从Fluent残差图看网格质量:如何解读震荡、发散背后的网格‘凶手’
  • Llama Factory新手指南:如何选择模型、准备数据并训练你的第一个AI
  • FastAdmin后台配置分组实战:从添加分组到前端调用的完整流程(附代码)
  • 深度拆解RK3588显示子系统:从uboot报错到内核logo加载失败的全链路分析
  • rk3568 Android 11.0 从F2FS迁移到EXT4:优化数据擦除与掉电保护
  • Windows系统优化的终极神器:WinUtil完全指南
  • 想学斯坦福CS231A计算机视觉?先看看这份保姆级的Python与数学基础自查清单
  • MATLAB Simulink搭建电动汽车整车七自由度模型及模糊控制算法与轮胎模型研究
  • 3个核心功能揭秘:如何用AI智能移除图像中的任何对象
  • 为什么你需要永久保存微信聊天记录:数字记忆的终极守护方案
  • 实战演练:从双线程到三线程的并行累加重构
  • 长芯微LPS6288完全P2P替代TPS61288,是一款具有 15A 开关电流的全集成同步升压转换器
  • 别再傻傻用mutex了!C++11 std::atomic原子变量实战,性能提升看得见
  • 从电流采样到SVPWM:手把手解析PMSM有感FOC的闭环实现
  • Beego ORM避坑指南:从数据库设计到高效查询
  • 2026年主流安卓加固平台效果与价格横评:谁才是性价比之王?
  • 从原理到实践:MATLAB仿真线性调频信号的脉冲压缩全流程
  • 大模型在天文科研中的应用:天体数据分析
  • Edge浏览器一启动就自动打开2345?别急着重装系统,试试这个权限修改法
  • Vivado Tcl脚本自动化:如何一键解决DRC NSTD-1等常见I/O标准警告
  • Android基于WallpaperService打造实时摄像头动态壁纸