geoGo/deepseek_test.go

195 lines
5.1 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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("浏览器存储测试完成")
}