124 lines
4.9 KiB
Go
124 lines
4.9 KiB
Go
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)
|
||
}
|