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) 中的选项强制执行已禁用的测试

### 编辑测试
请参阅 [编辑文档](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, 冒烟测试, 可观测性, 后端开发, 后端开发, 后端开发, 回归测试, 多语言支持, 子域名突变, 安全测试框架, 安全规则引擎, 安全防御评估, 库注入, 应用性能监控, 性能测试, 数据擦除, 无后门, 测试框架, 漏洞利用检测, 知识库, 端到端测试, 系统测试, 网络流量审计, 请求拦截, 软件质量保证, 逆向工具, 集成测试, 黑盒测试