后端代码测试用例生成器

0 浏览
0 试用
0 购买
Nov 3, 2025更新

本提示词专为开发者和质量保证工程师设计,能够根据函数名称、参数及预期行为自动生成结构化、可复用的后端代码测试用例。通过智能分析代码逻辑和业务场景,确保测试覆盖全面性,显著提升测试效率并降低人工编写成本。支持多种测试类型和优先级设置,适用于单元测试、集成测试等多种测试场景,帮助团队建立高质量的代码测试体系。

函数基本信息

  • 函数名称:composeReleaseNotes
  • 参数说明:
    • commits_text(string):包含约定式提交内容的文本,示例“feat: 支持离线草稿保存; fix: 登录偶发404; perf: 列表渲染耗时降至180ms; chore: 升级依赖”
    • version(string):版本号,示例“v2.3.0”
    • audience(string):目标读者,取值范围示例“终端用户/内部技术/运营”
    • language(string):语言代码,示例“zh-CN”
    • sections(array):输出的发布说明分区标题,示例[“新增”“修复”“性能”]
    • include_breaking_changes(boolean):是否包含重大变更信息
    • summary_length(int):发布摘要最大长度,示例120
    • constraints(object):风格约束,示例{ style: “用简洁动词开头,避免术语堆砌” }
  • 返回值类型:ReleaseNotesResult
    • 结构字段(建议):
      • version(string)
      • audience(string)
      • language(string)
      • summary(string):长度不超过summary_length
      • sections(array<{ title(string), items(array) }>)
      • breaking_changes?(array):当include_breaking_changes为true时包含
      • meta(object):如生成时间、输入校验信息等

测试场景总览

  • P0(高优先级,核心路径)
    1. 标准输入生成结构化发布说明(中文、终端用户、包含“新增/修复/性能”)
    2. 有重大变更但显式不包含(include_breaking_changes=false)
    3. 有重大变更且包含(include_breaking_changes=true)
    4. 摘要长度限制生效(summary_length=120)
    5. 参数校验:非法audience报错
    6. 参数校验:sections为空报错
  • P1(重要场景,健壮性) 7. 忽略未配置分区的提交类型(如chore不进已定义分区) 8. 提交分隔符混合(;;\n),正确解析 9. 受众与语言元信息回填一致(audience、language镜像输入)
  • P2(次要场景,边界与规模) 10. 摘要极短边界(summary_length=1) 11. 大规模提交(200条),结构与性能基本符合

详细测试用例

  • 测试名称:P0-01 标准输入生成结构化发布说明
    • 前置条件:
      • sections=["新增","修复","性能"]
      • language="zh-CN" audience="终端用户"
    • 测试步骤:
      1. 调用composeReleaseNotes传入示例commits_text与version、audience、language、sections、include_breaking_changes=false、summary_length=120
    • 预期结果:
      • 返回对象包含version="v2.3.0"、audience="终端用户"、language="zh-CN"
      • summary存在且长度<=120
      • sections按输入顺序输出,分别包含:
        • “新增”包含“支持离线草稿保存”
        • “修复”包含“登录偶发404”
        • “性能”包含“列表渲染耗时降至180ms”
      • 未出现“chore: 升级依赖”在已定义分区
      • 没有breaking_changes字段或为空(因include_breaking_changes=false)
    • 实际结果:待执行填充
// __tests__/releaseNotes.system.test.js
const { composeReleaseNotes } = require('../src/composeReleaseNotes');

const baseInput = () => ({
  commits_text: 'feat: 支持离线草稿保存; fix: 登录偶发404; perf: 列表渲染耗时降至180ms; chore: 升级依赖',
  version: 'v2.3.0',
  audience: '终端用户',
  language: 'zh-CN',
  sections: ['新增', '修复', '性能'],
  include_breaking_changes: false,
  summary_length: 120,
  constraints: { style: '用简洁动词开头,避免术语堆砌' }
});

describe('composeReleaseNotes - 系统测试', () => {
  test('P0-01 标准输入生成结构化发布说明', () => {
    const input = baseInput();
    const out = composeReleaseNotes(input);

    expect(out).toBeDefined();
    expect(out.version).toBe('v2.3.0');
    expect(out.audience).toBe('终端用户');
    expect(out.language).toBe('zh-CN');
    expect(typeof out.summary).toBe('string');
    expect(out.summary.length).toBeLessThanOrEqual(input.summary_length);

    expect(Array.isArray(out.sections)).toBe(true);
    const titles = out.sections.map(s => s.title);
    expect(titles).toEqual(input.sections);

    const findItems = title => out.sections.find(s => s.title === title)?.items || [];
    expect(findItems('新增')).toContain('支持离线草稿保存');
    expect(findItems('修复')).toContain('登录偶发404');
    expect(findItems('性能')).toContain('列表渲染耗时降至180ms');

    // chore不应进入已定义分区
    expect(findItems('新增')).not.toContain('升级依赖');
    expect(findItems('修复')).not.toContain('升级依赖');
    expect(findItems('性能')).not.toContain('升级依赖');

    // 不包含breaking changes
    expect(out.breaking_changes ?? []).toHaveLength(0);
  });
  • 测试名称:P0-02 重大变更存在但不包含
    • 前置条件:include_breaking_changes=false
    • 测试步骤:
      1. commits_text包含“feat!: 重构认证流程”与“BREAKING CHANGE: 令牌格式变更”
      2. 调用composeReleaseNotes
    • 预期结果:
      • sections不新增“重大变更”条目
      • out.breaking_changes为空或未定义
      • summary不包含“重大变更”敏感提示
    • 实际结果:待执行填充
  test('P0-02 重大变更存在但不包含', () => {
    const input = {
      ...baseInput(),
      commits_text: 'feat!: 重构认证流程; BREAKING CHANGE: 令牌格式变更; fix: 修复刷新令牌异常'
    };
    input.include_breaking_changes = false;

    const out = composeReleaseNotes(input);
    const itemsAll = out.sections.flatMap(s => s.items);
    expect(itemsAll.join(' ')).not.toMatch(/重大变更|BREAKING/i);
    expect(out.breaking_changes ?? []).toHaveLength(0);
  });
  • 测试名称:P0-03 重大变更包含输出
    • 前置条件:include_breaking_changes=true
    • 测试步骤:
      1. commits_text包含“feat!: 重构认证流程; BREAKING CHANGE: 令牌格式变更”
      2. 调用composeReleaseNotes
    • 预期结果:
      • out.breaking_changes为数组,包含“重构认证流程”或“令牌格式变更”
      • summary长度<=summary_length
    • 实际结果:待执行填充
  test('P0-03 重大变更包含输出', () => {
    const input = {
      ...baseInput(),
      commits_text: 'feat!: 重构认证流程; BREAKING CHANGE: 令牌格式变更; perf: 降低CPU占用',
      include_breaking_changes: true
    };
    const out = composeReleaseNotes(input);
    expect(Array.isArray(out.breaking_changes)).toBe(true);
    const bc = out.breaking_changes.join(' ');
    expect(bc).toMatch(/重构认证流程|令牌格式变更/);
    expect(out.summary.length).toBeLessThanOrEqual(input.summary_length);
  });
  • 测试名称:P0-04 摘要长度限制生效
    • 前置条件:summary_length=120
    • 测试步骤:
      1. 使用多条提交生成长摘要
    • 预期结果:
      • summary长度<=120
      • summary不为空
    • 实际结果:待执行填充
  test('P0-04 摘要长度限制生效', () => {
    const input = {
      ...baseInput(),
      commits_text: 'feat: 新增A; feat: 新增B; fix: 修复C; perf: 优化D; feat: 新增E; fix: 修复F'
    };
    const out = composeReleaseNotes(input);
    expect(out.summary).toBeTruthy();
    expect(out.summary.length).toBeLessThanOrEqual(input.summary_length);
  });
  • 测试名称:P0-05 非法audience报错
    • 前置条件:audience不在支持范围
    • 测试步骤:
      1. 设置audience="市场"
      2. 调用composeReleaseNotes
    • 预期结果:
      • 抛出错误或返回错误对象,包含可读错误信息
    • 实际结果:待执行填充
  test('P0-05 非法audience报错', () => {
    const input = { ...baseInput(), audience: '市场' };
    expect(() => composeReleaseNotes(input)).toThrow();
  });
  • 测试名称:P0-06 sections为空报错
    • 前置条件:sections=[]
    • 测试步骤:
      1. 调用composeReleaseNotes
    • 预期结果:
      • 抛出错误或返回错误对象
    • 实际结果:待执行填充
  test('P0-06 sections为空报错', () => {
    const input = { ...baseInput(), sections: [] };
    expect(() => composeReleaseNotes(input)).toThrow();
  });
  • 测试名称:P1-07 未配置分区的提交类型应忽略
    • 前置条件:sections不含“其他”
    • 测试步骤:
      1. commits_text包含chore、docs
    • 预期结果:
      • 已定义分区不包含chore/docs项
    • 实际结果:待执行填充
  test('P1-07 未配置分区的提交类型应忽略', () => {
    const input = {
      ...baseInput(),
      commits_text: 'chore: 升级依赖; docs: 完善使用文档; feat: 新增导出功能; fix: 修复空指针'
    };
    const out = composeReleaseNotes(input);
    const all = out.sections.flatMap(s => s.items).join(' ');
    expect(all).toMatch(/新增导出功能/);
    expect(all).toMatch(/修复空指针/);
    expect(all).not.toMatch(/升级依赖|使用文档/);
  });
  • 测试名称:P1-08 分隔符混合解析
    • 前置条件:提交用;、;和换行分隔
    • 测试步骤:
      1. 调用composeReleaseNotes
    • 预期结果:
      • 所有提交被正确解析并入分区
    • 实际结果:待执行填充
  test('P1-08 分隔符混合解析', () => {
    const input = {
      ...baseInput(),
      commits_text: 'feat: 新增批量导入;fix: 修复搜索异常\nperf: 降低内存使用; chore: 清理脚本'
    };
    const out = composeReleaseNotes(input);
    const findItems = t => out.sections.find(s => s.title === t)?.items || [];
    expect(findItems('新增')).toContain('新增批量导入');
    expect(findItems('修复')).toContain('修复搜索异常');
    expect(findItems('性能')).toContain('降低内存使用');
    // chore忽略
    expect(findItems('新增')).not.toContain('清理脚本');
  });
  • 测试名称:P1-09 受众与语言元信息一致
    • 前置条件:audience="终端用户" language="zh-CN"
    • 测试步骤:
      1. 调用composeReleaseNotes
    • 预期结果:
      • out.audience===输入audience
      • out.language===输入language
    • 实际结果:待执行填充
  test('P1-09 受众与语言元信息一致', () => {
    const input = baseInput();
    const out = composeReleaseNotes(input);
    expect(out.audience).toBe(input.audience);
    expect(out.language).toBe(input.language);
  });
  • 测试名称:P2-10 摘要极短边界
    • 前置条件:summary_length=1
    • 测试步骤:
      1. 调用composeReleaseNotes
    • 预期结果:
      • summary长度<=1
      • 函数不崩溃,sections仍按规则生成
    • 实际结果:待执行填充
  test('P2-10 摘要极短边界', () => {
    const input = { ...baseInput(), summary_length: 1 };
    const out = composeReleaseNotes(input);
    expect(out.summary.length).toBeLessThanOrEqual(1);
    expect(out.sections.length).toBeGreaterThan(0);
  });
  • 测试名称:P2-11 大规模提交
    • 前置条件:生成200条feat/fix/perf混合提交
    • 测试步骤:
      1. 构造长commits_text
      2. 调用composeReleaseNotes,设置include_breaking_changes=false
    • 预期结果:
      • sections包含大量items,且不为空
      • summary长度<=summary_length
      • 运行在合理时间(<500ms)
    • 实际结果:待执行填充
  test('P2-11 大规模提交', () => {
    const feats = Array.from({ length: 80 }, (_, i) => `feat: 新增功能${i+1}`).join('; ');
    const fixes = Array.from({ length: 80 }, (_, i) => `fix: 修复问题${i+1}`).join('; ');
    const perfs = Array.from({ length: 40 }, (_, i) => `perf: 优化性能点${i+1}`).join('; ');
    const input = {
      ...baseInput(),
      commits_text: `${feats}; ${fixes}; ${perfs}`,
      include_breaking_changes: false
    };
    const start = Date.now();
    const out = composeReleaseNotes(input);
    const duration = Date.now() - start;

    expect(out.summary.length).toBeLessThanOrEqual(input.summary_length);
    expect(out.sections.find(s => s.title === '新增')?.items.length || 0).toBeGreaterThan(70);
    expect(out.sections.find(s => s.title === '修复')?.items.length || 0).toBeGreaterThan(70);
    expect(out.sections.find(s => s.title === '性能')?.items.length || 0).toBeGreaterThan(30);
    expect(duration).toBeLessThan(500);
  });
});

测试覆盖分析

  • 关键路径覆盖率:
    • 提交解析与分类(feat/fix/perf/chore):覆盖
    • 分区生成与顺序保持:覆盖
    • 摘要生成与长度控制:覆盖(正常与极短边界)
    • 重大变更开关(on/off):覆盖
    • 参数校验(audience、sections):覆盖
    • 分隔符兼容(;、;、\n):覆盖
    • 规模输入处理(性能基本线):覆盖
  • 风险点说明:
    • 重大变更提取规则可能依赖“feat!:”或“BREAKING CHANGE:”语法,测试已覆盖两者的存在但未覆盖其他表达方式。
    • constraints风格约束未进行语义级验证,仅通过摘要长度与基础文本检查,若需更强约束需增加术语黑名单断言或可读性评分。
    • 国际化除分区标题外未强校验文案语气;若函数根据audience/language调整措辞,需补充更细粒度断言。

执行建议

  • 测试执行顺序:
    1. 先跑P0用例(P0-01至P0-06),确保核心功能与校验稳定
    2. 运行P1用例(P1-07至P1-09),验证健壮性与兼容性
    3. 最后运行P2用例(P2-10至P2-11),验证边界与规模输入
  • 环境要求:
    • Node.js ≥ 18
    • 包管理:npm或yarn
    • 测试框架:Jest ≥ 29(在package.json配置测试脚本)
    • 统一时区与本地化设置:LANG=zh_CN.UTF-8(如函数依赖系统locale)
    • 代码风格与断言库使用默认Jest,无需额外依赖

示例详情

解决的问题

将函数名称、参数与期望行为快速转化为完整、可复用的后端测试用例套件;在几分钟内覆盖正常流程、边界与异常场景,并自动给予优先级与执行建议;显著降低人工编写成本与遗漏风险,为单元、集成、回归等测试场景提供标准化输出,帮助团队提升发布速度与质量稳定,激发试用兴趣并清晰展示进阶版本的付费价值。

适用用户

后端开发工程师

新功能提交前,一键生成基础与边界测试,用最短时间验证核心逻辑,提升重构与合并的安全性。

QA测试工程师

将需求与函数说明快速转成结构化用例,按风险设优先级,覆盖异常路径,减少手写与沟通成本。

技术负责人/架构师

为团队统一测试规范,查看覆盖与风险综述,决定补测计划与资源投入,持续提升质量指标。

特征总结

一键生成结构化后端测试用例,基于函数名与参数自动匹配业务场景,快速上手。
自动识别正常流程、边界与异常场景,全面覆盖关键路径,降低漏测与回归风险。
按优先级自动排列执行顺序,先测高风险与核心逻辑,帮助团队快速抓住质量要点。
支持单元与集成测试类型一键切换,生成可复用模板,适配不同项目与框架节奏。
自动输出清晰的测试步骤与预期结果,降低沟通成本,让新人也能按图执行不走偏。
基于业务上下文进行智能分析,自动补齐遗漏场景与断言,减少手动维护与返工。
内置最佳实践规范与可维护结构,生成结果稳定可复用,便于持续迭代与版本管理。
适配代码审查、重构与持续集成流程,自动补充覆盖空白,让质量提升与交付速度并行。
支持自定义参数与结果样式,一键套用团队规范,快速融入现有测试与评审流程。
提供覆盖率与风险点综述,帮助定位薄弱环节,指导后续补测与资源分配决策。

如何使用购买的提示词模板

1. 直接在外部 Chat 应用中使用

将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。

2. 发布为 API 接口调用

把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。

3. 在 MCP Client 中配置使用

在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。

AI 提示词价格
¥20.00元
先用后买,用好了再付款,超安全!

您购买后可以获得什么

获得完整提示词模板
- 共 653 tokens
- 3 个可调节参数
{ 函数名称 } { 参数描述 } { 测试类型 }
获得社区贡献内容的使用权
- 精选社区优质案例,助您快速上手提示词
限时免费

不要错过!

免费获取高级提示词-优惠即将到期

17
:
23
小时
:
59
分钟
:
59