Endava/cats
GitHub: Endava/cats
基于 OpenAPI 规范的 REST API 模糊测试与负面测试工具,无需编码即可自动生成、运行和报告数千个自愈测试用例。
Stars: 1346 | Forks: 87

[](https://github.com/Endava/cats/pulse)
[](https://opensource.org/licenses/Apache-2.0)
[](https://openjdk.org)
[](https://www.graalvm.org)
[](https://sonarcloud.io/dashboard?id=cats)
[](https://sonarcloud.io/dashboard?id=cats)
[](https://sonarcloud.io/dashboard?id=cats)
[](https://sonarcloud.io/dashboard?id=cats)
**REST API fuzzer 和负面测试工具。在几分钟内运行数千个自愈 API 测试,无需编写代码!**
- **全面**:测试基于大量场景自动生成,覆盖**每一个**字段和标头
- **智能**:测试根据数据类型和约束生成;每个 Fuzzer 根据被测场景都有特定的预期
- **高度可配置**:高度可定制:您可以过滤特定的 Fuzzer、HTTP 响应代码、HTTP 方法、请求路径,提供业务上下文等等
- **自愈**:随着测试的生成,任何 OpenAPI 规范的更改都会自动被识别
- **易于学习**:学习曲线平缓,配置和语法直观
- **快速**:自动化的编写、运行和报告测试流程,可在几分钟内覆盖数千个场景
# 概述
通过使用简单且极简的语法,加上平缓的学习曲线,CATS(**C**ontract **A**PI **T**esting 和 **S**ecurity,契约 API 测试与安全)使您能够在几分钟内生成数千个 API 测试,**无需编写代码**。
所有测试都基于预定义的 **100+ Fuzzers** 集**自动生成、运行和报告**。
这些 Fuzzers 涵盖了广泛的边界测试和负面场景,从完全随机的大型 Unicode 值到基于请求数据类型和约束精心制作的、依赖于上下文的值。
此外,您可以利用 CATS 动态生成请求负载的特性,编写简单的端到端功能测试。
## HTML 报告
## 命令行
# 关于如何使用 CATS 的教程
这是一些包含如何使用 CATS 的分步指南的文章列表:
* [使用 CATS 测试 GitHub API](https://ludovicianul.github.io/posts/github-api-testing/)
* [如何编写无需编码的自愈功能测试](https://ludovicianul.github.io/posts/self-healing-api-tests/)
# CATS 发现的一些 Bugs
- https://github.com/hashicorp/vault/issues/13274 | https://github.com/hashicorp/vault/issues/13273
- https://github.com/hashicorp/vault/issues/13225 | https://github.com/hashicorp/vault/issues/13232
- https://github.com/go-gitea/gitea/issues/19397 | https://github.com/go-gitea/gitea/issues/19398
- https://github.com/go-gitea/gitea/issues/19399
# 安装
## Homebrew
```
> brew tap endava/tap
> brew install cats
```
## 手动安装
CATS 打包为可执行 JAR 或原生二进制文件。原生二进制文件不需要安装 Java。
下载适合您操作系统的原生二进制文件后,您可以将其添加到 PATH 中,以便像任何其他命令行工具一样执行它:
```
sudo cp cats /usr/local/bin/cats
```
您还可以通过下载 [cats_autocomplete](cats_autocomplete) 脚本并执行以下命令来获取自动补全功能:
```
source cats_autocomplete
```
要获得持久的自动补全功能,请将上述行添加到 `.zshrc` 或 `.bashrc` 中,但请确保使用 `cats_autocomplete` 脚本的完整路径。
您也可以查看 `cats_autocomplete` 源码以了解其他设置方式。
Windows 没有原生二进制文件,但您可以使用 uberjar 版本。这需要安装 Java 25+。
您可以以 `java -jar cats.jar` 的方式运行它。
前往 releases 页面下载最新版本:[https://github.com/Endava/cats/releases](https://github.com/Endava/cats/releases)。
## 从源码构建
您可以在本地机器上从源码构建 CATS。您需要 [Java 21+](https://sdkman.io/jdks)。Maven 已捆绑。
您可以使用以下 Maven 命令将项目构建为 uberjar:
`./mvnw package -Dquarkus.package.type=uber-jar`
您将在 `target` 文件夹中得到一个 `cats-runner.jar`。您可以使用 `java -jar cats-runner.jar ...` 运行它。
您也可以使用 [GraalVM Java 版本](https://www.graalvm.org/) 构建原生镜像。
`./mvnw package -Pnative`
### 关于单元测试的说明
在运行单元测试时,您可能会看到一些 `error` 日志消息。这些是测试 Fuzzer 负面场景时的预期行为。
## 实验性:用于编程使用的 Maven 依赖
CATS(目前)还没有明确支持通过 JUnit 或 TestNG 进行编程使用。
不过,您可以尝试使用与命令行相同的参数运行 `CatsMain` 类。
您必须添加这 2 个依赖项:
```
com.squareup.okhttp3
okhttp
4.11.0
com.endava
cats
9.0.3
```
# 贡献
请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。
标签:API安全, CISA项目, DevSecOps, Fuzzing, GraalVM, JSON输出, JS文件枚举, OpenAPI, REST API, Swagger, 上游代理, 协议模糊测试, 域名枚举, 域名枚举, 安全测试, 接口安全, 攻击性安全, 服务器监控, 测试工具, 负面测试, 边界测试, 黑盒测试