You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Docker部署的Django应用通过Jenkins运行Selenium测试

Django + Jenkins + Docker 环境下Selenium集成测试最佳实践

核心问题解决方案

1. 解决Selenium测试依赖服务启动的问题

Selenium集成测试需要整套应用环境运行才能执行,因此需将测试环节从Docker镜像构建阶段剥离,调整到镜像构建完成后、推送至私有仓库前执行:

  • 借助docker-compose临时编排整套测试环境,包含Django应用容器、依赖的数据库/缓存中间件容器、Selenium独立浏览器容器(如selenium/standalone-chrome)
  • 增加服务健康检查逻辑,用curl轮询Django服务端口,确认服务正常启动后再执行测试

2. 容器内执行测试的最优方案

不建议在Dockerfile内部调用测试脚本,原因如下:

  • Docker build阶段无法启动依赖服务,不满足Selenium测试的运行前提
  • 测试逻辑和生产镜像耦合会增大镜像体积,且测试失败会直接中断镜像构建,无法做后续的结果判定
    推荐方案:
  • 测试命令通过docker exec执行:应用容器启动并通过健康检查后,执行docker exec <Django容器名称> 测试命令触发Selenium测试,测试报告输出到容器内固定目录(如/app/test_reports/)
  • 如果不想生产镜像携带pytest、coverage等测试依赖,可以基于生产镜像额外构建一层测试专用镜像,安装完测试依赖后再执行测试,生产镜像保持纯净

3. Jenkins获取容器内测试报告的方案

根据测试执行环境的不同,对应两种方案:

  • 测试在Jenkins构建节点执行:测试完成后执行docker cp <Django容器名称>:/app/test_reports/ ./,将容器内的报告直接拷贝到Jenkins当前工作目录即可
  • 测试在远程开发服务器执行:测试完成后执行scp <远程服务器账号>@<远程服务器IP>:/远程服务器上的报告路径/* ./,将报告同步回Jenkins工作目录
    Jenkins可直接读取工作目录下的Cobertura、Junit格式报告做结果解析和展示。

调整后的部署流程

  • Jenkins从GIT拉取代码
  • 构建Django生产镜像
  • 临时启动测试环境:通过docker-compose拉起Django应用、依赖中间件、Selenium浏览器容器,等待服务健康检查通过
  • 执行Selenium测试,将报告从容器内同步到Jenkins工作目录
  • Jenkins解析测试报告,判断测试结果:
    • 测试失败:直接终止流程,清理临时测试环境,镜像不推送至私有仓库
    • 测试通过:清理临时测试环境,将生产镜像推送至私有Docker镜像仓库
  • 登录远程开发服务器,拉取对应版本镜像
  • 远程服务器运行镜像启动服务

补充优化建议

  • 固定测试报告的输出路径,避免同步/拷贝时出现文件找不到的问题
  • 增加Jenkins后置清理步骤,无论测试成功失败都删除临时容器、网络、存储卷,避免节点资源被占用
  • 测试用例和应用代码一同打包到镜像中,保证测试用例版本和应用版本完全一致

内容的提问来源于stack exchange,提问作者Marko Zadravec

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 10:36:06