jenkins pipline 自动化测试

embedded/2025/3/19 7:10:10/

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

pipeline {agent anyenvironment {// 定义环境变量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. 流程设计

    • 并行优化:可将单元测试和代码质量检查改为并行执行
      stage('Parallel Stages') {parallel {stage('Unit Tests') { ... }stage('Code Quality') { ... }}
      }
      
    • 动态参数:可通过 parameters 块添加分支选择等参数
  3. 测试报告集成

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

    • 邮件通知(推荐使用HTML模板)
    • 可扩展Slack/MS Teams通知:
      slackSend channel: '#automation', message: "Build ${currentBuild.result}: ${env.JOB_NAME} ${env.BUILD_NUMBER}"
      

项目适配建议:

  1. Java项目

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

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

    // pytest示例
    sh 'pytest --junitxml=test-results.xml'
    junit 'test-results.xml'
    

典型执行效果:

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

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


http://www.ppmy.cn/embedded/173788.html

相关文章

【C++】:C++11详解 —— 右值引用

目录 左值和右值 左值的概念 右值的概念 左值 vs 右值 左值引用 和 右值引用 左值引用 右值引用 左值引用 vs 右值引用 使用场景 左值引用的使用场景 左值引用的短板 右值引用的使用场景 1. 实现移动语义(资源高效转移) 2. 优化容器操作&a…

C++刷题(三):string

📝前言说明: 本专栏主要记录本人的基础算法学习以及刷题记录,使用语言为C。 每道题我会给出LeetCode上的题号(如果有题号),题目,以及最后通过的代码。没有题号的题目大多来自牛客网。对于题目的…

蓝桥杯学习-01好数

01枚举 1.好数 问题描述 一个整数如果按从低位到高位的顺序,奇数位 (个位、百位、万位 ⋯⋯ ) 上的数字是奇数,偶数位 (十位、千位、十万位 ⋯⋯ ) 上的数字是偶数,我们就称之为 “好数”。 给定一个正整数 NN,请计算从 1 到 …

Visual Studio2022 中的键盘注释快捷方式

键盘快捷键 - Visual Studio (Windows) | Microsoft Learn 从官网查询: 注释选定内容CtrlKC [文本编辑器]编辑.注释选定内容 取消注释选定内容CtrlKU [文本编辑器]编辑.取消注释选定内容 官网显示版本2010应该也是用以上办法,本人还没尝试过。 使用注…

大模型GGUF和LLaMA的区别

GGUF(Gigabyte-Graded Unified Format)和LLaMA(Large Language Model Meta AI)是两个不同层面的概念,分别属于大模型技术栈中的不同环节。它们的核心区别在于定位和功能: 1. LLaMA(Meta的大语言…

【最佳实践】Go 状态模式

设计思路 状态模式的核心在于将对象的行为封装在特定的状态类中,使得对象在不同的状态下表现出不同的行为。每个状态实现同一个接口,允许对象在运行时通过改变其内部状态对象来改变其行为。状态模式使得状态转换更加明确,并且易于扩展新的状…

python-leetcode 47.组合总和

题目: 给一个无重复元素的整数数组candidates和一个目标整数target,找出candidates中可以使数字和为目标数target所有不同组合,并以列表形式返回,可以按任意顺序返回这些组合。 candidates中的同一个数字可以无限制重复被选取,如…

防火墙双机热备(主备分担)

目录 引言 主备备份实验 1、基本配置 2、双机热备配置 查看双机热备状态 主备切换 路由影响 引言 传统VRRP方式无法实现主、备用防火墙状态信息和多组VRRP状态的一致性,所以可能会导致流量的回包不从首包通过的防火墙回包,防火墙会因为状态检测机…