플레인 텍스트로 HTTP 요청을 실행하고 테스트하는 Hurl

2 weeks ago 8

  • 간단한 텍스트 파일 형식으로 HTTP 요청을 실행하고, 여러 요청을 체이닝하거나 값 추출, 응답 본문 및 헤더에 대한 쿼리/검증이 가능한 오픈소스 커맨드라인 툴
  • REST, SOAP, GraphQL 등 다양한 API 및 HTML/XML/JSON 기반 요청을 지원하며, 데이터 조회와 HTTP 세션 테스트 모두에 적합함
  • 요청 체이닝, 값 캡처, 상태 코드·헤더·본문 등 다양한 검증이 가능하고, Junit, TAP, HTML, JSON 리포트 등 CI/CD 연동 및 자동화에 유리함
  • Rust로 구현된 단일 실행 파일로 배포되어 설치가 간편하고, 내부적으로는 libcurl 엔진을 사용빠른 속도와 강력한 프로토콜 호환성 제공
  • 경쟁 도구 대비 간결한 문법 및 확장성, 다양한 기능을 갖춘 현대적 HTTP 테스트 자동화 도구로 평가받음
  • 커뮤니티 주도 오픈소스로서, 직관적이고 확장 가능한 텍스트 기반 포맷 덕분에 개발자와 DevOps 양쪽 모두에게 높은 활용도를 보임

What's Hurl?

  • Hurl은 명확하고 직관적인 텍스트 형식으로 HTTP 요청을 작성하여 커맨드라인에서 실행할 수 있는 도구임
  • 여러 요청을 체인처럼 연결, 응답에서 값을 추출하거나 다양한 쿼리(헤더·본문·상태코드 등)를 활용해 복잡한 HTTP 시나리오 테스트 가능함
  • libcurl 엔진 기반으로 신뢰성 높고 IPv6, HTTP/3 등 최신 프로토콜 지원
  • 데이터 조회, 시나리오 테스트, 성능 측정(응답시간 등) 모두 지원
  • 리포트(Junit, TAP, HTML 등) 생성 및 CI/CD 파이프라인 연동에 최적화
  • REST, SOAP, GraphQL, HTML, XML, JSON 등 다양한 API에 대응하고, 본문 파싱(예: XPath, JSONPath) 도 지원함
  • 다음은 다른 HTTP 테스트 도구(예: Postman, curl 등) 대비 Hurl만의 중요한 강점:
    • 플레인 텍스트로 작성 가능해 버전 관리 및 협업에 용이함
    • Rust로 작성된 단일 경량 바이너리 제공, 별도 런타임 불필요
    • curl과 동일한 네트워크 엔진(libcurl) 기반으로 신뢰성 및 다양한 프로토콜 지원
    • REST, SOAP, GraphQL, HTML 등 다양한 형식 지원 및 복잡한 시나리오 세팅 가능
    • CI/CD, 테스트 자동화, 상세 리포트(JUnit, HTML, TAP 등)와의 손쉬운 통합

주요 기능 요약

  • 기본 동작

    • Hurl 파일(.hurl) 안에 여러 HTTP 요청을 순차적으로 작성해 실행
    • 각 요청의 응답에서 값 추출, 조건 검증, 다음 요청으로의 데이터 전달 가능
    • REST/JSON, SOAP/XML, GraphQL, HTML 등 다양한 형식 대응
  • 체이닝 및 변수 활용

    • 여러 요청을 한 파일 내에 체인으로 작성
    • Captures 구문으로 응답에서 값 추출, 이후 요청에 변수로 주입
    • Xpath, JSONPath, 정규표현식, 바디 구조 등을 통한 데이터 추출 및 활용
  • 다양한 요청 및 검증 방식

    • 쿼리파라미터, 헤더, 인증 등 다양한 요청 사양 설정 지원
    • [Asserts] 구문 또는 암시적 구문으로 상태코드, 바디, 헤더, 쿠키, 응답시간, 해시 등 검증
    • XPath, JSONPath 사용, REST/GraphQL/SOAP 과 HTML 콘텐츠도 테스트 가능
    • 다중 값 검증, 응답 본문/해시/인증서 속성, 요청/응답 지연, 바이너리 데이터 처리 지원
  • 테스트 리포트와 자동화 연동

    • 실행 결과를 텍스트, HTML, JUnit, TAP, JSON 등 다양한 형식의 리포트로 출력
    • CI/CD 파이프라인에 손쉽게 통합 가능함
  • 고급 제어 및 유용 기능

    • 요청 간 데이터 전달(캡처·변수화)
    • 동적 데이터 생성 함수(newUuid, newDate 등)
    • 요청별 옵션 커스터마이즈
    • 폴링/재시도, 요청 딜레이, 스킵, 비밀 값 마스킹(redact)
    • curl과 동일한 옵션 지원(curl 옵션 그대로 사용 가능)
    • AWS Sigv4 인증 등 클라우드 전용 기능 내장

사용 예시

  • 단순한 GET/POST 요청다단계 요청 체이닝을 간단한 텍스트 파일로 정의
    • sample.hurl 파일 작성하고 , $ hurl sample.hurl 명령 실행으로 해당 요청 일괄 실행
  • 예시: GET https://example.org HTTP 200 [Captures] csrf_token: xpath "string(//meta[@name='_csrf_token']/@content)" POST https://example.org/login?user=toto&password=1234 X-CSRF-TOKEN: {{csrf_token}} HTTP 302
  • 여러 API 엔드포인트 테스트 및 응답 값 비교, 체이닝된 값 사용(토큰 등), 상태코드·헤더·본문 데이터 등 검증 가능

대표적 활용 예

  • REST/GraphQL/HTML/JSON/SOAP 등 다양한 API 테스트
  • CSRF 토큰, 인증·인가 등 값 추출 및 재사용
  • 상태 코드, 헤더, 본문 데이터, 쿠키, SSL 인증서 등 정밀 검증
  • 실제 서비스 시나리오(로그인~업무 동작 등) 자동화 및 모니터링
  • 멀티 플랫폼 및 다양한 설치 방법 지원(Linux, macOS, Windows, Docker, npm, Cargo 등)

CLI 주요 옵션

  • --test: 테스트 모드(요약 및 리포트 출력)
  • --report-html, --report-json, --report-junit, --report-tap: 다양한 리포트 형식 지원
  • --parallel, --jobs N: 병렬 실행
  • --retry, --retry-interval: 자동 재시도/대기
  • -u, --user: 인증 정보 입력
  • --variable, --variables-file: 변수 지정
  • -o, --output: 응답 파일 저장
  • --json: 실행 결과를 JSON 형식으로 출력

설치 방법

  • Homebrew, apt, yum, pacman, cargo, choco, scoop, Docker, npm 등 다양한 방법으로 설치 가능
  • 단일 바이너리라 별도 런타임 필요 없음
  • 예: brew install hurl 또는 cargo install --locked hurl

경쟁 도구 대비 장점

  • Postman, Insomnia 등 GUI 도구보다 텍스트 기반·버전관리·CI/CD 통합에 더 유리
  • curl보다 테스트 및 시나리오 실행, 검증, 리포트 자동화에 특화
  • YAML, JSON 등 복잡한 DSL 대신 직관적인 자체 포맷으로 러닝커브가 낮음

Read Entire Article