package utils import ( "fmt" "os" "path/filepath" "testing" ) // getProjectRoot 获取项目根目录 func getProjectRoot() string { // 假设测试从项目根目录运行 dir, _ := os.Getwd() // 向上查找 go.mod 确定项目根目录 for { if _, err := os.Stat(filepath.Join(dir, "go.mod")); err == nil { return dir } parent := filepath.Dir(dir) if parent == dir { break } dir = parent } return "" } // TestGenerateCompetitorReportPDF 测试生成竞品报告PDF func TestGenerateCompetitorReportPDF(t *testing.T) { // 获取项目根目录 root := getProjectRoot() fmt.Printf("项目根目录: %s\n", root) // 准备测试数据 data := CompetitorReportData{ HighlightAnalysis: HighlightAnalysisData{ Summary: "本视频通过展示产品使用的真实场景,突出用户产品优势和痛点,内容详实且具有吸引力。", Points: PointsData{ Theme: "标题简洁有力,突出核心卖点'省时省力',引发用户好奇心", Narrative: "采用情景剧形式展示产品使用场景,剧情贴近生活,易引发共鸣", Content: "通过前后对比展示产品效果,直观呈现产品价值", Copywriting: "文案简洁明了,突出用户痛点解决方案,语气亲切自然", Data: "点赞量10万+,评论5000+,分享2万+,数据表现优异", Music: "背景音乐节奏轻快,与视频内容匹配度高,增强观看体验", }, }, DataPerformance: DataPerformanceData{ Views: "播放量突破500万,推荐流量占比60%,自然流量表现优秀", Completion: "完播率45%,高于同类视频平均值(30%),前3秒吸引力强", Engagement: "点赞率2%,评论率0.1%,分享率0.4%,互动数据表现优秀", }, OverallSummary: "整体来看,该竞品视频在内容策划、表现形式和互动数据方面都表现优秀。优势在于:1)内容真实可信,通过实际使用场景展示产品效果;2)剧情设计合理,前3秒抓住用户注意力;3)文案简洁有力,直击用户痛点。建议优化方向:1)可以增加更多用户评价内容,增强可信度;2)适当增加福利引导,提高转化率;3)结尾可以增加引导关注话术,提升粉丝沉淀。", } // 模板路径 templatePath := filepath.Join(root, "data", "竞品报告pdf模板.pdf") // 输出路径 outputPath := filepath.Join(root, "data", "output", "竞品报告测试_multicell.pdf") // 确保输出目录存在 outputDir := filepath.Dir(outputPath) if err := os.MkdirAll(outputDir, 0755); err != nil { t.Errorf("创建输出目录失败: %v", err) return } // 调用函数生成PDF err := GenerateCompetitorReportPDF(templatePath, outputPath, data) if err != nil { t.Errorf("生成竞品报告PDF失败: %v", err) return } fmt.Printf("PDF生成成功: %s\n", outputPath) } // TestGenerateCompetitorReportPDFImageOnly 测试仅图片的竞品报告PDF(无配乐和完播率) func TestGenerateCompetitorReportPDFImageOnly(t *testing.T) { // 获取项目根目录 root := getProjectRoot() // 准备测试数据(仅图片,没有视频的配乐和完播率) data := CompetitorReportData{ HighlightAnalysis: HighlightAnalysisData{ Summary: "该图文内容通过精美的视觉设计和精准的标签定位,成功吸引目标用户关注。", Points: PointsData{ Theme: "标题设置悬念,引发用户点击欲望", Narrative: "采用九宫格形式展示产品特点,视觉冲击力强", Content: "内容排版清晰,重点突出,便于用户快速获取信息", Copywriting: "文案简洁,配合表情符号增加趣味性", Data: "收藏量5万+,评论1000+,分享8000+", Music: "", // 图片无配乐 }, }, DataPerformance: DataPerformanceData{ Views: "曝光量100万+,点击率3%,表现良好", Completion: "", // 图文无完播率 Engagement: "收藏率5%,评论率0.1%,分享率0.8%", }, OverallSummary: "该图文内容整体表现优秀,特别是在视觉设计和内容排版方面。亮点:1)九宫格形式统一,视觉效果好;2)标签设置精准,触达目标用户;3)发布时间合理,获得更多曝光。优化建议:1)可以增加更多用户案例展示;2)适当加入互动话题,提高评论量。", } // 模板路径 templatePath := filepath.Join(root, "data", "竞品报告pdf模板.pdf") // 输出路径 outputPath := filepath.Join(root, "data", "output", "竞品报告测试_图文11.pdf") // 确保输出目录存在 outputDir := filepath.Dir(outputPath) if err := os.MkdirAll(outputDir, 0755); err != nil { t.Errorf("创建输出目录失败: %v", err) return } // 调用函数生成PDF err := GenerateCompetitorReportPDF(templatePath, outputPath, data) if err != nil { t.Errorf("生成竞品报告PDF失败: %v", err) return } fmt.Printf("PDF生成成功: %s\n", outputPath) }