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()
相关推荐
一个处女座的测试3 天前
接口自动化测试实战:测试用例也能自动生成
测试用例
草履虫建模5 天前
Postman - API 调试与开发工具 - 标准使用流程
java·测试工具·spring·json·测试用例·postman·集成学习
小叶爱吃鱼5 天前
软件测试-测试用例,举例说明
功能测试·测试用例
测试者家园5 天前
基于DeepSeek和crewAI构建测试用例脚本生成器
人工智能·python·测试用例·智能体·智能化测试·crewai
lovingsoft15 天前
编写测试用例:提升软件测试质量与效率的关键
测试用例
天才测试猿16 天前
2025最新软件测试面试题总结【附文档】
自动化测试·软件测试·python·测试工具·面试·职场和发展·测试用例
天才测试猿17 天前
软件测试环境搭建及测试过程
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
Tom Boom18 天前
2. 如何理解互联网七层模型?深度解析。
网络·自动化测试·测试开发·测试用例·自动化测试框架开发
MrGaomq21 天前
软件测试用例(二)
linux·c语言·c++·经验分享·笔记·测试用例