Jenkinsfile 3.32 KB
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'
    }

    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}环境] 所有测试用例运行成功!"
        }

        failure {
            echo "[FAILURE] [${DEPLOY_ENV}环境] 有测试用例执行失败!"
        }
    }
}