用途:该技能是 myai 测试技能体系的 Python 专属补充,覆盖 Python 测试工具与模式,包括 pytest fixtures、CLI/e2e 测试、容器化测试、mock 服务器和 pytest-qt。使用前需先加载 high-level-testing-strategy、test-driven-development、manual-testing,并假定 using-my-skills 与 engineering-principles 已通过 myai bootstrap 加载。测试理念、TDD 红绿重构流程与人工验证模式分别见上述父技能,本技能不重复。
主要能力与用法:
- 测试优先级:CLI/e2e(用 subprocess.run(["uv", "run", "poe", "app", ...]) 检查输出与退出码)> 集成(公共 API、真实临时目录、pytest-httpserver)> 单元(纯数据转换函数);跳过框架胶水、UI 布局、平凡 getter。
- 目录结构:tests/ 下分 unit/、integration/、fixtures/,并有 conftest.py 共享 fixture。
- pyproject.toml 配置 [tool.pytest.ini_options],含 testpaths、python_files、python_classes、python_functions、asyncio_mode、addopts=["-n", "auto", "--dist", "worksteal"] 及 unit、integration 标记;依赖组 dev 含 pytest>=9.0.1、pytest-xdist>=3.5.0、pytest-cov>=7.0.0、pytest-asyncio>=1.3.0,pytest-qt、pytest-httpserver 为可选(默认注释)。
- 示例覆盖 CLI 测试、Result 模式测试、async 测试;fixtures 含 tmp_path 临时目录、monkeypatch 环境覆盖(如 XDG_CONFIG_HOME/XDG_DATA_HOME,跨平台建议注入目录或 monkeypatch platformdirs)、样本数据、真实 HTTP 服务器 mock。
- 运行:uv run poe test;uv run pytest tests/unit/;uv run pytest -n0(串行调试);uv run pytest --cov。默认并行,可用 -n0 或 -n4 覆盖。
- 隔离:文件用 tmp_path,环境变量用 monkeypatch,teardown 用 yield fixtures;flaky 测试见 systematic-debugging。
- 覆盖率建议:核心业务逻辑>70%、CLI 命令>70%、UI 组件>40%、工具按需。
- 重量级测试:用真实 HTTP 服务器替代 @patch("requests.get"),用自定义轻量二进制替代 @patch("subprocess.run"),用容器内真实数据库替代 Mock 数据库,用 tmp_path/容器卷真实文件系统替代文件操作 monkeypatch,用真实 DBus 守护进程替代 mock。含 docker-compose.test.yml、容器生命周期 fixture、mock 二进制、有状态 mock API、真实 DBus 会话 fixture。
限制:DBus、docker/容器与 POSIX mock 二进制模式为 Linux/主机专属,需用 sys.platform 或 pytest.mark.skipif 门控以保证 Windows 上通过;跨平台路径隔离建议 tmp_path 加 platformdirs monkeypatch。资料未提供收费、价格与平台支持信息。