千锋教育-做有情怀、有良心、有品质的职业教育机构

pipeline {
agent any
// 定时触发:每天早上8点 + 手动触发
triggers {
cron('0 8 * * 1-5') // 工作日早8点
}
// 参数化:可以选择测试模块
parameters {
choice(name: 'TEST_MODULE', choices: ['all', 'api', 'ui', 'performance'], description: '选择测试模块')
string(name: 'ENVIRONMENT', defaultValue: 'staging', description: '目标环境')
}
environment {
PYTHON_HOME = 'C:\\Python312'
TEST_RESULTS = 'test-results'
}
stages {
stage('环境准备') {
steps {
echo "准备测试环境: ${params.ENVIRONMENT}"
bat 'pip install -r requirements.txt'
}
}
stage('执行测试') {
steps {
bat "pytest tests/${params.TEST_MODULE}/ --junitxml=${TEST_RESULTS}/report.xml --alluredir=${TEST_RESULTS}/allure-results"
}
}
stage('生成报告') {
steps {
junit "${TEST_RESULTS}/report.xml"
allure includeProperties: false, jdk: '', results: [[path: "${TEST_RESULTS}/allure-results"]]
}
}
}
post {
always {
archiveArtifacts artifacts: "${TEST_RESULTS}/**/*", fingerprint: true
}
success {
echo '测试全部通过!'
}
failure {
echo '测试失败,请检查报告。'
// 发送钉钉/企业微信通知
}
}
}
triggers {
// 配合 GitHub/GitLab Webhook
pollSCM('H/5 * * * *') // 每5分钟检查一次代码变更
}
triggers {
cron('0 8 * * 1-5') // 工作日早8点
cron('0 20 * * *') // 每晚8点跑全量测试
}
triggers {
upstream(upstreamProjects: 'build-job', threshold: hudson.model.Result.SUCCESS)
}
// 构建成功后自动跑测试
每个分支自动创建 Pipeline:
- feature/xxx 分支:跑该分支相关的单元测试
- develop 分支:跑集成测试 + API 测试
- main 分支:跑全量测试(单元 + 集成 + API + UI + 性能)
pipeline {
agent any
stages {
stage('单元测试') {
steps {
bat 'mvn test'
}
post {
always { junit 'target/surefire-reports/*.xml' }
}
}
stage('API测试') {
steps {
bat 'newman run collections/api-tests.json -e staging.json --reporters cli,junit --reporter-junit-export api-results.xml'
}
post {
always { junit 'api-results.xml' }
}
}
stage('UI测试') {
when {
branch 'main' // 只在主分支跑UI测试(耗时较长)
}
steps {
bat 'pytest tests/ui/ --junitxml=ui-results.xml'
}
post {
always { junit 'ui-results.xml' }
}
}
stage('性能测试') {
when {
branch 'main'
}
steps {
bat 'jmeter -n -t perf-test-plan.jmx -l perf-results.jtl'
}
}
}
}
feature 分支:单元测试(2分钟)→ API 测试(3分钟) 总计5分钟
develop 分支:单元测试 → API 测试 → 集成测试 总计15分钟
main 分支: 全量测试(含 UI + 性能) 总计45分钟
post {
failure {
mail to: 'qa-team@example.com',
subject: "测试失败: ${env.JOB_NAME} #${env.BUILD_NUMBER}",
body: "测试报告: ${env.BUILD_URL}allure/"
}
}
post {
always {
script {
def status = currentBuild.currentResult
def message = status == 'SUCCESS' ?
"✅ ${env.JOB_NAME} #${env.BUILD_NUMBER} 测试通过" :
"❌ ${env.JOB_NAME} #${env.BUILD_NUMBER} 测试失败"
bat "curl -X POST -H 'Content-Type: application/json' -d '{\"msgtype\":\"text\",\"text\":{\"content\":\"${message}\"}}' ${WEBHOOK_URL}"
}
}
}
相关推荐