从零开始搭建接口测试环境:Flask + SQLAlchemy + PyMySQL(这个有项目地址)

本文介绍如何搭建一个完整的接口测试环境,包括后端服务、数据库配置和自动化测试框架。这个环境可以用于接口测试学习、自动化测试实践和性能测试。

项目结构

.
├── app.py              # 待测系统(Flask应用)
├── requirements.txt    # Python依赖
├── test_plan.jmx      # JMeter测试计划
├── start.bat          # Windows启动脚本
├── start.sh           # Linux/Mac启动脚本
└── README.md          # 项目文档

项目背景

在软件测试领域,接口测试是一个非常重要的环节。为了更好地学习和实践接口测试,我决定搭建一个完整的测试环境。这个环境需要满足以下要求:

  1. 提供标准的 RESTful API
  2. 支持数据库操作
  3. 便于进行自动化测试
  4. 适合性能测试实践

技术选型

经过调研,我选择了以下技术栈:

  • 后端框架:Flask 2.0.1

    • 轻量级、易学易用
    • 适合快速开发 RESTful API
    • 有丰富的扩展支持
  • 数据库 ORM:SQLAlchemy 1.4.23

    • 强大的 ORM 功能
    • 支持多种数据库
    • 与 Flask 完美集成
  • 数据库:MySQL + PyMySQL

    • 使用广泛的关系型数据库
    • PyMySQL 提供 Python 驱动支持
  • 测试框架:pytest 6.2.5

    • 功能强大的测试框架
    • 支持参数化测试
    • 丰富的插件生态

环境搭建

1. 创建项目目录

首先创建一个新的项目目录,并设置虚拟环境:

mkdir interface_test_env
cd interface_test_env
python -m venv venv

2. 安装依赖

创建 requirements.txt 文件,添加以下依赖:

flask==2.0.1
flask-sqlalchemy==2.5.1
pytest==6.2.5
pymysql==1.1.1
werkzeug==2.0.1
sqlalchemy==1.4.23

安装依赖:

pip install -r requirements.txt

3. 创建启动脚本

为了方便环境启动,我创建了一个 start.bat 脚本:

@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion

echo ===================================
echo    用户管理系统接口测试环境启动器
echo ===================================
echo.

:: 检查Python是否安装
python --version >nul 2>&1
if errorlevel 1 (
    echo [错误] 未检测到Python,请先安装Python 3.7+
    pause
    exit /b 1
)

:: 检查端口占用
echo [信息] 正在检查端口占用情况...
netstat -ano | findstr ":5000" >nul
if not errorlevel 1 (
    echo [错误] 端口5000已被占用,请先关闭占用该端口的程序
    echo [信息] 可以使用以下命令查看占用端口的进程:
    echo netstat -ano | findstr ":5000"
    pause
    exit /b 1
)

:: 检查虚拟环境
if not exist "venv" (
    echo [信息] 正在创建虚拟环境...
    python -m venv venv
    if errorlevel 1 (
        echo [错误] 创建虚拟环境失败
        pause
        exit /b 1
    )
)

:: 激活虚拟环境
echo [信息] 正在激活虚拟环境...
if exist "venv\Scripts\activate.bat" (
    call "venv\Scripts\activate.bat"
) else (
    echo [错误] 找不到虚拟环境激活脚本
    pause
    exit /b 1
)

:: 更新pip
echo [信息] 正在更新pip...
python -m pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple

:: 安装依赖
echo [信息] 正在检查并安装依赖...
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
if errorlevel 1 (
    echo [错误] 安装依赖失败,尝试使用备用镜像源...
    pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
    if errorlevel 1 (
        echo [错误] 安装依赖失败,请检查网络连接或手动安装依赖
        pause
        exit /b 1
    )
)

:: 启动Flask应用
echo [信息] 正在启动待测系统...
start "用户管理系统" cmd /k "set PYTHONIOENCODING=utf-8 && set FLASK_ENV=development && set FLASK_DEBUG=1 && python app.py"

:: 等待Flask应用启动
echo [信息] 等待服务启动...
timeout /t 5 /nobreak >nul

:: 检查服务是否成功启动
powershell -Command "try { $response = Invoke-WebRequest -Uri 'http://localhost:5000/api/users' -UseBasicParsing; exit 0 } catch { exit 1 }"
if errorlevel 1 (
    echo [错误] Flask服务启动失败,请检查:
    echo 1. 是否有其他程序占用了5000端口
    echo 2. 防火墙是否阻止了程序访问网络
    echo 3. 查看命令行窗口中的错误信息
    echo.
    echo [信息] 请查看新打开的命令行窗口中的错误信息
    pause
    exit /b 1
)

echo.
echo ===================================
echo [成功] Flask服务已启动!
echo [信息] 请在浏览器访问 http://localhost:5000/api/users
echo [信息] 或使用JMeter/Postman测试接口
echo ===================================
echo.
echo 按任意键退出...
pause >nul

4. 创建数据库模型

app.py 中定义用户模型:

from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:password@localhost/user_management'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    created_at = db.Column(db.DateTime, default=datetime.utcnow)

    def to_dict(self):
        return {
            'id': self.id,
            'username': self.username,
            'email': self.email,
            'created_at': self.created_at.isoformat()
        }

5. 实现 API 接口

app.py 中添加 RESTful API 接口:

@app.route('/api/users', methods=['GET'])
def get_users():
    users = User.query.all()
    return jsonify([user.to_dict() for user in users])

@app.route('/api/users', methods=['POST'])
def create_user():
    data = request.get_json()
    user = User(
        username=data['username'],
        email=data['email']
    )
    db.session.add(user)
    db.session.commit()
    return jsonify(user.to_dict()), 201

@app.route('/api/users/<int:user_id>', methods=['GET'])
def get_user(user_id):
    user = User.query.get_or_404(user_id)
    return jsonify(user.to_dict())

@app.route('/api/users/<int:user_id>', methods=['PUT'])
def update_user(user_id):
    user = User.query.get_or_404(user_id)
    data = request.get_json()
    user.username = data.get('username', user.username)
    user.email = data.get('email', user.email)
    db.session.commit()
    return jsonify(user.to_dict())

@app.route('/api/users/<int:user_id>', methods=['DELETE'])
def delete_user(user_id):
    user = User.query.get_or_404(user_id)
    db.session.delete(user)
    db.session.commit()
    return '', 204

if __name__ == '__main__':
    with app.app_context():
        db.create_all()
    app.run(debug=True)

使用说明

1. 启动环境

双击运行 start.bat,脚本会自动:

  • 检查并创建虚拟环境
  • 安装所需依赖
  • 启动 Flask 服务

2. 测试接口

可以使用以下工具测试接口:

  1. 浏览器:访问 http://localhost:5000/api/users
  2. Postman:导入接口集合进行测试
  3. JMeter:创建测试计划进行性能测试

3. 接口说明

系统提供以下 RESTful API:

  • GET /api/users:获取所有用户
  • POST /api/users:创建新用户
  • GET /api/users/<id>:获取指定用户
  • PUT /api/users/<id>:更新指定用户
  • DELETE /api/users/<id>:删除指定用户

注意事项

  1. 确保 MySQL 服务已启动
  2. 修改数据库连接字符串中的用户名和密码
  3. 首次运行时会自动创建数据库表
  4. 建议使用虚拟环境管理依赖

总结

通过这个项目,我们搭建了一个完整的接口测试环境,它具备:

  1. 标准的 RESTful API
  2. 数据库支持
  3. 自动化测试能力
  4. 性能测试基础

这个环境可以用于:

  • 接口测试学习
  • 自动化测试实践
  • 性能测试练习
  • API 开发学习

后续计划

  1. 添加用户认证
  2. 实现更多业务接口
  3. 添加自动化测试用例
  4. 集成 CI/CD 流程

参考资料

测试结果展示

1. 接口功能测试

1.1 浏览器访问测试
  1. 获取用户列表接口测试
    ![获取用户列表](https://img-blog.csdnimg.cn/direct/xxx.png在这里插入图片描述

图1:通过浏览器访问 GET /api/users 接口,成功获取用户列表

  1. 创建用户接口测试
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

图2:使用 Postman 测试 POST /api/users 接口,成功创建新用户

2. JMeter 性能测试

2.1 用户注册性能测试
  1. 测试计划配置
    JMeter 测试计划配置,包含线程组、HTTP请求等组件

图3:JMeter 测试计划配置,包含线程组、HTTP请求等组件

  1. 测试结果概览
    在这里插入图片描述

图4:性能测试结果概览,展示响应时间、吞吐量等指标

3. 测试结果分析

通过以上测试,我们可以得出以下结论:

  1. 功能测试结果:

    • 所有接口均能正常响应
    • 数据增删改查操作正确
    • 错误处理机制完善
  2. 性能测试结果:

    • 平均响应时间: 76 ms
    • 吞吐量: 13.0/sec
    • 异常%: 66.67%
      异常率比较高,这表明在测试过程中有大约三分之二的注册请求失败了。这可能是因为存在重复用户名或重复邮箱的情况,这与测试计划中的“重复用户名测试”和“重复邮箱测试”的100%异常率相符。正常注册测试的异常率为0%,平均响应时间是219ms。

4.项目地址:https://wwhy.lanzouq.com/iFVx02wzr73c


作者:李清波
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值