基于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:

************

 

四、执行结果(报告示例)

 

posted @   莲(LIT)  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示