
OpenAPI 엔드포인트를 위한 자동화된 REST API 퍼저 및 네거티브 테스팅 도구입니다. 코딩 노력 없이 수천 개의 자가 치유 테스트를 생성, 실행 및 보고하며, 경계 및 보안 시나리오를 포괄합니다.
CATS 문서는 https://endava.github.io/cats/에서 확인할 수 있습니다.
REST API 퍼저 및 네거티브 테스팅 도구. 코딩 없이 몇 분 만에 수천 개의 자가 치유 API 테스트를 실행하세요!
시간이 없으신가요? 1분 빠른 시작 가이드를 확인하세요!
간단하고 최소한의 문법과 완만한 학습 곡선을 통해 CATS(Contract API Testing and Security)는 코딩 없이 몇 분 안에 수천 개의 API 테스트를 생성할 수 있게 해줍니다.
모든 테스트는 미리 정의된 160개 이상의 Fuzzer(연속 퍼징을 위한 31개의 무작위 변이기 포함) 세트를 기반으로 자동으로 생성, 실행 및 보고됩니다.
Fuzzer는 대규모 유니코드 및 제어 문자 페이로드부터 요청 데이터 유형과 제약 조건에서 파생된 컨텍스트 의존적 값, 그리고 IDOR, PUT 멱등성, 업데이트-읽기 일관성, 조건부 ETag 처리, 삭제된 리소스 가용성, 민감한 데이터 노출에 대한 상태 기반 검사에 이르기까지 광범위한 경계 테스팅, 타입 강제 변환, 인젝션 및 네거티브 시나리오를 커버합니다.
기본적으로 CATS는 종속 작업보다 프로듀서 POST 경로를 먼저 정렬하고, 경로 전반에 걸쳐 너비 우선 방식으로 Fuzzer를 실행하며, 2XX 응답에서 학습한 식별자와 기준선을 후속 요청에서 재사용하고, HappyPath DELETE 호출을 실행 종료 시까지 연기하며, OpenAPI 3.0 및 3.1 스키마에 대해 응답을 검증합니다. 또한 cats run을 사용하여 YAML로 엔드투엔드 기능 테스트를 작성할 수도 있습니다.
# Run the full suite against an OpenAPI contract
cats -c openapi.yml -s http://localhost:8080
# Run a built-in profile (quick, security, compliance, ci, coverage, crash, type-coercion, health-check)
cats -c openapi.yml -s http://localhost:8080 --profile quick
# Run for a fixed time budget, continuing with random mutations if deterministic fuzzers finish early, and enforce a quality gate
cats -c openapi.yml -s http://localhost:8080 --stopAfterTimeInSec 60 --fillTimeBudget --qualityGate "errors<1"
# Lint the OpenAPI contract
cats lint -c openapi.yml
# Inspect dependency-ordered paths or explain a profile/fuzzer
cats list --paths --executionOrder -c openapi.yml
cats explain --type profile security
# Replay a test case or print the equivalent curl command
cats replay Test12
cats replay Test12 --curl
일반적인 퍼징 명령에 --tui를 사용하면 터미널을 벗어나지 않고 실행 상황을 추적하고 결과를 검사할 수 있습니다:
cats --contract openapi.yml --server http://localhost:8080 --tui
개요에는 CLI 및 HTML 보고서와 동일한 용어를 사용하여 Paths, Run configuration, Response time, HTTP Response Codes, Success/Warnings/Errors, 그리고 실행된 Fuzzer가 표시됩니다. fuzzer 테이블은 사용 가능한 모든 터미널 행을 사용합니다. 전체 목록이 맞지 않을 때는 j/k 또는 Page Up/Page Down으로 탐색하세요. 2를 누르면 Execution Details, 3을 누르면 Execution summary 및 Quality gate 결과, 4를 누르면 Result Reason별 Execution Details, 5를 누르면 포함된 Paths, 6을 누르면 Response Time 기준으로 정렬된 실행된 테스트가 표시됩니다. Result Reason 및 Path 행은 Enter로 해당 테스트를 엽니다.
화살표 키 또는 j/k로 테스트를 선택하고 Enter를 눌러 전체 화면 상세 보기에서 해당 요청, 응답, 결과, trace 및 replay 명령을 검사하세요. 테스트 목록에서 /를 누르면 테스트 ID, fuzzer, path, scenario, result reason, method, result 및 response code를 검색할 수 있습니다. a, e, w, s, i는 각각 all, error, warning, successful, skipped 결과를 필터링합니다. Esc는 먼저 활성 검색을 지우고, 그렇지 않으면 이전 화면으로 돌아갑니다. 1은 개요를 엽니다.
q를 누르면 인터페이스를 종료합니다. 실행 중일 때는 취소를 요청하고, 가능한 경우 현재 테스트를 완료하며, 이미 기록된 결과를 보존하고 상태 130으로 종료합니다. 실행이 완료된 후에는 q가 정상적으로 종료합니다.
TUI는 최소 80열 x 24행의 대화형 터미널이 필요하며 --dryRun과 함께 사용할 수 없습니다. OpenAPI 기반 fuzzing 명령에서 사용할 수 있으며, 독립 실행형 template 명령은 계속 일반 CLI 출력을 사용합니다. TUI는 기본적으로 최근 10,000개의 테스트 상세 정보를 보존합니다. 다른 양수 제한을 선택하려면 --tuiMaxResults를 사용하세요. 오래된 상세 정보가 삭제되더라도 집계 통계는 전체 실행을 계속 포함합니다.
다음은 CATS 사용 방법에 대한 단계별 가이드가 담긴 문서 목록입니다:
> brew tap endava/tap
> brew install cats
CATS는 실행 가능한 JAR 또는 네이티브 바이너리로 제공됩니다. 네이티브 바이너리는 Java가 설치되어 있을 필요가 없습니다.
사용 중인 OS의 네이티브 바이너리를 다운로드한 후, 다른 명령줄 도구처럼 실행할 수 있도록 PATH에 추가할 수 있습니다:
sudo cp cats /usr/local/bin/cats
bash 또는 zsh에서 바이너리로 직접 셸 자동 완성을 활성화할 수 있습니다:
source <(cats generate-completion)
또는 저장소에서 cats_autocomplete 스크립트를 source할 수 있습니다:
source cats_autocomplete
완료를 영구적으로 유지하려면 .zshrc 또는 .bashrc에 명령을 추가하세요.
Windows용 네이티브 바이너리는 없지만 uberjar 버전을 사용할 수 있습니다. 이를 위해서는 Java 25 이상이 설치되어 있어야 합니다.
java -jar cats.jar로 실행할 수 있습니다.
최신 버전을 다운로드하려면 릴리스 페이지로 이동하세요: https://github.com/Endava/cats/releases.
로컬 머신에서 소스로부터 CATS를 빌드할 수 있습니다. Java 25가 필요합니다. Maven은 이미 번들로 포함되어 있습니다.
첫 빌드를 실행하기 전에
./mvnw clean을 실행해야 합니다. CATS는 OkHttp (com.squareup.okhttp3:okhttp:5.5.0-CATS)와 Swagger Parser (io.swagger.parser.v3:swagger-parser-v3:2.1.49-CATS)의 패치된 포크를 사용하며, Maven은 공식 의존성 버전을 덮어쓰지 않고lib/에서 이를 로컬에 설치합니다.
다음 Maven 명령을 사용하여 프로젝트를 uberjar로 빌드할 수 있습니다:
./mvnw package -Dquarkus.package.jar.type=uber-jar -DskipTests
결과적으로 target 폴더에 cats-runner.jar가 생성됩니다. java -jar cats-runner.jar ...로 실행할 수 있습니다.
GraalVM Java 버전을 사용하여 네이티브 이미지를 빌드할 수도 있습니다.
./mvnw package -Pnative
단위 테스트를 실행하는 동안 일부 error 로그 메시지가 표시될 수 있습니다. 이는 Fuzzer의 부정적 시나리오를 테스트할 때 예상되는 동작입니다.
CATS는 기본적으로 서버 인증서와 호스트 이름을 검증합니다. 자체 서명 인증서를 사용하는 신뢰할 수 있는 테스트 환경에서는 --insecure로 검증을 명시적으로 비활성화할 수 있습니다.