如何在Github Actions中为Django+React项目运行Selenium webdriver测试
可直接落地的规避方案
方案1:后台挂载运行开发服务+就绪检测
这是改动最小的方案,适配你本地的现有运行逻辑:
- 给阻塞式启动命令末尾加
&符号,让进程在CI环境的后台运行,不会卡住后续步骤 - 新增服务就绪检测逻辑,等前后端端口可正常访问后再执行Selenium测试,避免服务未启动完成就跑测试的报错问题
以下是可用的GitHub Actions工作流片段参考:
steps: # 省略前面的代码拉取、依赖安装、数据库初始化等步骤 - name: 安装端口检测工具wait-on run: npm install -g wait-on - name: 启动Django后端服务 run: python manage.py runserver 0.0.0.0:8000 & - name: 启动React前端服务 run: npm start & - name: 等待前后端服务完全启动 run: wait-on http://localhost:8000 http://localhost:3000 - name: 执行Selenium测试 run: python -m pytest # 替换为你实际的测试执行命令
方案2:使用生产级服务运行(更稳定)
开发服务器(python manage.py runserver、npm start默认的开发模式)本身是为本地调试设计,在CI环境用生产模式运行稳定性更高,也能规避很多开发环境特有的问题:
- React端先执行
npm run build构建静态资源,再用serve等轻量静态服务挂载 - Django端用gunicorn等生产级WSGI服务器替代runserver
对应命令参考:
steps: # 省略前置步骤 - name: 安装依赖工具 run: | npm install -g wait-on serve pip install gunicorn - name: 构建React静态资源 run: npm run build - name: 启动Django生产服务 run: gunicorn 你的项目名.wsgi:application --bind 0.0.0.0:8000 & - name: 启动React静态资源服务 run: serve -s build -l 3000 & - name: 等待服务就绪 run: wait-on http://localhost:8000 http://localhost:3000 - name: 执行Selenium测试 run: python -m pytest
注意事项
- Selenium测试配置要指定无头模式运行,CI环境默认没有图形界面,不开启无头模式会直接报错
- 前后端服务启动时要绑定
0.0.0.0地址,不要只绑定127.0.0.1,避免CI环境的网络访问限制导致服务不通 - GitHub Actions Job运行结束后后台进程会自动销毁,不需要额外手动终止进程
内容的提问来源于stack exchange,提问作者The S.
相关产品推荐
相关产品推荐

