求可生成测试报告的Jenkins Pipeline脚本:Docker运行SeleniumBase测试
Jenkins Pipeline 执行SeleniumBase测试并生成报告(Docker环境)
针对本地Docker可运行但Jenkins Pipeline失败的问题,以下提供两种可生成测试报告的Pipeline脚本方案,分别适配官方镜像和自定义镜像场景:
方案1:使用SeleniumBase官方DockerHub镜像
无需自行构建镜像,直接使用官方预构建环境,快速验证测试流程:
pipeline { agent any stages { stage('拉取测试代码') { steps { git url: 'https://gitlab.com/username/repo.git', branch: 'main' } } stage('Docker容器执行测试') { steps { script { // 拉取官方最新版SeleniumBase镜像 def sbaseImage = docker.image('seleniumbase/seleniumbase:latest') // 映射Jenkins工作区到容器,分配共享内存避免Chrome无头模式崩溃 sbaseImage.inside("-v ${env.WORKSPACE}:/test --shm-size=2g") { // 切换到测试代码目录(根据项目结构调整路径) sh 'cd /test' // 执行测试命令,报告直接生成到Jenkins工作区的reports目录 sh '''pytest \ --var1=your_username \ --var2=your_password \ --dashboard \ --html=/test/reports/report.html \ --browser=chrome \ --headless \ --no-header''' } } } } stage('归档测试报告') { steps { // 将报告归档到Jenkins,构建完成后可直接查看 archiveArtifacts artifacts: 'reports/**/*', fingerprint: true } } } post { always { // 清理残留的容器(避免占用资源) sh 'docker rm -f $(docker ps -aq --filter "ancestor=seleniumbase/seleniumbase") 2>/dev/null || true' } } }
关键说明
--shm-size=2g:Chrome无头模式需要足够共享内存,防止进程崩溃- 目录映射
${env.WORKSPACE}:/test:让容器访问测试代码,同时将测试报告同步回Jenkins工作区 - 报告路径
/test/reports/report.html:对应Jenkins工作区下的reports目录,确保归档有效
方案2:自定义构建SeleniumBase镜像
如果需要添加自定义依赖或修改镜像配置,可基于官方Dockerfile构建私有镜像:
pipeline { agent any stages { stage('拉取测试代码') { steps { git url: 'https://gitlab.com/username/repo.git', branch: 'main' } } stage('构建自定义镜像') { steps { script { // 基于项目根目录的Dockerfile构建镜像(需提前将官方Dockerfile复制到项目根目录并修改) def customSbaseImage = docker.build('my-seleniumbase:latest', '.') // 可选:推送镜像到私有仓库供后续复用 // customSbaseImage.push() } } } stage('自定义镜像执行测试') { steps { script { def customSbaseImage = docker.image('my-seleniumbase:latest') customSbaseImage.inside("-v ${env.WORKSPACE}:/test --shm-size=2g") { sh 'cd /test' sh '''pytest \ --var1=your_username \ --var2=your_password \ --dashboard \ --html=/test/reports/report.html \ --browser=chrome \ --headless''' } } } } stage('归档测试报告') { steps { archiveArtifacts artifacts: 'reports/**/*', fingerprint: true } } } post { always { // 清理自定义镜像相关的残留容器 sh 'docker rm -f $(docker ps -aq --filter "ancestor=my-seleniumbase") 2>/dev/null || true' // 可选:清理构建的镜像(不需要长期保留时启用) // sh 'docker rmi -f my-seleniumbase:latest 2>/dev/null || true' } } }
关键说明
- 需在项目根目录放置自定义Dockerfile(可从官方仓库复制后修改)
- 构建镜像时指定上下文为
.(项目根目录),确保Dockerfile能被读取
原脚本问题修正点
- 缺失目录映射:原脚本未将Jenkins工作区映射到容器,导致容器无法访问测试代码,报告也无法同步回Jenkins
- 命令语法错误:
testCommand2中存在多余单引号(--var1=username'),且未正确拼接测试命令 - 容器执行冗余:
container.run后嵌套inside的方式多余,直接使用image.inside()更简洁且参数传递更可靠 - 报告路径无效:原报告路径指向容器内部固定目录,未关联Jenkins工作区,导致构建后无法获取报告
- 平台兼容性:
bat仅适用于Windows节点,Linux节点需替换为sh
内容的提问来源于stack exchange,提问作者mastafadhil
相关产品推荐
相关产品推荐

