DataDog/system-tests

GitHub: DataDog/system-tests

DataDog 官方推出的多语言 APM 追踪库与 Agent 黑盒测试框架,支持跨语言的集成、冒烟、性能和模糊测试。

Stars: 46 | Forks: 14

## 什么是 system-tests? 🛟 Slack: [#apm-shared-testing](https://dd.enterprise.slack.com/archives/C025TJ4RZ8X) 🛟 一个旨在针对我们的 dd-trace 库套件运行高级测试(集成、冒烟、功能、模糊和性能)的工作台。 System tests 是一个测试工作台,允许对库(也称为 tracer)和 agent 进行任何类型的功能测试。它的构建基于几个关键原则: * *黑盒测试*:仅检查组件的接口。由于这些接口非常稳定,我们的测试可以在不做任何关于底层实现假设的情况下进行断言。“不管引擎如何,检查汽车是否能移动” * 测试不同语言的多种 tracer 库实现:Java, Node.js, Python, PHP, Ruby, C++, .NET, Go, 和 Rust * 使用 pytest 实现适用于所有 tracer 库实现的测试 ## 仓库结构 ``` system-tests/ |-- binaries/ # Folder to store binary tracer files for testing specific versions of libraries |-- docs/ # Documentation files |-- lib-injection/ # Weblogs for testing library injection |-- manifests/ # YAML config files for tests activation (ie. a test will be activated after specific version of the tracer). |-- tests/ # Test implementations |-- utils/ # Utility code and shared libraries | |-- _context/ # Test context and scenario definitions | | |-- _scenarios/ # Scenario implementations | | | |-- appsec_low_waf_timeout.py # AppSec WAF timeout scenario | | | |-- auto_injection.py # Auto-injection scenario | | | |-- default.py # Default scenario implementation | | | |-- docker_ssi.py # Docker SSI scenario | | | |-- endtoend.py # End to end testing framework | | | |-- parametric.py # Parametric scenario | | | |-- k8s_lib_injection.py # K8s lib injection scenario | |-- assets/ # Images and other static assets | |-- build/ # Build utilities and scripts | | |-- docker/ # Docker templates for weblogs used on end to end testing. | | |-- ssi/ # Docker SSI build utilities (includes weblogs) | | |-- virtual_machine/ # AWS SSI scenarios and weblog provisions | | | |-- provisions/ # AWS SSI scenarios provision definitions | | | |-- weblogs/ # AWS SSI weblog provision | |-- docker_ssi/ # Docker SSI utilities | |-- grpc/ # gRPC related utilities | |-- interfaces/ # Interface definitions for components | |-- k8s_lib_injection/ # Kubernetes lib injection utilities | |-- onboarding/ # AWS SSI/Onboarding utilities | |-- parametric/ # Parametric testing utilities | |-- proxy/ # Proxy server implementation | |-- scripts/ # Helper and utility scripts | | |-- ci_orchestrators/ # CI pipeline scripts | | |-- parametric/ # Scripts for parametric tests | | |-- slack/ # Slack notification utilities | | |-- ssi_wizards/ # SSI wizard scripts | |-- telemetry/ # Telemetry utilities | |-- virtual_machine/ # VM configuration and management | |-- build.sh # Script to build test environment |-- run.sh # Script to run tests and scenarios ``` ## 驱动 System-Tests 的技术 System-tests 利用各种工具和框架来创建全面的测试环境: - **Python**: 我们用于测试实现和编排的主要编程语言 - **pytest**: 核心测试框架,提供结构、fixtures 和断言 - **Docker & Docker API**: 用于创建隔离环境,以在不同语言的 tracer 之间进行可复现的测试 - **Kubernetes API**: 用于在容器化环境中测试库注入 - **Kind/Minikube**: 用于 K8s 库注入测试的本地 Kubernetes 集群 - **Pulumi**: 基础设施即代码工具,用于基于 AWS 的 SSI 测试 - **AWS API**: 用于需要云基础设施的测试(主要用于 SSI 测试) 这些技术协同工作,支持跨不同部署模式、语言和基础设施配置的测试。 ## 最低要求(端到端测试) 要运行 system-tests,您需要以下核心组件: - **`bash`** - 用于运行脚本和命令 - **`docker`** - 用于容器化(建议版本 20.10+) - **`python3.12`** - 用于测试实现和编排 ### Python 3.12 安装 我们强烈建议通过 [pyenv](https://github.com/pyenv/pyenv#getting-pyenv) 安装 Python 3.12,这是一个管理多个 Python 版本的工具,同时将 system-tests 的依赖项隔离在它们的虚拟环境中。 如果您不想使用 pyenv,以下是针对特定平台的安装说明: #### Ubuntu/Debian ``` sudo add-apt-repository ppa:deadsnakes/ppa sudo apt update sudo apt install python3.12 python3.12-distutils python3.12-venv python3.12-dev curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python3.12 get-pip.py ./build.sh -i runner ``` #### macOS 对于 Homebrew 用户: ``` brew install python@3.12 ``` #### Windows 即将支持。 ### 附加要求 特定场景可能需要额外的工具: - **Kubernetes 测试**: 需要 Kind/Minikube 用于本地 K8s 集群 - **AWS SSI 测试**: 需要 AWS 凭证和 Pulumi 设置 ## 快速开始 ### 运行测试/场景 运行 system-tests 涉及几个关键步骤: 1. **设置 Python 环境**: # 安装 Python 依赖并创建虚拟环境 ./build.sh -i runner # 激活虚拟环境 source venv/bin/activate 2. **构建必要的镜像**,针对您想要测试的语言: # 将 替换为:java, nodejs, python, ruby, php, dotnet, cpp, 或 golang ./build.sh # 测试 Python tracer 的示例 ./build.sh python 3. **运行测试**,使用以下方法之一: # 运行所有默认测试 ./run.sh # 运行特定场景 ./run.sh # 运行特定测试文件 ./run.sh tests/test_smoke.py # 运行特定测试类或方法 ./run.sh tests/parametric/test_waf.py::Test_WAFAddresses::test_post_json_value # 运行并为每个测试应用超时 ./run.sh -v --timeout= 有关更多高级选项: - 参阅 [运行文档](docs/execute/run.md) 了解测试选择详情 - 查看 [构建文档](docs/execute/build.md) 以自定义镜像和 weblog 变体 - 在 [skip-tests.md](docs/edit/skip-tests.md) 和 [enable-test.md](docs/edit/enable-test.md) 中了解如何管理已禁用的测试 - 使用 [force-execute 文档](docs/execute/force-execute.md) 中的选项强制执行已禁用的测试 ![成功时的输出](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/48baf153cf125818.png) ### 编辑测试 请参阅 [编辑文档](docs/edit/README.md)。 ### 理解测试 **[完整文档](https://github.com/DataDog/system-tests/blob/main/docs)** System-tests 支持各种运行测试的场景;在 [scenarios/README.md](docs/scenarios/README.md) 中阅读有关本仓库涵盖的不同类型测试的更多信息。 在 [架构概览](https://github.com/DataDog/system-tests/blob/main/docs/architecture/overview.md) 中了解测试架构。 ``` flowchart TD BUILDNODE[./build.sh nodejs] --> BUILT BUILDDOTNET[./build.sh dotnet] --> BUILT BUILDJAVA[./build.sh java] --> BUILT BUILDGO[./build.sh golang] --> BUILT BUILDPHP[./build.sh php] --> BUILT BUILDPY[./build.sh python] --> BUILT BUILDRUBY[./build.sh ruby] --> BUILT BUILT[Build complete] --> RUNDEFAULT RUNDEFAULT[./run.sh] -->|wait| FINISH FINISH[Tests complete] --> LOGS FINISH[Tests complete] --> OUTPUT OUTPUT[Test output in bash] LOGS[Logs directory per scenario] ``` ## AI 集成指南:支持的工具与实施指南 `system-tests` 仓库包含内置规则,旨在提高开发人员在实施新测试和排查问题时的效率。这些默认规则简化了工作流程,最大限度地减少了常见错误,并利用了最佳实践,帮助您实现更快、更可靠的测试结果。 探索全部功能并了解如何通过访问 [AI 工具集成指南](docs/ai/ai-tools-integration-guide.md) 最大化发挥这些工具的潜力
标签:Agent, API集成, APM, AppSec, C++, CISA项目, Datadog, dd-trace, Docker, GNU通用公共许可证, Go, Node.js, OpenVAS, PHP, Pytest, Python, Python工具, Ruby, Ruby工具, Rust, Tracer, WAF, Weblog, 冒烟测试, 可观测性, 后端开发, 后端开发, 后端开发, 回归测试, 多语言支持, 子域名突变, 安全测试框架, 安全规则引擎, 安全防御评估, 库注入, 应用性能监控, 性能测试, 数据擦除, 无后门, 测试框架, 漏洞利用检测, 知识库, 端到端测试, 系统测试, 网络流量审计, 请求拦截, 软件质量保证, 逆向工具, 集成测试, 黑盒测试