用途:为 Prowler SDK(Python)编写单元测试时提供 Prowler 特有的约定。通用 pytest 模式(fixtures、mocking、parametrize、markers)请参考 pytest 技能;完整文档见 docs/developer-guide/unit-testing.mdx。
主要能力与关键约定:按提供商区分模拟方式。AWS 使用 moto 库与 @mock_aws 装饰器;Azure、GCP、K8s 及其他提供商使用 MagicMock,无装饰器。禁止对非 AWS 提供商使用 moto,禁止对 AWS 使用 MagicMock。
AWS 检查测试:用 set_mocked_aws_provider([AWS_REGION_US_EAST_1]) 构造 provider,patch Provider.get_global_provider 与检查模块内的 {service}_client,并务必在 mock.patch 上下文内部导入检查模块。
Azure 检查测试:用 set_mocked_azure_provider() 与 MagicMock 直接模拟服务客户端,资源模型放入 {service}client.{resources} 字典,键为 AZURE_SUBSCRIPTION_ID。GCP/K8s 等沿用 Azure 的 MagicMock 模式,各自使用 set_mocked{provider}_provider 与对应 fixtures 文件。
测试文件结构:tests/providers/{provider}/services/{service}/ 下放 {service}_service_test.py,检查测试放 {check_name}/{check_name}_test.py;测试目录不要创建 init.py。
必需场景:资源合规(status == "PASS")、资源不合规(status == "FAIL")、无资源(len(results) == 0)。断言应包含 status、status_extended、resource_id、resource_name,以及提供商特有字段如 region(AWS)、subscription(Azure)、project_id(GCP)。
运行命令:uv run pytest -n auto -vvv tests/;指定提供商 uv run pytest tests/providers/{provider}/ -v;指定检查 uv run pytest tests/providers/{provider}/services/{service}/{check_name}/ -v;首次失败即停止 uv run pytest -x tests/。
限制:本技能仅覆盖 Prowler 特有约定,不替代通用 pytest 知识;模板见 assets/,官方文档链接见 references/testing-docs.md。