以下为“营销文案生成的风格与约束控制”回归测试方案,覆盖变更点与关联模块的核心场景。所有用例均以真实业务规则与可重复执行为准,业务优先级:低。
测试总览与全局前置条件
- 环境
- 配置中心(生效于生成服务)
- copy.style.enum = ["亲和","专业","活力"]
- copy.style.default = "亲和"
- copy.style.weight.default = 0.6
- copy.dedupe.threshold = 0.8
- copy.tone.compat.enabled = true
- copy.gray.enabled = true
- copy.gray.buckets = {"A":0.1,"B":0.9}
- copy.gray.bucket.A.dedupe.threshold = 0.8
- copy.gray.bucket.B.dedupe.threshold = 0.72(用于灰度对照)
- copy.script.support = ["zh-Hans","zh-Hant"]
- cache.key.includes = ["style","style_weight","dedupe_threshold","script","product","selling_points"]
- 品牌词库
- 品牌语气词库(按风格)
- 亲和:["贴心","温暖","随身","陪伴"]
- 专业:["参数","标准","认证","性能"]
- 活力:["轻快","元气","出发","尽兴"]
- CTA 词库(允许且要求出现一次):["立即体验","马上入手","现在购买","立刻行动"]
- 禁用词(夸大治疗功效相关):["治愈","根治","疗效","医疗级","强效治疗"]
- 基线测试数据(无禁用词版本)
- product = "便携净水杯"
- selling_points = ["滤芯可更换","保温6小时","重量150g","适合通勤与露营"]
- length_constraint = {"min":100,"max":120}
- script = "zh-Hans"
- style = "活力"
- 接口
- POST /api/v1/copy/generate
- 请求体示例(基础版,不含禁用词):
{
"product": "便携净水杯",
"selling_points": ["滤芯可更换", "保温6小时", "重量150g", "适合通勤与露营"],
"style": "活力",
"length": {"min": 100, "max": 120},
"script": "zh-Hans",
"batch_size": 1
}
- 监控与日志查询
- GET /api/v1/monitor/logs?request_id=xxx
- 计费查询
- GET /api/v1/billing/usage?request_id=xxx
测试用例1:活力风格基础生成与约束校验
- 功能描述
- 验证新增 style=活力 的生成正确性,满足长度、数字与单位锁定、CTA一次、禁用词为空。
- 前置条件
- 使用全局配置与基线数据
- style="活力",script="zh-Hans",batch_size=1
- 测试步骤
- 发送基础版请求(见全局请求体示例),记录 request_id。
- 提取生成文案 text。
- 使用风格分类器接口或离线分类器,对 text 进行风格识别打分(活力置信度)。
- 校验数字与单位是否原样出现:"6小时"、"150g"。
- 统计字数(以中文字符数计),确认 100-120 区间。
- 检测 CTA 词库词条出现次数(应为1),且为词库中的任意一项。
- 搜索禁用词列表,确认未出现。
- 查询监控日志,确认 style="活力"、style_weight=0.6、dedupe_threshold=0.8、compliance_status=pass。
- 预期结果
- 文案风格活力置信度≥0.6;字数在[100,120];包含且仅包含一次 CTA;包含"6小时"与"150g"原样;无禁用词;日志字段完整。
- 优先级标识
- 关联信息
- 模块:风格控制器,文本合规,评分与重排,监控,模型服务
- 配置:copy.style.weight.default=0.6,copy.dedupe.threshold=0.8
测试用例2:style 取值枚举覆盖(亲和/专业/活力)与差异性
- 功能描述
- 验证三种风格皆可用,且输出在风格用词上具备明显差异。
- 前置条件
- 分别设置 style="亲和"、"专业"、"活力",其他保持基线
- 测试步骤
- 分别请求三次,记录三组 request_id 与输出文本。
- 对三份文本进行风格分类与关键词覆盖率统计(使用对应品牌语气词库)。
- 比较三份文本的风格词占比差异。
- 预期结果
- 三种风格均成功生成;各自文本至少包含2个对应风格词库词条;三者风格分类结果互不混淆(Top-1 风格与请求一致)。
- 优先级标识
- 关联信息
- 模块:风格控制器,品牌词库,模型服务
- 配置:copy.style.enum
测试用例3:缺省 style 参数回退默认风格与默认权重
- 功能描述
- 验证未传入 style 时回退至配置默认风格(亲和)且权重为0.6。
- 前置条件
- 测试步骤
- 发送请求(去掉 style 字段),记录 request_id。
- 检查输出风格分类结果与日志中的 style="亲和",style_weight=0.6。
- 预期结果
- 文案风格为亲和;日志包含默认回退标记 fallback=true;权重为0.6。
- 优先级标识
- 关联信息
- 模块:配置中心,风格控制器,监控
- 配置:copy.style.default="亲和",copy.style.weight.default=0.6
测试用例4:错误 style 值回退默认风格与告警日志
- 功能描述
- 验证传入非法 style 值时系统回退默认风格,并记录告警。
- 前置条件
- 测试步骤
- 发送请求,记录 request_id。
- 检查输出风格分类与日志:style="亲和",warning="invalid_style_value"。
- 预期结果
- 输出为亲和风格;日志包含 invalid_style=true;计数一次告警。
- 优先级标识
- 关联信息
测试用例5:禁用词触发改写与合规通过
- 功能描述
- 当输入卖点含禁用词,系统进行改写或剔除,最终合规通过。
- 前置条件
- selling_points 包含 "医疗级净化"
- 其他同基线;style=活力
- 测试步骤
- 发送请求,记录 request_id。
- 检查输出文本不包含禁用词列表词条。
- 查询合规日志:rewrite_applied=true,rewrite_words=["医疗级"]。
- 预期结果
- 输出无禁用词;合规模块记录改写动作;最终合规状态 pass。
- 优先级标识
- 关联信息
- 模块:文本合规,品牌词库,监控
- 配置:禁用词词库最新版本号
测试用例6:数字与单位锁定
- 功能描述
- 验证数值与单位不被转换、缩放或增删("6小时"、"150g")。
- 前置条件
- 测试步骤
- 发送请求,记录输出文本。
- 逐项匹配固定片段:"保温6小时"、"重量150g"。
- 检查无变体:"6h"、"六小时"、"150 克"、"0.15kg" 不应出现。
- 预期结果
- 优先级标识
- 关联信息
- 模块:文本合规,风格控制器,模型服务
- 配置:数字单位锁定开关(如 copy.lock.units=true)
测试用例7:简体/繁体稳定转换与一致性
- 功能描述
- 验证 zh-Hans 与 zh-Hant 输出语义一致、数值单位一致,长度均符合约束。
- 前置条件
- 两次请求分别设置 script="zh-Hans" 与 "zh-Hant",style=活力
- 测试步骤
- 请求 zh-Hans 与 zh-Hant,记录两份文本。
- 对比:内容语义一致(允许字形差异),保留 "6小时"、"150g" 不变。
- 统计各自字数,均在[100,120]。
- 风格分类两者均为活力。
- 预期结果
- 简繁体版本一致性通过;数值与单位一致;长度符合约束;风格一致。
- 优先级标识
- 关联信息
- 模块:简繁转换,风格控制器,文本合规
- 配置:copy.script.support
测试用例8:长度约束严格校验(边界与批量)
- 功能描述
- 验证批量生成时每条均满足 100-120 字,且靠近边界的文本不越界。
- 前置条件
- batch_size=10;style=活力;script=zh-Hans
- 测试步骤
- 发起批量生成,获取10条文本。
- 对每条统计字数,标记最短与最长样本。
- 确认所有文本字数在[100,120],最短≥100,最长≤120。
- 预期结果
- 优先级标识
- 关联信息
- 模块:模型服务,评分与重排
- 配置:length.min=100,length.max=120
测试用例9:多样性与去重阈值=0.8生效
- 功能描述
- 验证批量去重阈值从0.72提升至0.8后,重复判定逻辑生效:相似度≥0.8的对被剔除,<0.8保留。
- 前置条件
- batch_size=12;style=活力;script=zh-Hans;配置 dedupe_threshold=0.8
- 测试步骤
- 发起生成,获取结果集合。
- 对集合进行两两相似度计算(使用系统评分与重排的对外评分接口)。
- 检查:不存在相似度≥0.8的文案对同时保留。
- 若出现相似度在[0.75,0.79]的对,确认被保留(不被误删)。
- 校验日志 dedupe.threshold=0.8。
- 预期结果
- 去重按0.8阈值执行;≥0.8的对被剔除;[0.75,0.79]范围内的对保留;日志阈值一致。
- 优先级标识
- 关联信息
- 模块:评分与重排,监控,缓存
- 配置:copy.dedupe.threshold=0.8
测试用例10:批量一致性与质量合规率
- 功能描述
- 验证批量结果的一致性与合规率(风格、CTA、数字单位、禁用词)。
- 前置条件
- 测试步骤
- 生成20条文本。
- 对每条进行:风格分类=活力,CTA次数=1,禁用词=0,包含"6小时"与"150g"。
- 计算唯一性比例(集合内去重后 unique_count/total_count)。
- 预期结果
- 合规率=100%;唯一性比例≥0.7;所有文本满足约束。
- 优先级标识
- 关联信息
- 模块:文本合规,风格控制器,评分与重排
- 配置:CTA词库,禁用词词库
测试用例11:tone 旧字段兼容(仅 tone)与优先级(style 覆盖 tone)
- 功能描述
- 验证旧字段 tone 与新字段 style 的兼容与覆盖策略。
- 前置条件
- Case A:仅传 tone="活力",不传 style
- Case B:同时传 tone="活力" 与 style="专业"
- 测试步骤
- Case A:
- 发起请求,仅含 tone="活力"。
- 检查输出风格与日志:style="活力"(由兼容映射),tone_compat_applied=true。
- Case B:
- 发起请求同时含 tone="活力"、style="专业"。
- 检查输出风格与日志:style="专业"(style 优先),tone_ignored=true。
- 预期结果
- 兼容映射生效;存在冲突时 style 覆盖 tone;日志包含兼容与覆盖标记。
- 优先级标识
- 关联信息
- 模块:配置中心,风格控制器,灰度发布
- 配置:copy.tone.compat.enabled=true
测试用例12:灰度开关与 A/B 实验验证(阈值差异)
- 功能描述
- 验证灰度流量按桶划分,A 组使用阈值0.8,B 组使用阈值0.72。
- 前置条件
- 两个固定 user_id:userA 映射到桶 A;userB 映射到桶 B(使用固定散列或测试账号绑定)
- batch_size=10;style=活力
- 测试步骤
- 使用 userA 发起请求,记录去重阈值日志与结果相似度分布。
- 使用 userB 发起请求,记录同样信息。
- 对比两组结果中被剔除的相似对的阈值行为差异。
- 预期结果
- userA 日志 dedupe.threshold=0.8,userB 日志 dedupe.threshold=0.72;两组去重效果与阈值一致。
- 优先级标识
- 关联信息
- 模块:灰度发布,A/B 实验,监控,评分与重排
- 配置:copy.gray.enabled,copy.gray.buckets
测试用例13:缓存键包含阈值与风格,配置变更后不误命中
- 功能描述
- 验证缓存键包含 style、dedupe_threshold 等,配置更新后命中行为正确。
- 前置条件
- 初始 dedupe_threshold=0.8;可在测试窗口临时调回0.72进行对比;style=活力;script=zh-Hans
- 测试步骤
- 以当前 0.8 阈值请求一次,记录返回与缓存命中情况(cache_hit=false)。
- 复查同请求第二次调用,期望命中缓存(cache_hit=true)。
- 将阈值改为0.72(仅测试环境),再次调用同参数。
- 检查缓存命中(应为 false),新结果写入缓存。
- 预期结果
- 第2次命中缓存;阈值变更后不命中旧缓存;缓存键包含 dedupe_threshold、style、script 等维度。
- 优先级标识
- 关联信息
- 模块:缓存,配置中心,监控
- 配置:cache.key.includes
测试用例14:计费记录与免费改写计费边界
- 功能描述
- 验证计费记录与生成次数一致;禁用词改写不产生额外计费(若产品规则规定)。
- 前置条件
- 两次请求:一次基线(无改写),一次含禁用词触发改写;style=活力;batch_size=1
- 测试步骤
- 发起无禁用词请求,查询计费记录:gen_count=1。
- 发起含禁用词请求,查询计费:生成计费 gen_count=1;rewrite 不单独计费(根据产品计费开关)。
- 校验计费行包含 request_id、user_id、style、length、script。
- 预期结果
- 两次生成均计费一次;改写不增加生成计费(若计费开关 rewrite_charge=false);账单字段完整。
- 优先级标识
- 关联信息
- 模块:计费,文本合规,配置中心
- 配置:billing.rewrite_charge=false(测试环境)
测试用例15:监控指标完整性与告警
- 功能描述
- 验证监控与日志字段完整、指标上报正确,非法 style 与禁用词场景触发告警。
- 前置条件
- 测试步骤
- 查询两次请求的监控日志。
- 校验字段:style、style_weight、script、length_range、dedupe_threshold、compliance_status、rewrite_applied、invalid_style、cta_count。
- 校验告警通道收到对应事件。
- 预期结果
- 优先级标识
- 关联信息
- 模块:监控,文本合规,风格控制器
- 指标:copy_gen_total、copy_compliance_rewrite_total、copy_invalid_style_total
测试用例16:专业风格下数字与单位锁定与术语倾向
- 功能描述
- 在 style=专业 下验证术语倾向与数字单位锁定并存。
- 前置条件
- style="专业";script=zh-Hans
- 测试步骤
- 发起请求,记录文本。
- 检测至少2个专业词库词条(如“参数”“标准”“认证”“性能”)。
- 同时检测 "6小时"、"150g" 原样出现。
- 预期结果
- 专业术语覆盖达标;数值单位未变更;长度与CTA、禁用词约束仍满足。
- 优先级标识
- 关联信息
- 模块:风格控制器,品牌词库,文本合规
- 配置:copy.style.enum,禁用词词库
测试用例17:CTA 出现次数严格为一次(重复惩罚)
- 功能描述
- 验证 CTA 次数控制为1,若模型倾向多 CTA,评分重排或合规修正。
- 前置条件
- 测试步骤
- 发起批量请求,记录5条文本。
- 对每条统计 CTA 词库匹配次数。
- 若出现次数≠1,检查重排/修正日志:cta_overuse_detected 与 post-edit applied。
- 预期结果
- 最终输出每条 CTA 次数=1;日志记录修正行为(如有)。
- 优先级标识
- 关联信息
- 模块:文本合规,评分与重排,监控
- 配置:CTA 词库与次数规则
测试用例18:跨脚本缓存与内容一致性(Hans→Hant)
- 功能描述
- 前置条件
- 先请求 zh-Hans,再请求 zh-Hant;style=活力
- 测试步骤
- 请求 zh-Hans,一次命中缓存后再请求 zh-Hant。
- 检查 zh-Hant 请求 cache_hit=false(首次),并写入独立缓存条目。
- 两者文本语义一致但字形不同。
- 预期结果
- 脚本维度参与缓存键;跨脚本不共享缓存;一致性通过。
- 优先级标识
- 关联信息
- 模块:简繁转换,缓存,监控
- 配置:cache.key.includes 包含 script
测试用例19:批量请求的风格强度默认权重生效
- 功能描述
- 验证批量请求中风格强度默认权重0.6对所有条目生效。
- 前置条件
- batch_size=10;style=活力;未显式传 style_weight
- 测试步骤
- 发起请求,记录10条文本与日志。
- 抽样3条进行风格强度打分,查看强度分布均≥0.6。
- 日志包含 style_weight=0.6。
- 预期结果
- 优先级标识
- 关联信息
- 模块:风格控制器,监控
- 配置:copy.style.weight.default=0.6
测试用例20:模型服务错误回退不破坏计费与监控
- 功能描述
- 验证模型服务短暂错误时的重试/回退行为,不产生重复计费与监控丢失。
- 前置条件
- 人为注入一次模型服务 5xx 故障(测试环境支持),style=活力
- 测试步骤
- 发起请求,系统进行一次重试后成功生成。
- 查询计费与监控:gen_count=1;错误计数 model_5xx=1;重试成功标记=1。
- 预期结果
- 优先级标识
- 关联信息
- 模块:模型服务,计费,监控
- 配置:重试策略(如 retry.max=1)
说明与执行建议
- 为保证可重复性,建议固定 user_id、请求参数与测试时间窗口,并在测试环境锁定配置版本。
- 相似度计算建议使用统一的相似度服务或同模型的评分接口,阈值与日志字段以服务输出为准。
- 文本长度统计以 Unicode 字符数为准,不计入空白与控制字符。
- 合规词库、CTA 词库与风格词库版本号需在测试报告中记录,确保跨版本回归可比性。