pytest-项目结构

项目结构

python 复制代码
api_test_project/
├── config/
│   └── config.py  # 配置文件,存储接口的基本信息,如 URL、请求头、认证信息等
├── data/
│   └── test_data.json  # 测试数据文件,存储接口的请求参数、预期结果等
├── tests/
│   ├── __init__.py
│   ├── test_single_api.py  # 单接口测试用例文件
├── utils/
│   ├── __init__.py
│   └── api_client.py  # 封装接口请求的工具类
├── report/
│   └── report.html  # 测试报告文件
├── requirements.txt  # 项目依赖文件
└── run_tests.py  # 运行测试用例的脚本

1. config目录------存放项目的配置文件

python 复制代码
# config.py
# 接口的基本 URL
BASE_URL = 'https://api.example.com'
# 公共请求头
HEADERS = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_token'
}

2. data目录------存放测试数据

python 复制代码
// test_data.json
{
    "get_user": {
        "request": {
            "method": "GET",
            "endpoint": "/users/1",
            "params": {}
        },
        "expected": {
            "status_code": 200,
            "data": {
                "id": 1,
                "name": "John Doe"
            }
        }
    }
}

3. test 目录------存放测试用例文件

python 复制代码
# tests/test_single_api.py
import pytest
import requests
from config.config import BASE_URL, HEADERS
import json

# 读取测试数据
with open('../data/test_data.json', 'r', encoding='utf-8') as f:
    TEST_DATA = json.load(f)

@pytest.mark.parametrize("test_case", TEST_DATA.values())
def test_single_api(test_case):
    request_info = test_case['request']
    expected = test_case['expected']

    method = request_info['method']
    endpoint = request_info['endpoint']
    params = request_info.get('params', {})

    url = BASE_URL + endpoint

    if method == 'GET':
        response = requests.get(url, headers=HEADERS, params=params)
    elif method == 'POST':
        response = requests.post(url, headers=HEADERS, json=params)
    # 可以根据需要添加更多的请求方法

    # 断言响应状态码
    assert response.status_code == expected['status_code']

    # 断言响应数据
    if 'data' in expected:
        assert response.json() == expected['data']

4. utils目录------存放工具类

python 复制代码
# utils/api_client.py
import requests
from config.config import BASE_URL, HEADERS

class APIClient:
    def __init__(self):
        self.base_url = BASE_URL
        self.headers = HEADERS

    def send_request(self, method, endpoint, params=None):
        url = self.base_url + endpoint
        if method == 'GET':
            response = requests.get(url, headers=self.headers, params=params)
        elif method == 'POST':
            response = requests.post(url, headers=self.headers, json=params)
        # 可以根据需要添加更多的请求方法
        return response

5. report目录------存放测试报告文件

运行测试用例后会生成 report.html 文件。

6. requirements.txt文件

该文件列出了项目的依赖库,例如:

pytest

requests

pytest-html

7. run_tests.py文件

该文件用于运行测试用例并生成测试报告:

python 复制代码
# run_tests.py
import pytest

if __name__ == "__main__":
    pytest.main(['-s', '-v', '--html=report/report.html', 'tests/'])
相关推荐
Qimooidea1 小时前
祁木 CAD Translator 全套功能 & 官网入口汇总
运维·服务器
梦想的颜色2 小时前
Docker 容器化本地部署 Claude Code 完整硬核教程|隔离沙盒 + 国产模型直连 + 持久化 Skill
运维·容器·ai 工程化·沙盒隔离·docker 本地部署·claude code硬核实战·国内国产模型接入
wbs_scy2 小时前
仿 muduo 高并发服务器项目:从 timerfd 到时间轮实现定时任务机制
linux·服务器·c++
小趴菜え2 小时前
升级Ubuntu20.04版本至Ubuntu22.04
linux·运维
渣渣盟2 小时前
Docker 运维常用命令手册(含扩容与实战)
运维·docker·容器
小羊Yveesss2 小时前
2026年外贸建站服务器怎么选?访问速度、稳定性和海外收录怎么判断
大数据·运维·服务器
Darkwanderor3 小时前
Linux进程优先级操作
linux·运维·c语言·c++
小五传输3 小时前
内外网文件交换系统产品推荐 解决隔离网络文件交换5类难题
大数据·运维·安全
AOwhisky3 小时前
Linux(CentOS)系统管理入门笔记(第一期)——从 Multics 到主流发行版
linux·运维·笔记·centos·云计算
从零开始的代码生活_3 小时前
Linux epoll 多路转接详解
linux·运维·网络·后端·tcp/ip·计算机网络·php