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

5 hours ago 1

  • Hurl은 간단한 플레인 텍스트 형식으로 정의된 HTTP 요청을 실행하고 검증할 수 있는 오픈소스 커맨드라인 툴임
  • REST, SOAP, GraphQL 등 다양한 API와 HTML, XML, JSON 기반 콘텐츠를 손쉽게 테스트·검증할 수 있음
  • 체이닝, 값 추출, 다양한 검증 구문을 통해 복잡한 시나리오 테스트가 가능하며, CI/CD 통합 및 테스트 리포트 출력도 지원함
  • Rust로 작성되어 빠르고 가벼운 단일 바이너리로 배포되며, 내부적으로 libcurl을 사용해 신뢰성과 호환성을 확보함
  • 경쟁 도구 대비 간결한 문법 및 확장성, 다양한 기능을 갖춘 현대적 HTTP 테스트 자동화 도구로 평가받음

소개 및 장점

Hurl은 오픈소스 커맨드라인 기반의 HTTP 요청 실행 및 자동화 테스트 도구임. 플레인 텍스트 기반의 스크립트 파일(.hurl)로 여러 HTTP 요청을 순차적으로 실행할 수 있고, 각 요청의 결과에서 값을 추출(capture)해 다음 요청에 변수로 활용하거나, 응답 내용(헤더/바디/상태코드 등)에 대해 다양한 검증(assert)을 수행할 수 있음.

다음은 다른 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 인증 등 클라우드 전용 기능 내장

상세 사용 예시 및 구조

예제 파일 실행

  1. sample.hurl 파일 작성
  2. $ hurl sample.hurl 명령 실행으로 해당 요청 일괄 실행
  3. --test 옵션 활용 시 테스트 오리엔티드 출력 활성화
  4. 특정 응답 저장 등 옵션 활용 가능
  5. 디렉터리 전체 또는 여러 파일(.hurl)을 재귀적으로 실행 가능

데이터 요청 및 전달

  • GET, POST, HEAD 등 다양한 HTTP 메서드 지원
  • 헤더/쿼리파라미터/Basic 인증/옵션/폼데이터/멀티파트/로컬파일 바디 등 세팅
  • 응답 데이터 추출 및 변수 처리, 이후 요청에 삽입

응답 검증/테스트

  • 상태코드, 바디, 헤더, 쿠키, 응답 소요 시간 등 검증
  • REST, JSON, XML, HTML, GraphQL 응답 바디 구조적 검증
  • 세트 쿠키 속성, 바이트 해시, SSL 인증서, 전체 바디 매칭 등 고급 검증

리포트 및 출력

  • HTML/JSON/JUnit/TAP 리포트 출력 지원
  • 테스트 목적에 맞게 다양한 출력 방식 제공

기타

  • HTTP/2, HTTP/3 등 네트워크 스택 지원 현황 검사
  • IP주소, AWS Sigv4 인증 등 특화 시나리오 지원
  • 요청 재시도 및 폴링, 딜레이와 스킵, 비밀값 관리 등 각종 편의 기능 내장
  • curl 옵션 그대로 사용, Hurl 파일 내 옵션 세부 제어 가능

Hurl 파일 구조

  • 각 줄마다 HTTP 요청이나 명령, 옵션, 검증 구문 등을 작성
  • [Captures], [Asserts], [Options], [Form], [Multipart], [Query] 등 다양한 섹션 존재
  • 플레인텍스트 기반이라 git 등 버전관리와 협업에 유리함

결론

Hurl은 복잡한 HTTP 테스트/자동화 요구에 효과적으로 대응하는 최신 오픈소스 도구이며, git 기반 협업, CI/CD, 다양한 HTTP API 테스트에서 높은 생산성과 신뢰성을 제공함. Rust 및 libcurl 기반 경량 실행파일로, 환경 구애 없이 빠르게 적용해볼 만함.

Read Entire Article