Python 全栈自动化测试框架(Web UI + API + DB)
·
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 生成测试数据
- 多环境配置:支持通过命令行切换测试环境
- 测试数据清理机制:自动清理测试数据,避免污染环境
更多推荐


所有评论(0)