#!/bin/bash # 智慧畜牧业小程序矩阵测试脚本 # 用于运行各种测试和代码质量检查 set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 日志函数 log_info() { echo -e "${BLUE}[INFO]${NC} $1" } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # 检查环境 check_environment() { log_info "检查测试环境..." # 检查 Node.js if ! command -v node &> /dev/null; then log_error "Node.js 未安装" exit 1 fi # 检查 npm if ! command -v npm &> /dev/null; then log_error "npm 未安装" exit 1 fi # 检查项目目录 if [ ! -d "mini_program" ]; then log_error "mini_program 目录不存在" exit 1 fi log_success "环境检查通过" } # 安装测试依赖 install_test_dependencies() { log_info "安装测试依赖..." cd mini_program # 检查是否已安装测试相关依赖 if ! npm list jest &> /dev/null; then npm install --save-dev jest @vue/test-utils fi if ! npm list eslint &> /dev/null; then npm install --save-dev eslint @vue/eslint-config-typescript fi if ! npm list prettier &> /dev/null; then npm install --save-dev prettier fi log_success "测试依赖安装完成" cd .. } # 代码格式检查 check_code_format() { log_info "检查代码格式..." cd mini_program # 检查 Prettier 格式 if command -v npx &> /dev/null; then if npx prettier --check "**/*.{js,vue,ts,json,md}" 2>/dev/null; then log_success "代码格式检查通过" else log_warning "代码格式不符合规范,建议运行 npm run format 修复" fi else log_warning "Prettier 未安装,跳过格式检查" fi cd .. } # 代码质量检查 check_code_quality() { log_info "检查代码质量..." cd mini_program # ESLint 检查 if command -v npx &> /dev/null; then if npx eslint "**/*.{js,vue,ts}" --quiet 2>/dev/null; then log_success "代码质量检查通过" else log_warning "发现代码质量问题,建议运行 npm run lint 查看详情" fi else log_warning "ESLint 未安装,跳过质量检查" fi cd .. } # 运行单元测试 run_unit_tests() { log_info "运行单元测试..." cd mini_program # 检查是否有测试文件 if find . -name "*.test.js" -o -name "*.spec.js" | grep -q .; then if npm test 2>/dev/null; then log_success "单元测试通过" else log_error "单元测试失败" cd .. return 1 fi else log_warning "未找到测试文件,跳过单元测试" fi cd .. } # 检查依赖安全性 check_security() { log_info "检查依赖安全性..." cd mini_program # npm audit 检查 if npm audit --audit-level moderate 2>/dev/null; then log_success "依赖安全检查通过" else log_warning "发现安全漏洞,建议运行 npm audit fix 修复" fi cd .. } # 检查包大小 check_bundle_size() { log_info "检查包大小..." cd mini_program # 构建项目并检查大小 if npm run build:h5 &> /dev/null; then if [ -d "dist" ]; then local size=$(du -sh dist 2>/dev/null | cut -f1) log_info "构建包大小: $size" # 检查是否超过限制 (例如 10MB) local size_bytes=$(du -s dist 2>/dev/null | cut -f1) if [ "$size_bytes" -gt 10240 ]; then # 10MB = 10240KB log_warning "构建包较大,建议优化" else log_success "构建包大小合理" fi fi else log_warning "构建失败,无法检查包大小" fi cd .. } # 性能测试 run_performance_tests() { log_info "运行性能测试..." # 这里可以添加性能测试逻辑 # 例如:Lighthouse、WebPageTest 等 log_info "性能测试功能待实现" } # 兼容性测试 run_compatibility_tests() { log_info "运行兼容性测试..." cd mini_program # 检查各平台构建是否成功 local platforms=("mp-weixin" "mp-alipay" "h5") local success_count=0 for platform in "${platforms[@]}"; do log_info "测试 $platform 平台兼容性..." if npm run "build:$platform" &> /dev/null; then log_success "$platform 平台兼容性测试通过" success_count=$((success_count + 1)) else log_error "$platform 平台兼容性测试失败" fi done log_info "兼容性测试完成: $success_count/${#platforms[@]} 平台通过" cd .. } # 生成测试报告 generate_test_report() { log_info "生成测试报告..." local report_file="test-report.html" local test_time=$(date "+%Y-%m-%d %H:%M:%S") cat > "$report_file" << EOF
测试时间: $test_time
本次测试包含代码格式检查、质量检查、单元测试、安全检查等多个方面