仅Django项目CI流程失败,求助排查测试环节问题
Django CI 测试环节失败排查求助
概述
以下是我的GitHub Actions配置文件:
name: Django CI on: push: branches: [ "master" ] pull_request: branches: [ "master" ] jobs: build: runs-on: ubuntu-latest strategy: max-parallel: 1 matrix: python-version: [ 3.11 ] steps: - name: Checkout uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v3 with: python-version: ${{ matrix.python-version }} cache: pip - name: Set up and run tests env: DB_ENGINE: django.db.backends.mysql DB_NAME: portfolio_db DB_USER: root DB_PASSWORD: root run: | sudo systemctl start mysql mysql -u$DB_USER -p$DB_PASSWORD -e "CREATE DATABASE $DB_NAME;" python3 --version python3 -m venv venv source venv/bin/activate python -m pip install --upgrade pip python -m pip install -r requirements.txt python manage.py makemigrations register python manage.py migrate python manage.py makemigrations vietnam_research gmarker shopping linebot warehouse python manage.py migrate mysql -u$DB_USER -p$DB_PASSWORD -e "USE portfolio_db; SHOW TABLES;" export DJANGO_SECRET_KEY="$(base64 <<< "$RANDOM|TeStiNg|$RANDOM" | tr -d ' ')" python manage.py test
问题详情
- CI流程迁移步骤执行正常,但测试环节直接失败
- 检测到的测试用例数量和本地/VPS环境存在差异
- 项目在VPS服务器上运行完全正常
错误截图:
排查建议
1. 输出测试详细日志
修改CI中的测试命令,增加 verbosity 参数获取具体错误信息:
python manage.py test --verbosity 2
这会显示每个测试用例的执行过程,定位具体失败的测试项及原因。
2. 对齐环境依赖版本
CI环境可能安装了最新兼容版本的依赖,和VPS的固定版本存在差异。在CI步骤中添加依赖版本输出:
pip freeze
对比VPS上的pip freeze结果,将requirements.txt中的依赖版本锁定为VPS使用的版本。
3. 修复SECRET_KEY生成逻辑
当前随机生成的SECRET_KEY可能存在格式问题,替换为固定的测试密钥(仅用于CI):
export DJANGO_SECRET_KEY="test-ci-secret-key-123456789"
4. 确认测试用例发现规则
测试数量差异可能是CI环境未正确识别测试文件:
- 检查所有含测试的app是否已加入
settings.py的INSTALLED_APPS - 测试文件需命名为
tests.py或放在tests目录下(遵循Django默认发现规则) - 尝试指定app运行测试,排查是否是特定模块的测试未被发现:
python manage.py test register vietnam_research gmarker shopping linebot warehouse
5. 补充系统依赖
Ubuntu-latest镜像可能缺少MySQL相关系统库,添加安装步骤:
sudo apt-get update && sudo apt-get install -y libmysqlclient-dev
内容的提问来源于stack exchange,提问作者yoshitaka okada
相关产品推荐
相关产品推荐

