Python结合Requests与Unittest的接口自动化测试实战

木白
木白
发布时间:2026-10-14 | 5人浏览过
原创

本文详解如何利用Python的Requests库进行接口数据交互,并结合Unittest框架搭建自动化测试体系。通过获取Session、构造请求头、断言响应状态等具体代码示例,展示从单接口测试到多接口自动化执行的完整流程,包含错误处理与邮件报告发送机制,适用于企业级接口测试场景。

Python接口自动化测试概述

本文通过具体实例,解析如何使用Python配合Requests库及Unittest框架实现接口自动化测试,旨在为读者提供可参考的实践方案。

首先介绍Python中Requests模块的基本用法。

关于Python Requests的快速入门指南,可参考官方文档:http://cn.python-requests.org/zh_CN/latest/

具备Python基础知识的开发者应当能够轻松理解相关内容。

Requests接口自动化测试实践

接下来深入探讨基于Requests的接口自动化测试方法。

基础接口测试Demo

2.1 如何利用这一工具进行接口测试,具体演示如下:


# -*- coding:utf-8 -*
import requests
def test():
  url = "http://120.24.239.**:9080/user/app/get_sys_time.do" #测试的接口url
  headers = {'content-type': 'application/json'}
  r = requests.get(url=url, headers=headers)
  return r.json()
if __name__ == "__main__":
  test()

在接口测试过程中,需对传入参数执行边界值测试、错误推导测试及等价类测试等多种策略。出于安全考量,部分请求需在URL中携带Session信息。此时,可直接提取登录接口返回的Session值,并将其置于POST请求的Header中,例如:


# -*- coding:utf-8 -*
import requests
def test():
  url = "http://120.24.239.**:9080/user/app/login.do" #登录的接口
  headers = {'content-type': 'application/json'}
  r = requests.get(url=url, headers=headers)
  return r.json()
def test_have_session(url):
  cookie = "JSESSIONID=" + "".join(test().get("JSESSIONID")) #利用登录接口获取JSESSIONID
  headers = {'content-type': 'application/xml', 'Cookie': cookie}
  r = requests.post(url, headers=headers)
  return r.json()
if __name__ == "__main__":
  url = ""  #测试的接口url
  test_have_session(url)

简化版接口自动化测试框架

2.2 完成所有接口的测试后,需编写接口自动化脚本。若每次接口修改都需手动回归测试,尤其在产品上线阶段需全量测试所有接口时,效率极低。引入接口自动化可显著提升便利性,以下是一个简化版的接口自动化测试Demo:


# -*- coding:utf-8 -*
# 测试报告邮件内容
text = ""
# 用例统计
num_success = 0
num_fail = 0
# 测试通过
def test_success():
  global num_success
  num_success += 1
  print_out(u"测试结果:通过\n")
# 测试不通过
def test_fail(txt):
  global num_fail
  num_fail += 1
  print_out(u"测试结果:不通过 \n错误信息: " + txt + "\n")
# 邮件内容写入 & 客户端输出
def print_out(message):
  global text
  text += "\n" + message
  print message
# 返回值判断
def test_result(result, code):
  if result.get("status") == code:
    test_success()
    return "pass"
  else:
    txt = u"期望返回值:" + str(code) + u" 实际返回值:" + str(result.get("status"))
    test_fail(txt)
    return "fail"


def test_interface():
  # 初始化测试起始时间
  start_time = datetime.datetime.now()
  # 构造测试集
  suite = unittest.TestSuite()
  suite.addTest(MyTestSuite("test_login"))  # 登陆
  suite.addTest(MyTestSuite("test_employees")) # 员工管理
  suite.addTest(MyTestSuite("test_department")) # 部门管理
  suite.addTest(MyTestSuite("test_work_sys")) # 工作日历管理
  suite.addTest(MyTestSuite("test_holiday")) # 节假日管理
  suite.addTest(MyTestSuite("test_queryAp")) # 智能终端管理
  suite.addTest(MyTestSuite("test_edit_info")) # 企业信息管理 & 个人信息
  suite.addTest(MyTestSuite("test_data")) # 每日数据报表 & 月度数据报表
  # 执行测试
  runner = unittest.TextTestRunner()
  runner.run(suite)
  # 测试执行时间计算
  end_time = datetime.datetime.now()
  total_use_case = u"执行用例总数:" + str(num_success + num_fail) + \
           u"\t通过数:" + str(num_success) + \
           u"\t不通过数:" + str(num_fail)
  total_time = u"\t总共耗时:" + str((end_time-start_time).seconds) + u"秒"
  print_out(total_use_case + total_time)
  # 发生邮件测试报告
  Send_email.send_email(text)

示例中省略了部分针对具体项目测试接口的判断逻辑,整体框架结构如下。在接口数量庞大的项目中,建议按模块分文件编写,以便后期维护测试用例。以我司产品为例,共计69个接口,已分类管理。若需在服务器端运行测试脚本,需添加try...except异常捕获机制以输出错误信息,并可利用smtplib模块将错误报告发送至指定邮箱。

如需了解更多Python相关知识,可查阅本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》。

希望本文所述内容能对大家的Python程序设计工作有所帮助。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表