本文介绍如何搭建一个完整的接口测试环境,包括后端服务、数据库配置和自动化测试框架。这个环境可以用于接口测试学习、自动化测试实践和性能测试。
项目结构
.
├── app.py # 待测系统(Flask应用)
├── requirements.txt # Python依赖
├── test_plan.jmx # JMeter测试计划
├── start.bat # Windows启动脚本
├── start.sh # Linux/Mac启动脚本
└── README.md # 项目文档
项目背景
在软件测试领域,接口测试是一个非常重要的环节。为了更好地学习和实践接口测试,我决定搭建一个完整的测试环境。这个环境需要满足以下要求:
- 提供标准的 RESTful API
- 支持数据库操作
- 便于进行自动化测试
- 适合性能测试实践
技术选型
经过调研,我选择了以下技术栈:
-
后端框架: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. 测试接口
可以使用以下工具测试接口:
- 浏览器:访问 http://localhost:5000/api/users
- Postman:导入接口集合进行测试
- JMeter:创建测试计划进行性能测试
3. 接口说明
系统提供以下 RESTful API:
GET /api/users:获取所有用户POST /api/users:创建新用户GET /api/users/<id>:获取指定用户PUT /api/users/<id>:更新指定用户DELETE /api/users/<id>:删除指定用户
注意事项
- 确保 MySQL 服务已启动
- 修改数据库连接字符串中的用户名和密码
- 首次运行时会自动创建数据库表
- 建议使用虚拟环境管理依赖
总结
通过这个项目,我们搭建了一个完整的接口测试环境,它具备:
- 标准的 RESTful API
- 数据库支持
- 自动化测试能力
- 性能测试基础
这个环境可以用于:
- 接口测试学习
- 自动化测试实践
- 性能测试练习
- API 开发学习
后续计划
- 添加用户认证
- 实现更多业务接口
- 添加自动化测试用例
- 集成 CI/CD 流程
参考资料
测试结果展示
1. 接口功能测试
1.1 浏览器访问测试
- 获取用户列表接口测试

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



图2:使用 Postman 测试 POST /api/users 接口,成功创建新用户
2. JMeter 性能测试
2.1 用户注册性能测试
- 测试计划配置

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

图4:性能测试结果概览,展示响应时间、吞吐量等指标
3. 测试结果分析
通过以上测试,我们可以得出以下结论:
-
功能测试结果:
- 所有接口均能正常响应
- 数据增删改查操作正确
- 错误处理机制完善
-
性能测试结果:
- 平均响应时间: 76 ms
- 吞吐量: 13.0/sec
- 异常%: 66.67%
异常率比较高,这表明在测试过程中有大约三分之二的注册请求失败了。这可能是因为存在重复用户名或重复邮箱的情况,这与测试计划中的“重复用户名测试”和“重复邮箱测试”的100%异常率相符。正常注册测试的异常率为0%,平均响应时间是219ms。
4.项目地址:https://wwhy.lanzouq.com/iFVx02wzr73c
作者:李清波
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
303

被折叠的 条评论
为什么被折叠?



