-
간단한 텍스트 파일 형식으로 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 대신 직관적인 자체 포맷으로 러닝커브가 낮음