jenkins pipline 自动化测试

以下是一个典型的 Jenkins Pipeline 示例,用于执行自动化测试流程(支持单元测试、集成测试、代码质量扫描),包含多阶段执行和测试结果处理:

groovy 复制代码
pipeline {
    agent any
    environment {
        // 定义环境变量
        PROJECT_NAME = "my-project"
        TEST_RESULTS = "**/test-results/*.xml"
        ALLURE_REPORT = "allure-report"
    }
    stages {
        // 阶段1:代码检出
        stage('Checkout') {
            steps {
                git branch: 'main', 
                     url: 'https://github.com/your-org/${PROJECT_NAME}.git'
            }
        }

        // 阶段2:依赖安装
        stage('Install Dependencies') {
            steps {
                script {
                    // 根据项目类型选择安装方式
                    if (fileExists('pom.xml')) {
                        sh 'mvn clean install -DskipTests'
                    } else if (fileExists('package.json')) {
                        sh 'npm install'
                    }
                }
            }
        }

        // 阶段3:单元测试
        stage('Unit Tests') {
            steps {
                script {
                    try {
                        if (fileExists('pom.xml')) {
                            sh 'mvn test' // Java项目
                        } else if (fileExists('package.json')) {
                            sh 'npm run test:unit' // Node.js项目
                        }
                    } finally {
                        // 收集JUnit格式测试报告
                        junit allowEmptyResults: true, testResults: '**/surefire-reports/*.xml'
                    }
                }
            }
        }

        // 阶段4:集成测试
        stage('Integration Tests') {
            steps {
                script {
                    // 启动测试环境(例如Docker compose)
                    sh 'docker-compose -f docker-compose.test.yml up -d'
                    
                    // 执行集成测试
                    sh './run-integration-tests.sh'
                    
                    // 收集集成测试报告
                    junit '**/integration-test-results/*.xml'
                }
            }
            post {
                always {
                    // 清理测试环境
                    sh 'docker-compose -f docker-compose.test.yml down'
                }
            }
        }

        // 阶段5:代码质量检查
        stage('Code Quality') {
            steps {
                // 使用SonarQube进行代码扫描
                withSonarQubeEnv('sonar-server') {
                    sh 'mvn sonar:sonar' // 或对应语言的扫描命令
                }
            }
        }

        // 阶段6:生成Allure报告
        stage('Allure Report') {
            steps {
                script {
                    allure([
                        includeProperties: false,
                        jdk: '',
                        properties: [],
                        reportBuildPolicy: 'ALWAYS',
                        results: [[path: 'allure-results']]
                    ])
                }
            }
        }
    }
    post {
        always {
            // 清理工作空间
            cleanWs()
        }
        success {
            // 测试成功通知
            emailext body: '${PROJECT_NAME} 自动化测试通过,报告地址:${BUILD_URL}Allure_20Report/',
                    subject: 'SUCCESS: ${PROJECT_NAME} Build ${BUILD_NUMBER}',
                    to: 'team@example.com'
        }
        failure {
            // 测试失败通知
            emailext body: '${PROJECT_NAME} 自动化测试失败,详情:${BUILD_URL}console',
                    subject: 'FAILED: ${PROJECT_NAME} Build ${BUILD_NUMBER}',
                    to: 'team@example.com'
        }
    }
}

关键配置说明:

  1. 环境准备

    • 安装必要插件:
      • Pipeline
      • JUnit
      • Allure
      • Email Extension
      • SonarQube Scanner
    • 配置全局工具(JDK/Maven/npm等)
  2. 流程设计

    • 并行优化 :可将单元测试和代码质量检查改为并行执行

      groovy 复制代码
      stage('Parallel Stages') {
          parallel {
              stage('Unit Tests') { ... }
              stage('Code Quality') { ... }
          }
      }
    • 动态参数 :可通过 parameters 块添加分支选择等参数

  3. 测试报告集成

    • JUnit:自动解析XML报告显示趋势图
    • Allure:生成交互式测试报告(需提前配置Allure命令行工具)
    • SonarQube:代码质量门禁检查
  4. 通知机制

    • 邮件通知(推荐使用HTML模板)

    • 可扩展Slack/MS Teams通知:

      groovy 复制代码
      slackSend channel: '#automation', 
                 message: "Build ${currentBuild.result}: ${env.JOB_NAME} ${env.BUILD_NUMBER}"

项目适配建议:

  1. Java项目

    groovy 复制代码
    // Maven命令示例
    sh 'mvn test' 
    junit '**/surefire-reports/*.xml'
  2. Node.js项目

    groovy 复制代码
    // npm命令示例
    sh 'npm run test:coverage'
    junit '**/junit.xml'
  3. Python项目

    groovy 复制代码
    // pytest示例
    sh 'pytest --junitxml=test-results.xml'
    junit 'test-results.xml'

典型执行效果:

  1. 可视化阶段执行状态
  2. 自动关联测试报告
  3. 历史趋势分析(通过Jenkins图表)
  4. 邮件/Slack实时通知

建议根据实际项目结构调整测试命令和报告路径。可通过 Jenkins Blue Ocean 插件获得更直观的流水线可视化效果。

相关推荐
草莓熊Lotso1 小时前
Linux 文件描述符与重定向实战:从原理到 minishell 实现
android·linux·运维·服务器·数据库·c++·人工智能
历程里程碑1 小时前
Linux22 文件系统
linux·运维·c语言·开发语言·数据结构·c++·算法
七夜zippoe9 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
Fcy64810 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满10 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠11 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Harvey90311 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技12 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀12 小时前
Linux环境变量
linux·运维·服务器
zzzsde12 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器