Skip to content

PRD → 测试用例生成

场景

需求评审后,希望快速产出关键测试用例,并能在评审时对齐边界与异常覆盖。

方案

  • 用 Agent 读 PRD,输出结构化测试用例
  • TriggerFlow 负责流程与复用
  • Output Format 保障字段结构稳定

代码

python
from agently import Agently, TriggerFlow, TriggerFlowEventData

Agently.set_settings("prompt.add_current_time", False)
Agently.set_settings("OpenAICompatible", {
  "base_url": "http://localhost:11434/v1",
  "model": "qwen2.5:7b",
  "model_type": "chat",
})

agent = Agently.create_agent()

prd = """
功能:手机号验证码登录
- 用户输入手机号,点击获取验证码
- 若手机号不合法,提示错误
- 验证码有效期 5 分钟
- 同一手机号 60 秒内只能请求一次验证码
- 验证码校验通过后登录成功
- 登录成功后跳转首页
""".strip()

flow = TriggerFlow()

@flow.chunk
async def gen_cases(_: TriggerFlowEventData):
  result = await (
    agent
    .input(prd)
    .instruct("基于 PRD 输出 3 条关键测试用例,包含边界与异常。")
    .output({
      "test_cases": [
        {
          "id": ("str", "用例编号"),
          "title": ("str", "用例标题"),
          "priority": ("str", "P0/P1/P2"),
          "type": ("str", "功能/异常/安全"),
          "preconditions": [("str", "前置条件")],
          "steps": [("str", "步骤")],
          "expected": [("str", "预期结果")],
        }
      ],
      "risks": [("str", "潜在风险")],
    })
    .async_start()
  )
  return result

flow.to(gen_cases).end()
result = flow.start("run")
print(result)

运行结果

text
{'test_cases': [{'id': 'TC_LOGIN_101', 'title': '输入合法手机号,正常获取验证码并登录', 'priority': 'P1', 'type': '功能', 'preconditions': ['用户有未完成的登录请求', '手机网络可用'], 'steps': ['用户输入正确的手机号码:13800001234', '点击获取验证码', '系统发送短信验证码至正确的手机号'], 'expected': ['验证码发送成功,页面显示发送验证码的提示信息', '验证码窗口有效期为5分钟,不能过期前再次请求', '在有效期内点击验证码按钮会自动填充正确的验证码,并尝试登录验证通过后跳转到首页']}, {'id': 'TC_LOGIN_102', 'title': '输入非法手机号,显示错误提示', 'priority': 'P1', 'type': '异常', 'preconditions': ['系统中已存储正确验证码规则'], 'steps': ['用户输入非法手机号码:133aabbcccde', '点击获取验证码'], 'expected': ['提示框显示错误信息,例如“请输入合法的手机号码”', '验证码发送失败']}, {'id': 'TC_LOGIN_103', 'title': '同一手机号60秒内只能请求一次验证码,超时后可以再次请求', 'priority': 'P2', 'type': '安全', 'preconditions': ['用户发送了两次验证码请求'], 'steps': ['用户输入正确手机号码:13800001234并点击获取验证码', '等待59秒后重复点击获取验证码', '等待超过60秒后再次点击获取验证码'], 'expected': ['首次请求发送验证码成功,提示“5分钟内只能发送一次”或者类似信息', '在60秒内再次请求无法发送新验证码且未过期,则提示“5分钟内只能发送一次”', '等待超过60秒后第二次请求发送验证码成功']}], 'risks': ['如果验证码系统的验证机制失效,可能导致用户绕过验证码直接登录。', '短信频次超出限制可能触发运营商封号或影响用户体验。']}