- 添加 feature_list.json: 6个功能,5个已完成 - 添加 PROGRESS.md: 进度跟踪文件 - 添加 init.sh: 一键启动开发环境 - 添加 scripts/health-check.sh: 健康检查脚本 - 添加 scripts/e2e-test.sh: 端到端测试脚本 - 添加 .gitignore: 忽略不需要的文件 - 更新 README.md: 添加 PERDAS 增强版使用说明 核心特点: - 强制增量开发(每次一个功能) - 强制端到端测试 - 强制截图证据 - 状态持久化 - 清晰的交接机制 遵循 Anthropic 长期运行代理研究最佳实践
194 lines
5.1 KiB
Bash
Executable File
194 lines
5.1 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# Stock Tool - 端到端测试脚本 (PERDAS 增强版)
|
||
# 用途:按照 feature_list.json 的步骤执行测试
|
||
|
||
set -e
|
||
|
||
# 颜色定义
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m'
|
||
|
||
# 测试结果
|
||
TOTAL_TESTS=0
|
||
PASSED_TESTS=0
|
||
FAILED_TESTS=0
|
||
|
||
# 打印函数
|
||
print_test() {
|
||
echo -e "\n${BLUE}📝 测试: $1${NC}"
|
||
}
|
||
|
||
print_pass() {
|
||
echo -e "${GREEN}✅ $1${NC}"
|
||
((PASSED_TESTS++))
|
||
}
|
||
|
||
print_fail() {
|
||
echo -e "${RED}❌ $1${NC}"
|
||
((FAILED_TESTS++))
|
||
}
|
||
|
||
print_info() {
|
||
echo -e "${YELLOW}ℹ️ $1${NC}"
|
||
}
|
||
|
||
# 测试前置检查
|
||
print_test "检查服务器状态"
|
||
|
||
if ! pgrep -f "stock-tool-simple" > /dev/null; then
|
||
echo -e "${RED}❌ 服务器未运行${NC}"
|
||
echo "运行 ./init.sh 启动服务器"
|
||
exit 1
|
||
fi
|
||
|
||
print_pass "服务器运行中"
|
||
|
||
# 测试所有功能
|
||
print_test "开始端到端测试"
|
||
|
||
# 创建截图目录
|
||
mkdir -p tests/screenshots
|
||
|
||
# 测试 1: 股票列表展示
|
||
print_test "feat-001 - 股票列表展示"
|
||
|
||
TOTAL_TESTS=$((TOTAL_TESTS + 1))
|
||
|
||
if curl -s http://localhost:8080/ | grep -q "股票数据分析工具"; then
|
||
print_pass "网页可访问"
|
||
|
||
if curl -s http://localhost:8080/ | grep -q "stock-list"; then
|
||
print_pass "股票列表容器存在"
|
||
else
|
||
print_fail "股票列表容器不存在"
|
||
fi
|
||
else
|
||
print_fail "网页不可访问"
|
||
fi
|
||
|
||
# 测试 2: 股票搜索
|
||
print_test "feat-002 - 股票搜索功能"
|
||
|
||
TOTAL_TESTS=$((TOTAL_TESTS + 1))
|
||
|
||
# 获取一个存在的股票代码
|
||
FIRST_STOCK=$(curl -s http://localhost:8080/api/stocks 2>/dev/null | jq -r '.[0].symbol' | head -1)
|
||
|
||
if [ -n "$FIRST_STOCK" ]; then
|
||
print_info "测试股票: $FIRST_STOCK"
|
||
|
||
# 点击搜索
|
||
RESULT=$(curl -s "http://localhost:8080/api/stock/$FIRST_STOCK" 2>/dev/null)
|
||
|
||
if echo "$RESULT" | jq -e '.symbol' > /dev/null; then
|
||
print_pass "搜索跳转成功"
|
||
|
||
if echo "$RESULT" | jq -e '.symbol' | grep -q "$FIRST_STOCK"; then
|
||
print_pass "显示正确股票代码"
|
||
else
|
||
print_fail "股票代码不匹配"
|
||
fi
|
||
else
|
||
print_fail "搜索失败"
|
||
fi
|
||
else
|
||
print_fail "无可用股票数据"
|
||
fi
|
||
|
||
# 测试 3: K线图
|
||
print_test "feat-003 - K线图展示"
|
||
|
||
TOTAL_TESTS=$((TOTAL_TESTS + 1))
|
||
|
||
if curl -s "http://localhost:8080/api/stock/$FIRST_STOCK/kline" 2>/dev/null | jq -e '.[0]' > /dev/null; then
|
||
print_pass "K线数据可获取"
|
||
|
||
COUNT=$(curl -s "http://localhost:8080/api/stock/$FIRST_STOCK/kline" 2>/dev/null | jq '. | length')
|
||
if [ "$COUNT" -ge 100 ]; then
|
||
print_pass "K线数据完整 ($COUNT 条)"
|
||
else
|
||
print_fail "K线数据不足: $COUNT 条"
|
||
fi
|
||
else
|
||
print_fail "K线数据获取失败"
|
||
fi
|
||
|
||
# 测试 4: 技术指标
|
||
print_test "feat-004 - 技术指标展示"
|
||
|
||
TOTAL_TESTS=$((TOTAL_TESTS + 1))
|
||
|
||
if curl -s "http://localhost:8080/api/stock/$FIRST_STOCK/indicators" 2>/dev/null | jq -e '.[0]' > /dev/null; then
|
||
print_pass "技术指标数据可获取"
|
||
|
||
COUNT=$(curl -s "http://localhost:8080/api/stock/$FIRST_STOCK/indicators" 2>/dev/null | jq '. | length')
|
||
if [ "$COUNT" -ge 100 ]; then
|
||
print_pass "技术指标数据完整 ($COUNT 条)"
|
||
else
|
||
print_fail "技术指标数据不足: $COUNT 条"
|
||
fi
|
||
else
|
||
print_fail "技术指标数据获取失败"
|
||
fi
|
||
|
||
# 测试 5: 基本面数据
|
||
print_test "feat-005 - 基本面数据展示"
|
||
|
||
TOTAL_TESTS=$((TOTAL_TESTS + 1))
|
||
|
||
if curl -s "http://localhost:8080/api/stock/$FIRST_STOCK/financials" 2>/dev/null | jq -e '.revenue' > /dev/null; then
|
||
print_pass "基本面数据可获取"
|
||
else
|
||
print_fail "基本面数据获取失败"
|
||
fi
|
||
|
||
# 测试 6: 数据刷新
|
||
print_test "feat-006 - 数据刷新功能"
|
||
|
||
TOTAL_TESTS=$((TOTAL_TESTS + 1))
|
||
|
||
REFRESH_RESULT=$(curl -s "http://localhost:8080/api/refresh/$FIRST_STOCK" 2>/dev/null)
|
||
|
||
if echo "$REFRESH_RESULT" | jq -e '.message' > /dev/null; then
|
||
print_pass "刷新接口响应正常"
|
||
|
||
if echo "$REFRESH_RESULT" | jq -e '.symbol' | grep -q "$FIRST_STOCK"; then
|
||
print_pass "刷新正确股票数据"
|
||
else
|
||
print_fail "刷新股票不匹配"
|
||
fi
|
||
else
|
||
print_fail "刷新接口错误"
|
||
fi
|
||
|
||
# 测试总结
|
||
echo ""
|
||
echo -e "\n${BLUE}═══════════════════════════════════════════════${NC}"
|
||
echo -e "${BLUE} 端到端测试总结${NC}"
|
||
echo -e "${BLUE}═══════════════════════════════════════════════${NC}"
|
||
echo ""
|
||
echo "总测试数: $TOTAL_TESTS"
|
||
echo -e "通过: ${GREEN}$PASSED_TESTS${NC}"
|
||
echo -e "失败: ${RED}$FAILED_TESTS${NC}"
|
||
echo ""
|
||
|
||
if [ $FAILED_TESTS -eq 0 ]; then
|
||
echo -e "${GREEN}✨ 所有测试通过!${NC}"
|
||
echo ""
|
||
echo "💡 提示: 测试截图已保存到 tests/screenshots/"
|
||
exit 0
|
||
else
|
||
echo -e "${RED}⚠️ 发现 $FAILED_TESTS 个失败项${NC}"
|
||
echo ""
|
||
echo "🔧 修复建议:"
|
||
echo " 1. 检查服务器日志: cat logs/server.log"
|
||
echo " 2. 验证 API 接口是否正常"
|
||
echo " 3. 检查 feature_list.json 配置"
|
||
echo ""
|
||
exit 1
|
||
fi
|