CATS:自动化REST API模糊与负面测试工具

CATS简介

CATS是一款REST API模糊测试和负面测试工具,专为OpenAPI端点打造。它利用预设的Fuzzer集合,自动生成覆盖各种边界条件和负面场景的测试,无需编写任何代码。CATS的核心优势在于其全面性、智能性、高度可配置性、自我修复能力以及易用性。

CATS的主要功能

自动化测试生成与运行:CATS能够根据OpenAPI规范文件,自动生成大量的API测试。这些测试涵盖了各种请求字段、头部信息和边界条件,确保API在各种情况下都能稳定运行。

智能Fuzzer集合:CATS内置了100+个Fuzzer,这些Fuzzer能够根据不同的数据类型和结构约束生成测试数据。无论是随机的大型Unicode值,还是基于请求数据类型和约束精心设计的值,CATS都能轻松应对。

高度可配置性:CATS提供了丰富的自定义选项,允许用户根据需求筛选特定的Fuzzer、HTTP响应码、HTTP方法、请求路径等。此外,用户还可以提供业务上下文,使测试更加贴近实际应用场景。

自我修复能力:当OpenAPI规范发生变化时,CATS能够自动更新测试,确保测试始终与最新的API规范保持一致。这一特性极大地减少了维护测试的工作量。

直观易用的报告:CATS生成的测试报告简洁明了,包含了测试的详细信息、结果和失败原因。这有助于用户快速定位问题并采取相应的修复措施。

CATS的使用方法

安装

Homebrew

brew tap endava/tap
brew install cats

手动安装

下载操作系统原生二进制文件后,添加到PATH中,并将其作为任何其他命令行工具执行:

sudo cp cats /usr/local/bin/cats
cats -h

使用uberjar运行CATS。需要安装Java 17+。

java -jar cats.jar

Windows没有本机二进制文件,但可以使用uberjar版本。

前往发布页面下载最新版本:https://github.com/Endava/cats/releases.

运行

黑盒模式

黑盒模式,CATS不需要任何上下文,只需要URL、OpenAPI规范以及身份验证的请求头。

cats --contract=openapi.yaml --server=http://localhost:8080 --headers=headers.yml --blackbox

在黑盒模式下,CATS尽在接收到响应码为5XX时才会报错(501除外)。Fuzzer预期与服务直接的任何其他不匹配,都将视为成功。

黑盒模式用户冒烟测试。只会告诉你应用是否有服务端重大错误。

上下文模式

每个Fuzzer都有一个预期的HTTP响应码。断言响应是否与对应的OpenAPI规范中定义的模式相匹配。

在上下文模式下运行,需要提供给一个--refData文件。

cats --contract=openapi.yaml --server=http://localhost:8080 --headers=headers.yml --refData=referenceData.yml

模糊模式

CATS可以进行连续模糊测试(模糊直到满足特定的停止条件),连续模糊在执行时具有更多的随机性,进行连续模糊测试时,需要提供matchXXX条件:

cats random --contract=openapi.yaml --server=http://localhost:8080 -H "API-KEY=$token" --mc 500 --path "/users/auth" -X POST --stopAfterTimeInSec 10

回放测试

CATS将输出一个HTML文件(将在摘要报告中链接)和单个JSON文件。JSON文件可用于在以后回放测试。在回放测试(或测试列表)时,默认情况下,CATS不会生成任何报告。输出将仅在控制台中可用。

cats replay "Test1,Test233,Test15.json,dir/Test19.json"

测试名称用逗号分隔,如果测试名称是.json结尾,则这个文件将作为路径进行搜索。如果没有.json,CATS会在CATS-report文件夹中搜索该测试。即CATS-report/Test1.json和CATS-report/Test233.json。

OpenAPI规范

CATS为最常见的OpenAPI规范(如日期时间、电子邮件、二进制)提供了自定义生成器,并扩展了更多其他格式,以便生成尽可能有意义的数据。下面可以找到格式字段中可以使用的值与CATS将生成的值之间的映射。这也将对API的消费者非常有帮助,不仅仅是对CATS。此外,CATS可能会从属性名称推断数据格式。映射表中明确提到了这一点。

OpenAPI formatProperty NameWhat CATS generates
bcp47N/Aen-US
byte or binaryN/Abase64 encoded string
cardNumberor name ends withcardNumber4111111111111111
iso3166alpha2N/AUS
iso3166alpha3N/AUSA
iso-3166 or countryCodeor name ends with countryCodeUSA
iso-4217 orcurrencyCodeor name ends with currencyCodeUSD
dateN/A2022-10-25
date-timeN/A2011-12-03T10:15:30Z
durationN/AP1DT30H4S
emailor name ends with emailor emailAddresscool@cats.io
ean8 or gtin8N/A40170725
gtin13 or ean13or europeanArticleNumber, globalTradeItemNumber or globalTradeNumber5710798389878
hostnameN/Awww.endava.com
idn-emailN/Acööl.cats@cats.io
idn-hostnameN/Awww.ëndava.com
ip or ipv4or name ends with ip or ipAddress10.10.10.20
ipv6or name ends with ipv621DA:D3:0:2F3B:2AA:FF:FE28:9C5A
iriN/Ahttp://ëxample.com/cats
iri-referenceN/A/füzzing/
isbn or isbn10or name equals isbn or isbn100439023481
isbn13or name equals isbn139780439023481
json-pointerN/A/item/0/id
passwordN/AcatsISc00l?!useIt#
periodN/AP1DT30H4S
regexN/A[a-z0-9]+
relative-json-pointerN/A1/id
timeN/A10:15:30Z
uri or urlor name equals or ends with url or urihttp://example.com/cats
uri-referenceN/A/fuzzing/
uri-templateN/A/fuzzing/{path}
uuidN/Ac58919de-3210-4549-87fa-c196324d0594

Reference Data File

大多时候,为了使接口请求成功,某些字段需要包含相关数据。CATS考虑此类参考数据。可以使用--refData参数指定这些值。参数为一个YAML文件,为不同的接口路径指定固定值。

path1:
  prop1: value1
  prop2: value2
path2:
  prop21: value21

参考数据优先与Fuzzers提供的值

Headers File

headers文件可用于发送固定请求头。最常见的是身份验证请求头。请求头可以是特定于路径的,也可以使用all元素适用于所有路径。特定路径将优先于所有元素。

all:
    Accept: application/json
/path/0.1/auth:
    jwt: XXXXXXXXXXXXX
/path/0.2/cancel:
    jwt: YYYYYYYYYYYYY
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值