基于Python + Requests + Unitest + HTMLTestRunner_PY3的接口自动化测试框架
前言:
2025开年第一篇((#^.^#))。
此框架是基于Python + Requests + Unitest + HTMLTestRunner_PY3接口自动化测试框架,测试接口和测试数据的维护都是通过代码维护的。
对于接口的请求URL、请求方式、请求头、请求体以及响应结果的断言都需要自己去做对应的维护。
一、执行逻辑介绍
获取测试Token → 授权测试接口 → 执行测试用例 → 输出测试报告
二、代码目录结构介绍
- case:测试用例
- config:配置文件(Token、Requests二封)
- data:接口数据(请求URL、请求方式、请求头、请求体、断言、日志)
- debug:调试数据
- framework:三方工具
- report:测试报告
- run:运行主文件
三、代码介绍
config(config.py):
# -*- coding:UTF-8 -*- import requests import os import logging.handlers BASE_URL = 'http://127.0.0.1' LOGIN_URL = '/lit/login' LOGIN_USER = { "username": "lit", "password": "lit", "token": "wntoken" } # requests class RequestHadle: def __init__(self): # 创建session对象 self.session = requests.session() def reques(self, url=None, method=None, params=None, data=None, json=None, verify=None, **kwargs): res = self.session.request(url=url, method=method, params=params, data=data, json=json, verify=verify, **kwargs) try: return res except ValueError as err: return "格式不正确{}".format(err) # 获取Token class TokenMes(object): def token(self): headers = { "Host": "", "Authorization": "", "User-Agent": "", "Accept": "application/json, text/plain, */*", "Content-Type": "application/json", "Origin": "", "Referer": "", "Accept-Encoding": "gzip, deflate", "Accept-Language": "zh-CN,zh;q=0.9", "Cookie": "", "Connection": "keep-alive", "Content-Length": "22" } method = "POST" data = { "username": LOGIN_USER["username"], "password": LOGIN_USER["password"], "token": LOGIN_USER["token"] } # requests.packages.urllib3.disable_warnings() # 移除警告 HTTPS result = RequestHadle().reques(url=BASE_URL + LOGIN_URL, method=method, headers=headers, json=data, verify=False) result_json = result.json() if result.status_code == 200: # 提取Token auth_token = result_json["res"]["token"] print("Token获取成功:{0}".format(auth_token)) return auth_token else: print("Token获取失败") # if __name__ == '__main__': # TokenMes().token()
data(product_data.py):
# -*- coding:UTF-8 -*- from config.token_cf import TokenMes, BASE_URL from config.token_cf import RequestHadle AuthToken = TokenMes().token # 产品管理 class Product_Management(object): # 新增产品 def add_product(self): add_url = BASE_URL + "/product" method = "POST" headers = { "Host": "", "Authorization": AuthToken, # 授权 "User-Agent": "", "Accept": "application/json, text/plain, */*", "Content-Type": "application/json", "Origin": "", "Referer": "", "Accept-Encoding": "gzip, deflate", "Accept-Language": "zh-CN,zh;q=0.9", "Cookie": "", "Content-Length": "22" } body = { "product_name": "API测试新增产品", "description": "产品描述字段", "status": 1, } try: add_re = RequestHadle().reques(url=add_url, method=method, headers=headers, json=body, verify=False) add_json = add_re.json() except: print("新增产品失败") else: assert add_json['code'] == '200', f"预期 'code' 的值为 '200',实际 'code' 的值为 '{add_json.get('code', '不存在')}'" print("新增产品成功:{0}".format(add_json))
case(test_product.py):
# -*- coding:UTF-8 -*- import unittest from data.product_data import Product_Management class Prod_List(unittest.TestCase): """产品列表""" def test_a_AddProduct(self): """新增产品""" Product_Management().add_product()
run.py:
************
四、执行结果(报告示例)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?