如何用Bash脚本实现Git克隆、Maven测试及Extent报告展示
Bash脚本复刻Jenkins流水线实现自动化测试与报告推送
以下是完全贴合需求的Bash脚本实现方案,涵盖代码拉取、测试执行、报告整理、Teams推送及本地报告预览全流程,可直接在已配置Git和Maven的Linux服务器上运行:
完整Bash脚本代码
#!/bin/bash # -------------------------- 配置参数 -------------------------- GIT_REPO_URL="你的Git仓库地址" CODE_DIR="./test-project" TEST_REPORT_DIR="./test-reports" TEAMS_WEBHOOK_URL="你的Microsoft Teams频道Webhook URL" EXTENT_REPORT_PATH="${CODE_DIR}/target/surefire-reports/extent.html" SCREENSHOT_SOURCE_DIR="${CODE_DIR}/target/screenshots" # ------------------------------------------------------------- # 1. Git克隆/拉取最新代码 echo "=== 开始处理代码仓库 ===" if [ -d "${CODE_DIR}" ]; then echo "仓库目录已存在,拉取最新代码..." cd "${CODE_DIR}" && git pull origin main || { echo "Git拉取失败"; exit 1; } cd .. else echo "克隆代码仓库..." git clone "${GIT_REPO_URL}" "${CODE_DIR}" || { echo "Git克隆失败"; exit 1; } fi # 2. 执行Maven测试命令 echo "=== 开始执行Maven测试 ===" cd "${CODE_DIR}" mvn clean test -Djdk.tls.client.protocols=TLSv1.2 || { echo "Maven测试执行失败"; exit 1; } cd .. # 3. 整理测试报告及截图 echo "=== 开始整理测试报告 ===" mkdir -p "${TEST_REPORT_DIR}" # 复制Extent报告 if [ -f "${EXTENT_REPORT_PATH}" ]; then cp "${EXTENT_REPORT_PATH}" "${TEST_REPORT_DIR}/" echo "Extent报告已复制到${TEST_REPORT_DIR}" else echo "警告:未找到Extent报告文件" fi # 复制截图 if [ -d "${SCREENSHOT_SOURCE_DIR}" ]; then cp -r "${SCREENSHOT_SOURCE_DIR}" "${TEST_REPORT_DIR}/" echo "测试截图已复制到${TEST_REPORT_DIR}" else echo "警告:未找到截图目录" fi # 4. 推送测试结果到Microsoft Teams echo "=== 推送结果到Teams频道 ===" # 根据Maven执行状态判断测试结果 TEST_STATUS="成功" if [ $? -ne 0 ]; then TEST_STATUS="失败" fi # 构造Teams消息卡片 TEAMS_PAYLOAD=$(cat <<EOF { "@type": "MessageCard", "@context": "http://schema.org/extensions", "summary": "自动化测试结果通知", "themeColor": "$([ "${TEST_STATUS}" = "成功" ] && echo "0078D7" || echo "FF0000")", "sections": [ { "activityTitle": "自动化测试${TEST_STATUS}", "activitySubtitle": "项目: $(basename ${GIT_REPO_URL})", "facts": [ { "name": "测试状态", "value": "${TEST_STATUS}" }, { "name": "报告存储路径", "value": "${TEST_REPORT_DIR}" } ], "text": "测试执行完成,详细报告请查看本地目录" } ] } EOF ) # 发送Teams请求 curl -H "Content-Type: application/json" -d "${TEAMS_PAYLOAD}" "${TEAMS_WEBHOOK_URL}" || echo "Teams推送失败" # 5. 本地浏览器打开测试报告 echo "=== 打开测试报告 ===" FINAL_REPORT_PATH="${TEST_REPORT_DIR}/extent.html" if [ -f "${FINAL_REPORT_PATH}" ]; then # Linux默认使用xdg-open,macOS替换为open,Windows替换为start xdg-open "${FINAL_REPORT_PATH}" || echo "无法打开浏览器查看报告" else echo "无法打开报告:文件不存在" fi echo "=== 所有步骤执行完成 ==="
关键模块说明
- 代码仓库管理:自动判断本地是否已有代码目录,存在则拉取最新分支代码,不存在则直接克隆,避免重复操作。
- Maven测试执行:严格执行指定的Maven命令,命令失败时立即终止脚本,防止后续无效流程。
- 报告整理:自动创建目标报告目录,复制Extent报告和测试截图,同时加入文件/目录存在性检查,避免因缺失文件导致脚本报错。
- Teams消息推送:根据测试结果生成带主题色的消息卡片(成功为蓝色,失败为红色),通过curl发送到Teams频道;如果需要更详细的测试统计(如用例通过率、失败数),可解析Extent报告的HTML或JSON内容提取数据。
- 本地报告预览:使用Linux系统默认的
xdg-open命令打开报告,其他系统可替换为对应命令(macOS用open,Windows用start)。
注意事项
- 确保服务器已安装
git、mvn、curl、xdg-utils(用于打开浏览器)等依赖工具,缺失可通过apt/yum安装。 - 替换脚本顶部的配置参数为实际值:Git仓库地址、Teams Webhook URL、报告/截图路径等。
- Git仓库若需认证,建议提前配置SSH密钥;若用HTTPS方式,可在克隆时输入账号密码,或配置Git凭据缓存。
- 若Maven测试需指定JDK版本,可在脚本开头添加
export JAVA_HOME=/path/to/jdk指定环境变量。 - Teams Webhook URL需在对应频道创建:右键频道 > 连接到服务 > 搜索"Incoming Webhook" > 添加并复制生成的URL。
内容的提问来源于stack exchange,提问作者wheelerlc64
相关产品推荐
相关产品推荐

