#!/bin/bash # E2E测试运行脚本 # 支持多种运行模式和报告生成 set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 默认配置 ENV="local" PROJECT="" TAG="" REPORT=false HEADLESS=false DEBUG=false # 帮助信息 show_help() { echo "E2E测试运行脚本" echo "" echo "用法: ./run-e2e-tests.sh [选项]" echo "" echo "选项:" echo " -e, --env <环境> 指定测试环境 (local|dev|test|ci) [默认: local]" echo " -p, --project <项目> 指定测试项目 (admin|uniapp|integration)" echo " -t, --tag <标签> 按标签运行测试 (如: @boundary, @error)" echo " -r, --report 生成完整测试报告" echo " -h, --headless 无头模式运行" echo " -d, --debug 调试模式" echo " --help 显示帮助信息" echo "" echo "示例:" echo " ./run-e2e-tests.sh -e ci -r # CI环境运行所有测试并生成报告" echo " ./run-e2e-tests.sh -p admin -t @boundary # 只运行admin的边界测试" echo " ./run-e2e-tests.sh -p uniapp -h # 无头模式运行uniapp测试" } # 解析参数 while [[ $# -gt 0 ]]; do case $1 in -e|--env) ENV="$2" shift 2 ;; -p|--project) PROJECT="$2" shift 2 ;; -t|--tag) TAG="$2" shift 2 ;; -r|--report) REPORT=true shift ;; -h|--headless) HEADLESS=true shift ;; -d|--debug) DEBUG=true shift ;; --help) show_help exit 0 ;; *) echo -e "${RED}错误: 未知选项 $1${NC}" show_help exit 1 ;; esac done # 设置环境变量 export E2E_ENV="$ENV" if [ "$HEADLESS" = true ]; then export HEADLESS="true" fi if [ "$DEBUG" = true ]; then export DEBUG="pw:api" fi echo -e "${BLUE}========================================${NC}" echo -e "${BLUE} E2E端到端测试运行器${NC}" echo -e "${BLUE}========================================${NC}" echo "" echo -e "环境: ${GREEN}$ENV${NC}" echo -e "项目: ${GREEN}${PROJECT:-全部}${NC}" echo -e "标签: ${GREEN}${TAG:-无}${NC}" echo -e "报告: ${GREEN}$REPORT${NC}" echo -e "无头: ${GREEN}$HEADLESS${NC}" echo "" # 构建Playwright命令 CMD="npx playwright test" # 添加项目过滤 if [ -n "$PROJECT" ]; then CMD="$CMD --project=$PROJECT" fi # 添加标签过滤 if [ -n "$TAG" ]; then CMD="$CMD --grep='$TAG'" fi # 添加报告器 if [ "$REPORT" = true ]; then CMD="$CMD --reporter=html,json,junit,list" fi # 添加调试选项 if [ "$DEBUG" = true ]; then CMD="$CMD --debug" fi # 显示执行的命令 echo -e "${YELLOW}执行命令: $CMD${NC}" echo "" # 运行测试 eval $CMD # 生成报告 if [ "$REPORT" = true ]; then echo "" echo -e "${BLUE}========================================${NC}" echo -e "${BLUE} 生成测试报告${NC}" echo -e "${BLUE}========================================${NC}" # 显示HTML报告路径 if [ -f "test-results/html-report/index.html" ]; then echo -e "${GREEN}HTML报告: test-results/html-report/index.html${NC}" # 尝试自动打开报告(macOS) if [[ "$OSTYPE" == "darwin"* ]]; then open test-results/html-report/index.html fi fi if [ -f "test-results/e2e-results.json" ]; then echo -e "${GREEN}JSON报告: test-results/e2e-results.json${NC}" fi if [ -f "test-results/junit-report.xml" ]; then echo -e "${GREEN}JUnit报告: test-results/junit-report.xml${NC}" fi fi echo "" echo -e "${GREEN}测试完成!${NC}"