Python 全栈自动化测试框架(Web UI + API + DB)

本项目是一个功能强大的全栈自动化测试框架,整合了 Web UI 测试(Selenium)API 接口测试(Requests + Pytest)数据库校验(SQLAlchemy),支持端到端(E2E)测试流程,适用于复杂业务系统的回归测试、数据一致性校验和接口稳定性验证。


功能扩展亮点

  • Web UI 自动化:支持多浏览器、断言封装、失败截图、并发执行
  • API 接口测试:支持 RESTful API、请求/响应断言、JSON Schema 校验
  • 数据库校验:支持 MySQL/PostgreSQL/SQLite,自动校验接口与数据库数据一致性
  • 测试数据管理:YAML/JSON 驱动,支持动态数据注入
  • 报告集成:Allure 报告支持,展示 UI 截图、API 响应、数据库校验结果
  • CI/CD 友好:支持 Jenkins/GitHub Actions 集成,支持环境变量注入

项目结构

fullstack-automation/
├── config/
│   ├── config.yaml              # 环境配置(数据库、API、UI)
│   └── pytest.ini               # Pytest 配置
├── data/
│   ├── logindata.yaml           # UI 测试数据
│   ├── userdata.json            # API 测试数据
│   └── dbtestdata.csv           # 数据库测试数据
├── pages/
│   ├── basepage.py              # UI 基类封装
│   ├── loginpage.py            # 登录页
│   └── dashboardpage.py         # 仪表盘页
├── api/
│   ├── baseapi.py               # API 基类封装
│   ├── userapi.py              # 用户相关接口
│   └── authapi.py              # 认证相关接口
├── db/
│   ├── dbconnector.py          # 数据库连接工具
│   └── dbvalidator.py          # 数据库校验逻辑
├── tests/
│   ├── ui/
│   │   ├── test_login.py       # UI 登录测试
│   │   └── test_dashboard.py   # UI 仪表盘测试
│   ├── api/
│   │   ├── test_user_api.py    # 用户接口测试
│   │   └── test_auth_api.py    # 认证接口测试
│   └── integration/
│       └── test_user_flow.py   # 端到端测试流程
├── utils/
│   ├── logger.py               # 日志工具
│   ├── screenshot.py           # 截图工具
│   └── fileutils.py            # 文件工具
└── reports/
    └── allure-results/         # Allure 测试结果目录

示例代码片段

1. API 测试示例(api/userapi.py

import requests
from api.baseapi import BaseAPI
class UserAPI(BaseAPI):
    def __init__(self):
        super().__init__()
        self.base_url = self.config["api"]["base_url"]
    def get_user(self, user_id):
        url = f"{self.base_url}/users/{user_id}"
        response = requests.get(url, headers=self.headers)
        return response
    def create_user(self, payload):
        url = f"{self.base_url}/users"
        response = requests.post(url, json=payload, headers=self.headers)
        return response

2. 数据库校验示例(db/dbvalidator.py

from sqlalchemy import create_engine, text
from db.dbconnector import DBConnector
class DBValidator(DBConnector):
    def __init__(self):
        super().__init__()
    def get_user_by_id(self, user_id):
        query = text("SELECT * FROM users WHERE id = :id")
        result = self.execute(query, {"id": user_id})
        return result.fetchone()
    def validate_user_exists(self, user_id):
        user = self.get_user_by_id(user_id)
        assert user is not None, f"User {user_id} not found in DB"

3. 端到端集成测试(tests/integration/test_user_flow.py

import pytest
from api.userapi import UserAPI
from db.dbvalidator import DBValidator
from pages.loginpage import LoginPage
from pages.dashboardpage import DashboardPage
def test_user_creation_flow(driver):
    # Step 1: Create user via API
    user_api = UserAPI()
    payload = {"name": "Test User", "email": "test@example.com"}
    response = user_api.create_user(payload)
    assert response.status_code == 201
    user_id = response.json()["id"]
    # Step 2: Validate user in DB
    db_validator = DBValidator()
    db_validator.validate_user_exists(user_id)
    # Step 3: Login via UI and check user appears
    login_page = LoginPage(driver)
    login_page.open()
    login_page.login("admin", "password")
    dashboard = DashboardPage(driver)
    assert dashboard.is_user_present(user_id)
    # Step 4: Clean up
    user_api.delete_user(user_id)

执行测试

执行全部测试(UI + API + DB)

pytest tests/ -v -s --alluredir=./reports/allure-results

只执行 API 测试

pytest tests/api/ -v

只执行数据库校验测试

pytest tests/db/ -v

生成 Allure 报告

allure serve reports/allure-results

Allure 报告增强内容

  • API 请求/响应详情
  • 数据库查询语句与结果
  • UI 操作截图
  • 断言结果与日志
  • 环境配置与执行时间

CI/CD 集成示例(GitHub Actions)

name: Fullstack Automation Test
on: [push]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set up Python
        uses: actions/setup-python@v2
        with:
          python-version: '3.10'
      - name: Install dependencies
        run: pip install -r requirements.txt
      - name: Run tests
        run: pytest tests/ --alluredir=./reports/allure-results
      - name: Upload Allure results
        uses: actions/upload-artifact@v2
        with:
          name: allure-results
          path: reports/allure-results

下一步扩展建议

  • 性能测试集成:使用 Locust 进行负载测试
  • Mock 服务:使用 MockServer 或 responses 库模拟外部依赖
  • 测试数据工厂:使用 Factory Boy 生成测试数据
  • 多环境配置:支持通过命令行切换测试环境
  • 测试数据清理机制:自动清理测试数据,避免污染环境
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐