package collect import ( "context" "geo/internal/collect" "geo/internal/config" "github.com/gofiber/fiber/v2/log" "testing" "time" ) var ( deepseekCfg, _ = config.LoadConfig() deepseekManager = collect.NewCollectManager(context.Background(), deepseekCfg, log.DefaultLogger()) ) // TestDeepseekCollector_WaitLogin 测试DeepSeek登录功能 func TestDeepseekCollector_WaitLogin(t *testing.T) { if testing.Short() { t.Skip("跳过需要浏览器交互的测试") } params := &collect.CollectParams{ Headless: false, // 显示浏览器窗口以便扫码登录 RequestID: "test_deepseek_login_001", Platform: "deepseek", } t.Log("开始测试DeepSeek登录...") t.Log("请在打开的浏览器窗口中完成DeepSeek账号登录(扫码或输入账号密码)") success, msg := deepseekManager.WaitLogin("deepseek", params) if !success { t.Errorf("DeepSeek登录失败: %s", msg) return } t.Logf("DeepSeek登录成功: %s", msg) t.Log("Cookie已保存,后续测试可以使用已登录状态") } // TestDeepseekCollector_AskQuestion 测试DeepSeek提问功能 // 注意:此测试需要有效的登录状态 func TestDeepseekCollector_AskQuestion(t *testing.T) { if testing.Short() { t.Skip("跳过需要浏览器交互的测试") } // 设置收集参数 params := &collect.CollectParams{ Headless: false, // 显示浏览器以便调试 RequestID: "test_deepseek_001", Platform: "deepseek", } // 定义提问内容 question := "四川房地产软件排名" t.Logf("向DeepSeek提问: %s", question) // 调用管理器提问并获取答案 result, err := deepseekManager.AskQuestion("deepseek", params, question) if err != nil { t.Errorf("提问失败: %v", err) return } t.Logf("获取到答案:\n%s", result.Answer) t.Logf("分享链接: %s", result.ShareLink) // 验证答案非空 if len(result.Answer) == 0 { t.Error("答案为空") } } // TestDeepseekCollector_MultipleQuestions 测试DeepSeek多次提问功能 func TestDeepseekCollector_MultipleQuestions(t *testing.T) { if testing.Short() { t.Skip("跳过需要浏览器交互的测试") } // 设置收集参数 params := &collect.CollectParams{ Headless: true, // 使用无头模式提高速度 RequestID: "test_deepseek_multi_001", Platform: "deepseek", } // 定义多个问题 questions := []string{ "什么是人工智能?", "如何学习Go语言?", "推荐几个优秀的开源项目", } t.Logf("开始测试DeepSeek多次提问,共 %d 个问题", len(questions)) for i, question := range questions { t.Logf("[%d/%d] 提问: %s", i+1, len(questions), question) result, err := deepseekManager.AskQuestion("deepseek", params, question) if err != nil { t.Errorf("第 %d 个问题提问失败: %v", i+1, err) continue } previewLen := min(len(result.Answer), 100) t.Logf("第 %d 个回答长度: %d, 预览: %s...", i+1, len(result.Answer), result.Answer[:previewLen]) } t.Log("多次提问测试完成") } // TestDeepseekCollector_SpeedTest 测试DeepSeek响应速度 func TestDeepseekCollector_SpeedTest(t *testing.T) { if testing.Short() { t.Skip("跳过需要浏览器交互的测试") } params := &collect.CollectParams{ Headless: true, RequestID: "test_deepseek_speed_001", Platform: "deepseek", } question := "用一句话介绍你自己" t.Logf("测试DeepSeek响应速度,问题: %s", question) startTime := time.Now() result, err := deepseekManager.AskQuestion("deepseek", params, question) elapsed := time.Since(startTime) if err != nil { t.Errorf("提问失败: %v", err) return } t.Logf("响应时间: %v", elapsed) t.Logf("答案长度: %d 字符", len(result.Answer)) t.Logf("答案: %s", result.Answer) // 验证响应时间在合理范围内(例如60秒内) if elapsed.Seconds() > 60 { t.Logf("警告: 响应时间过长: %v", elapsed) } } // TestDeepseekCollector_BrowserStorage 测试浏览器存储功能 func TestDeepseekCollector_BrowserStorage(t *testing.T) { if testing.Short() { t.Skip("跳过需要浏览器交互的测试") } t.Log("测试DeepSeek浏览器存储保存和加载功能") t.Log("此测试将验证Cookies、LocalStorage和SessionStorage的保存和加载") // 第一步:登录并保存浏览器存储 loginParams := &collect.CollectParams{ Headless: false, RequestID: "test_deepseek_storage_001", Platform: "deepseek", } t.Log("步骤1: 请登录DeepSeek账号...") success, msg := deepseekManager.WaitLogin("deepseek", loginParams) if !success { t.Errorf("登录失败: %s", msg) return } t.Logf("登录成功: %s", msg) // 第二步:使用保存的存储进行提问 askParams := &collect.CollectParams{ Headless: true, RequestID: "test_deepseek_storage_002", Platform: "deepseek", } question := "你好" t.Logf("步骤2: 使用保存的浏览器存储提问: %s", question) result, err := deepseekManager.AskQuestion("deepseek", askParams, question) if err != nil { t.Errorf("提问失败: %v", err) return } t.Logf("提问成功,答案长度: %d 字符", len(result.Answer)) t.Logf("预览: %s...", result.Answer[:min(len(result.Answer), 50)]) t.Log("浏览器存储测试完成") }