test_cases测试用例层/test_2_upload

阶段 组件名称 组件来源 功能描述
环境配置 user_info 配置层 conf/setting.py 存储用户敏感信息(如账号密码),用于鉴权参数替换(如 ${username} → 实际值)。
data_dir 工具层 tools/handle_path.py 定义测试数据文件的存储路径(如 Excel 文件路径),统一管理测试资源路径依赖。
数据准备 handle_excel 工具层 tools/handle_excel.py 从 Excel 文件(如 test_data.xlsx)中读取测试用例数据,解析为字典列表供测试用例分发。
测试框架 unittest Python 标准库 提供测试用例基类、测试运行方法(如 setUpClass)及断言方法(如 assertEqual)。
ddt 第三方库(需安装) 实现数据驱动测试,通过 @data 装饰器自动分发参数化测试用例(如多组登录账号测试)。
参数处理 handle_replace 工具层 tools/handle_replace.py 动态替换请求参数中的占位符(如 ${token} → 全局变量值),并清洗非法字符(空格、换行符)。
请求发送 requests 第三方库(需安装) 发送 HTTP 请求(如 POST、GET),支持文件上传(MultipartEncoder)。
handle_requests 工具层 tools/handle_requests.py 封装 requests 方法,统一处理鉴权头注入(如自动添加 Authorization: bearer ${token})及请求异常处理。
响应处理 handle_response 工具层 tools/handle_response.py 处理接口响应数据: 1. 识别 JSON/文本格式并统一封装 2. 使用 jsonpath 动态提取字段(如 $..user_id)。
结果验证 handle_response 工具层 tools/handle_response.py 调用 unittest 的断言方法,对比接口实际响应与 Excel 预期值,标记测试失败或成功。
数据库断言 handle_assert_db 工具层 tools/handle_assert_db.py 执行 SQL 查询并验证数据库结果(如订单状态、用户余额),通过 assertEqual 实现数据层校验。
全局变量提取 handle_extract 工具层 tools/handle_extract.py 从接口响应中提取关键字段(如 tokenorder_id)存储为全局变量,供其他接口参数化使用(如支付依赖订单号)。
python 复制代码
"""
0、前置后置
1、参数替换:参数化
2、发送请求:鉴权的问题
3、响应结果的处理:接口返回类型不统一的问题
4、全局变量的提取:参数依赖问题
5、接口返回值的断言:校验接口层
6、数据库的断言:校验到数据层

"""
import requests
import unittest
from ddt import ddt,data

from tools.handle_assert_db import HandleAssertDb
from tools.handle_extract import HandleExtract
from tools.handle_requests import HandleRequests
from tools.handle_path import data_dir
from tools.handle_excel import HandleExcel
from tools.handle_replace import HandleReplace
from tools.handle_db import mysql
from conf.setting import assert_db_info

#获取测试用例数据
from tools.handle_reponse import HandleResponse

case_list = HandleExcel(file_name=data_dir,sheet_name="upload").get_excel_test_cases()

@ddt
class TestUpload(unittest.TestCase):

    @classmethod
    def setUpClass(cls) -> None:
        #请求头
        cls.headers = {"Content-Type":"application/json; charset=UTF-8","locale":"zh_cn"}
        cls.handle_replace = HandleReplace() #参数替换类的初始化
        cls.handle_response = HandleResponse()  # 响应结果封装
        cls.handle_requests = HandleRequests() # 请求封装
        cls.handle_extract = HandleExtract() # 全局变量提取
        cls.handle_assert_db = HandleAssertDb() # 数据库断言

    #后置处理
    @classmethod
    def tearDownClass(cls) -> None:
        mysql.db_close()

    # str 关键字不要用,excel参数要用双引号
    @data(*case_list) # [{},{}]
    def test_upload(self,case):
        # 1、参数替换,请求参数替换、删掉空格
        new_data = self.handle_replace.replace_data(data=case["data"])

        # 2、发送请求
        new_response = self.handle_requests.send_requests(method=case["method"],url=case["url"],data=new_data,is_upload=case["is_upload"])

        # 3、接口响应断言
        self.handle_response.assert_reponse(expected_data=case["expected_data"],response=new_response)

        # 4、提取全局变量
        self.handle_extract.handle_extract(extract_data=case["extract_data"],response=new_response)

        # 5、数据断言
        self.handle_assert_db.assert_db(assert_db=case["assert_db"],assert_db_info=assert_db_info)

if __name__ == '__main__':
    unittest.main()
相关推荐
littlegirll11 小时前
一个KADB测试实践
开发语言·数据库·测试用例·database
天才测试猿18 小时前
Selenium工作原理详解
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
测试杂货铺1 天前
Postman核心功能详解
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·postman
程序员杰哥2 天前
python+requests实现的接口自动化测试
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
互联网杂货铺2 天前
当了5年牛马,我开始划水了。。。
自动化测试·软件测试·python·测试工具·面试·职场和发展·测试用例
jz_ddk2 天前
实战:Windows环境下C语言串口通信与多线程编程
c语言·windows·单片机·测试用例
测试杂货铺2 天前
软件测试之测试覆盖率
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·测试覆盖率
天才测试猿3 天前
Python接口自动化浅析unittest单元测试原理
自动化测试·软件测试·python·测试工具·单元测试·测试用例·集成测试
Python测试之道4 天前
Deepseek API+Python测试用例一键生成与导出-V1.0.2【实现需求文档图片识别与用例生成自动化】
python·自动化·测试用例