该技能是针对 modelcontextprotocol/python-sdk 仓库的测试与代码质量规范,用于编写、评审和设计测试时参考,也可供 agent 驱动的工作流程使用。测试名需是可观察结果的行为句,如 test_elicit_form_decline_returns_no_content;使用顶层 test_* 函数,不用 Test 类(旧文件中的也不要照抄)。docstring 用 1–2 句说明行为并交代来源,如规范强制、SDK 定义或已知缺口,便于失败时定位。定义按依赖顺序书写,不前置引用;客户端与服务端测试按 handler→服务端构造→客户端建立→动作→断言的顺序阅读。尽量把服务端或同等设置内联到测试中,只有同文件多个测试真正共享时才提到文件级 fixture,禁止跨文件共享。抽象层级上,应通过能观察该属性的最高层公开 API 驱动;手工构造的线上请求脆弱且不能证明用户可见契约,仅当断言无法由高层 API 观察(如状态码、头部、线上分帧)时才降到原始 HTTP;用原始流脚本化对端是最后手段,且 docstring 必须说明公开 API 无法做到的原因。优先内存或进程内测试,HTTP、SSE 和认证类行为可通过进程内 ASGI 传输驱动,线程仅在必要时、子进程仅在进程边界本身是被测对象时使用。测试应像真实用户代码,断言必须证明往返,不能依赖侧信道状态。转换类断言用全对象 snapshot 相等,通过 --inline-snapshot=fix 重新生成,不得手改快照字面量;透传值用同一变量做身份断言;错误用 pytest.raises 加 .code 对命名常量断言,SDK 消息做快照,绝不 match= 消息文本,第三方文本只用稳定前缀。确定性方面禁止 sleep,用 anyio.Event 协调等待,用 anyio.fail_after(5) 限制不定等待,禁止断言墙钟时间;并发测试必须用事件门证明真正交错,不要过度同步;异步测试用 anyio 而非 asyncio。行为哲学是固定当前行为、绝不 xfail,规范不足处固定分歧输出并记录缺口。卫生方面默认不新增 pragma、type: ignore、noqa,测试中警告是待修项,未调用的注册 handler 应 raise NotImplementedError,测试工作不应副作用修改 src/,唯一机械例外是删除新测试已覆盖的 pragma。流程上以 ≤10 个测试为一批、多 agent 时每 agent ≤5 个,设计、评审、实现分步进行,高风险区引入新的对抗性评审者;验证用 uv run --frozen pytest <file> -q、pyright、ruff,集成时跑全量测试、覆盖率与 ./scripts/test(改动 src/ 时)。具体适用场景、收费与平台支持暂未提供。
test-quality
测试与质量
更新于 10-16 09:59