CATS 文档可在 https://endava.github.io/cats/ 获取
REST API 模糊测试与负向测试工具。无需编写代码,几分钟内即可运行数千个自愈式 API 测试!
时间紧张?请查看1 分钟快速入门指南!
通过使用简单且极简的语法以及平缓的学习曲线,CATS(Contract API Testing and Security,契约 API 测试与安全)使你能够在几分钟内生成数千个 API 测试,且无需编写代码。 所有测试都基于预定义的 100+ Fuzzer 集合自动生成、运行并报告。 这些 Fuzzer 覆盖了广泛的边界测试和负向场景,从完全随机的大型 Unicode 值到基于请求数据类型和约束精心构造的、依赖上下文的值。 更进一步,你还可以利用 CATS 动态生成请求负载的特性,编写简单的端到端功能测试。
在普通模糊测试命令上使用 --tui,即可在不离开终端的情况下跟踪执行过程并检查结果:
cats --contract openapi.yml --server http://localhost:8080 --tui
概览界面显示 Paths、运行配置、响应时间、HTTP 响应码、成功/警告/错误,以及使用与 CLI 和 HTML 报告相同术语的 Fuzzer 运行情况。Fuzzer 表格会使用所有可用的终端行;当完整列表无法显示时,可使用 j/k 或 Page Up/Page Down 浏览。按 2 查看执行详情,按 3 查看执行摘要和质量门禁结果,按 4 按结果原因查看执行详情,按 5 查看包含的 Paths,按 6 查看按响应时间排序的已执行测试。结果原因和 Path 行可按 Enter 打开其对应的测试。
使用方向键或 j/k 选择测试,按 Enter 在全屏详情视图中检查其请求、响应、结果、跟踪和重放命令。在测试列表中按 / 可搜索测试 ID、Fuzzer、路径、场景、结果原因、方法、结果和响应码。a、e、w、s 和 i 分别筛选全部、错误、警告、成功和跳过的结果。Esc 首先清除当前搜索,否则返回上一屏幕;1 打开概览。
按 q 离开界面。在运行过程中,这会请求取消,尽可能完成当前测试,保留已写入的结果,并以状态码 130 退出。执行完成后,q 正常退出。
TUI 需要至少 80 列 × 24 行的交互式终端,且不能与 --dryRun 组合使用。它适用于基于 OpenAPI 的模糊测试命令;独立的 template 命令继续使用普通 CLI 输出。TUI 默认保留最近 10,000 条测试详情;可使用 --tuiMaxResults 选择不同的正数上限。当较早的详情被丢弃时,聚合统计仍覆盖完整运行。
以下是一系列包含分步指南的文章,介绍如何使用 CATS:
> brew tap endava/tap
> brew install cats
CATS 同时以可执行 JAR 和原生二进制文件的形式提供。原生二进制文件无需安装 Java。
下载适用于你操作系统的原生二进制文件后,可以将其添加到 PATH,以便像其他命令行工具一样执行它:
sudo cp cats /usr/local/bin/cats
你还可以通过下载 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。
CATS 默认验证服务器证书和主机名。对于使用自签名证书的可信测试环境,可以通过 --insecure 显式禁用验证。
对于双向 TLS,请使用 --sslKeystore、--sslKeystorePwd 和 --sslKeyPwd。如果省略 --sslKeyPwd,CATS 将使用 keystore 密码作为私钥密码。
CATS 默认在报告中屏蔽认证头和敏感查询参数,将请求值替换为可重放的 $$EnvironmentVariable 占位符。它会在运行 CATS 的目录中创建不含密钥值的 replay.env.example。
当存在 ./.env 时,CATS 会自动加载它。使用 --envFile path/to/cats.env 选择不同的文件,或使用 --noEnvFile 在 normal、random、functional、template 和 replay 命令中禁用 dotenv 加载。进程环境变量优先于 dotenv 值。仅在明确需要未屏蔽的报告和控制台输出时使用 --showSecrets。
CATS 会取消超过 --callTimeout 的调用,该值默认为 20 秒,并且最多捕获 --maxResponseBytes,该值默认为解压后响应体的 10 MiB。将任一选项设置为 0 可禁用其限制。被截断的响应会保留其状态和响应头,跳过完整正文验证,并以专用警告进行报告。
当启用 --dryRun 时,CATS 会解析本地配置并计算测试数量,而不会调用目标服务、WFC 登录端点、认证脚本、更新检查或报告写入器。
你可以在本地机器上从源码构建 CATS。你需要 Java 25。Maven 已随附。
在运行首次构建之前,请确保执行
./mvnw clean。CATS 使用了 OKHttp 的一个分支,该分支将在本地以5.X.X-CATS版本安装,因此不必担心覆盖官方版本。
你可以使用以下 Maven 命令将项目构建为 uberjar:
./mvnw package -Dquarkus.package.type=uber-jar
你将在 target 文件夹中得到一个 cats-runner.jar。你可以使用 java -jar cats-runner.jar ... 运行它。
你还可以使用 GraalVM Java 版本构建原生镜像。
./mvnw package -Pnative
在运行单元测试时,你可能会看到一些 error 日志消息。这些是测试 Fuzzer 负向场景时的预期行为。
请参阅 CONTRIBUTING.md。