Jenkinsfile
4.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
pipeline {
agent any
triggers {
cron('0 10 * * *')
}
environment {
PYTHON_VERSION = '3.8'
PROJECT_NAME = 'api_test'
// 根据 Jenkins Job 名称自动识别环境
// Job 名称格式: APITEST-test / APITEST-uat / APITEST-prod
// 提取最后一个 "-" 后面的部分作为环境名
DEPLOY_ENV = "${env.JOB_NAME.split('-').last()}"
IP_HOST_TEST = 'ai-test.hikoon.com'
IP_HOST_UAT = 'ai-uat.hikoon.com'
IP_HOST_PROD = 'api.hikoon.com'
// 企微Webhook URL - 包含完整的webhook地址和key
WECOM_WEBHOOK_URL = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=77f8f0d5-243a-442a-8946-bc713be7bf65'
}
stages {
stage('检出代码') {
steps {
echo "开始检出代码..."
checkout scm
}
}
stage('环境准备') {
steps {
echo "准备Python环境..."
sh '''
python3 --version
if [ ! -d "venv" ]; then
python3 -m venv venv
fi
. venv/bin/activate
pip install --upgrade pip -q
pip install -r requirements.txt -q
echo "依赖安装完成"
'''
}
}
stage('执行测试') {
steps {
echo "开始执行API自动化测试 (环境: ${DEPLOY_ENV})..."
script {
def ipHost = env.IP_HOST_TEST
if (env.DEPLOY_ENV == 'uat') {
ipHost = env.IP_HOST_UAT
} else if (env.DEPLOY_ENV == 'prod') {
ipHost = env.IP_HOST_PROD
}
env.IP_HOST = ipHost
echo "IP_HOST: ${env.IP_HOST}"
}
sh '''
. venv/bin/activate
export DEPLOY_ENV="${DEPLOY_ENV}"
export IP_HOST="${IP_HOST}"
echo "当前执行环境: ${DEPLOY_ENV}"
echo "IP_HOST: ${IP_HOST}"
python3 api_test.py
'''
}
}
stage('生成报告') {
steps {
echo "正在生成测试报告..."
sh '''
echo "查找报告文件..."
ls -lh reports/${DEPLOY_ENV}/ 2>/dev/null || echo "未找到报告文件"
'''
}
}
}
post {
always {
echo "正在收集测试结果..."
// 列出所有报告文件(调试用)
sh '''
echo "=== 报告文件清单 ==="
if [ -d "reports" ]; then
find reports -type f -name "*.html" -o -name "*.xlsx" | sort
else
echo "reports 目录不存在"
fi
echo "===================="
'''
// 归档报告文件
archiveArtifacts artifacts: 'reports/**/*',
allowEmptyArchive: true,
fingerprint: true
echo "报告已归档到 Jenkins Artifacts"
}
success {
echo "[SUCCESS] [${DEPLOY_ENV}环境] 所有测试用例运行成功!"
script {
sh '''
. venv/bin/activate
export WECOM_WEBHOOK_URL="${WECOM_WEBHOOK_URL}"
export BUILD_STATUS=success
python3 send_wecom_notification.py
'''
}
}
failure {
echo "[FAILURE] [${DEPLOY_ENV}环境] 有测试用例执行失败!"
script {
sh '''
. venv/bin/activate
export WECOM_WEBHOOK_URL="${WECOM_WEBHOOK_URL}"
export BUILD_STATUS=failure
python3 send_wecom_notification.py
'''
}
}
}
}