- Alat command line open-source untuk menjalankan permintaan HTTP dengan format file teks sederhana, serta mendukung chaining beberapa permintaan, ekstraksi nilai, dan query/validasi pada body maupun header respons
- Mendukung beragam API dan permintaan berbasis HTML/XML/JSON seperti REST, SOAP, dan GraphQL, sehingga cocok untuk pengambilan data maupun pengujian sesi HTTP
- Mendukung chaining permintaan, penangkapan nilai, serta berbagai validasi seperti status code, header, dan body, serta memudahkan integrasi CI/CD dan otomasi melalui laporan seperti Junit, TAP, HTML, dan JSON
- Didistribusikan sebagai file eksekusi tunggal yang diimplementasikan dengan Rust, sehingga mudah dipasang, dan secara internal menggunakan engine libcurl untuk memberikan kecepatan tinggi dan kompatibilitas protokol yang kuat
- Dinilai sebagai alat otomasi pengujian HTTP modern dengan sintaks ringkas, dapat diperluas, dan memiliki beragam fitur dibanding alat pesaing
- Sebagai open-source yang digerakkan komunitas, format berbasis teks yang intuitif dan dapat diperluas membuatnya sangat berguna baik bagi developer maupun tim DevOps
What's Hurl?
- Hurl adalah alat untuk menulis permintaan HTTP dalam format teks yang jelas dan intuitif lalu mengeksekusinya dari command line
- Dapat merangkai beberapa permintaan seperti rantai, mengekstrak nilai dari respons, dan menggunakan berbagai query (header, body, status code, dll.) untuk menguji skenario HTTP yang kompleks
- Berbasis engine libcurl sehingga andal dan mendukung protokol modern seperti IPv6 dan HTTP/3
- Mendukung pengambilan data, pengujian skenario, dan pengukuran performa (seperti waktu respons)
- Sangat cocok untuk pembuatan laporan (Junit, TAP, HTML, dll.) dan integrasi pipeline CI/CD
- Mendukung beragam API seperti REST, SOAP, GraphQL, HTML, XML, dan JSON, serta juga mendukung parsing body (misalnya XPath, JSONPath)
- Berikut beberapa keunggulan penting Hurl dibanding alat pengujian HTTP lain (misalnya Postman, curl, dll.):
- Dapat ditulis dalam plain text sehingga memudahkan version control dan kolaborasi
- Menyediakan binary tunggal ringan yang ditulis dengan Rust, tanpa memerlukan runtime terpisah
- Berbasis engine jaringan yang sama dengan curl (libcurl), sehingga andal dan mendukung berbagai protokol
- Mendukung beragam format seperti REST, SOAP, GraphQL, dan HTML serta memungkinkan penyusunan skenario kompleks
- Mudah diintegrasikan dengan CI/CD, otomasi pengujian, dan laporan detail (JUnit, HTML, TAP, dll.)
Ringkasan fitur utama
-
Cara kerja dasar
- Menulis beberapa permintaan HTTP secara berurutan dalam file Hurl (.hurl) lalu mengeksekusinya
- Dapat mengekstrak nilai dari respons tiap permintaan, memvalidasi kondisi, dan meneruskan data ke permintaan berikutnya
- Mendukung berbagai format seperti REST/JSON, SOAP/XML, GraphQL, dan HTML
-
Chaining dan penggunaan variabel
- Menulis beberapa permintaan sebagai rantai dalam satu file
- Menggunakan sintaks Captures untuk mengekstrak nilai dari respons lalu menyuntikkannya sebagai variabel ke permintaan berikutnya
- Mendukung ekstraksi dan pemanfaatan data melalui XPath, JSONPath, regular expression, struktur body, dan lainnya
-
Beragam metode permintaan dan validasi
- Mendukung pengaturan berbagai spesifikasi permintaan seperti query parameter, header, dan autentikasi
- Menggunakan sintaks [Asserts] atau sintaks implisit untuk memvalidasi status code, body, header, cookie, waktu respons, hash, dan lainnya
- Mendukung XPath dan JSONPath, serta dapat menguji konten REST/GraphQL/SOAP maupun HTML
- Mendukung validasi multi-nilai, properti body/hash/sertifikat, delay permintaan/respons, dan penanganan data biner
-
Laporan pengujian dan integrasi otomasi
- Hasil eksekusi dapat dikeluarkan sebagai laporan dalam berbagai format seperti teks, HTML, JUnit, TAP, dan JSON
- Dapat dengan mudah diintegrasikan ke pipeline CI/CD
-
Kontrol lanjutan dan fitur berguna
- Transfer data antarpermintaan (capture dan variabelisasi)
- Fungsi pembuatan data dinamis (
newUuid, newDate, dll.)
- Kustomisasi opsi per permintaan
- Polling/retry, delay permintaan, skip, masking nilai rahasia (
redact)
- Mendukung opsi yang sama seperti curl (opsi curl dapat digunakan apa adanya)
- Fitur bawaan khusus cloud seperti autentikasi AWS Sigv4
Contoh penggunaan
Contoh penggunaan utama
- Pengujian berbagai API seperti REST/GraphQL/HTML/JSON/SOAP
- Ekstraksi dan penggunaan ulang nilai seperti token CSRF, autentikasi, dan otorisasi
- Validasi presisi untuk status code, header, data body, cookie, sertifikat SSL, dan lainnya
- Otomasi dan monitoring skenario layanan nyata (login hingga alur kerja bisnis, dll.)
- Mendukung multi-platform dan berbagai metode instalasi (Linux, macOS, Windows, Docker, npm, Cargo, dll.)
Opsi CLI utama
--test: mode pengujian (menampilkan ringkasan dan laporan)
--report-html, --report-json, --report-junit, --report-tap: mendukung berbagai format laporan
--parallel, --jobs N: eksekusi paralel
--retry, --retry-interval: retry/tunggu otomatis
-u, --user: memasukkan informasi autentikasi
--variable, --variables-file: menetapkan variabel
-o, --output: menyimpan file respons
--json: menampilkan hasil eksekusi dalam format JSON
Cara instalasi
Keunggulan dibanding alat pesaing
- Lebih unggul untuk basis teks, version control, dan integrasi CI/CD dibanding alat GUI seperti Postman dan Insomnia
- Lebih terfokus pada pengujian, eksekusi skenario, validasi, dan otomasi laporan dibanding curl
- Memiliki learning curve yang rendah berkat format milik sendiri yang intuitif dibanding DSL kompleks seperti YAML atau JSON
3 komentar
Bruno - klien API open source yang cepat dan ramah Git (alternatif Postman)
https://id.news.hada.io/topic?id=13730
Rilis Hurl 4.0.0
Dua tahun lalu masih 4.0, tetapi sekarang sudah sampai 6.1.1.
Komentar Hacker News
Saya mulai memakai Hurl dalam beberapa bulan terakhir
Saya sangat suka karena bisa dipakai baik dalam mode test suite maupun mode pemanggilan individual
Saya memakainya untuk menjalankan test suite request HTTP di CI
Menurut saya bahasa konfigurasinya tidak terlalu intuitif dalam bentuk blok, dan dokumentasi soal assertion yang didukung juga agak kurang
Secara keseluruhan, alat ini memberi nilai yang besar
Saya mulai menguji antarmuka saat mengerjakan POC, dan sadar bahwa pendekatan ini bisa membantu pengembangan berbasis LLM
Dengan menulis test langsung pada method HTTP, test dan implementasi jadi lebih fleksibel terpisah saat proyek berkembang
Pemisahan test ini membuat batas antara antarmuka dan implementasi jadi lebih jelas
Sebelum mengadopsi Hurl, saya menulis kode test dengan framework test dari bahasa layanan yang dipakai, tetapi dengan test berbasis Hurl saya jadi benar-benar menjaga 'sudut pandang klien'
Tanpa akses data backdoor dan semacamnya, antarmuka, test, dan implementasi benar-benar terpisah sehingga terasa lebih aman
Terima kasih atas masukannya
Saat mulai mengembangkannya pertama kali 6~7 tahun lalu, saya sempat mencoba format JSON lalu YAML, tetapi perlahan saya yakin untuk membuat format file baru sendiri
Saya sangat paham bahwa ini bisa terasa canggung dari sudut pandang pengguna
Saya berusaha menerapkan sintaks yang sederhana untuk kasus yang lebih sederhana, tetapi mungkin belum sempurna
Untuk dokumentasi, kalau ada kekurangan atau hal yang bisa ditingkatkan, saya berharap bisa menerima masukan secara aktif dan memperbaikinya
Hurl benar-benar alat yang keren
Dulu saat mem-porting layanan web yang ditulis dengan Python ke Rust, pengujian public API yang ketat sangat membantu
Berkat lingkungan integration test yang independen dari bahasa, API atau situs web bisa dibiarkan tetap sama dan hanya backend yang diganti
Ada satu keuntungan khusus lagi saat memakai Hurl di Rust
Hurl bisa langsung dipakai bersama
cargo test, dan file.hurlbisa digunakan ulang apa adanyaDemo: https://github.com/perrygeo/axum-hurl-test
Saya mulai memakai Hurl sejak September 2023
Sebelumnya saya menjalankan test suite lewat Runscope, tetapi sangat tidak nyaman karena perubahan tidak dikelola dalam version control
Setelah menyiapkan dasar-dasarnya, saya beralih ke Hurl dan meninggalkan Runscope
Sekarang saya puas karena bisa langsung melihat siapa mengubah apa, kapan, dan kenapa
Tim kami juga kehilangan momentum proyek saat mencoba menyelesaikan masalah itu
Konsepnya sendiri menurut saya bagus, tetapi saya jadi berpikir 'kenapa harus dipakai'
Saya mengembangkan dengan Django, dan fitur test bawaan framework itu sendiri sudah sangat lengkap
Menambahkan alat yang tidak mengenal backend saya dan hanya mengakses dari luar rasanya justru menambah beban sinkronisasi
Kalau ada yang aneh, saya juga tidak bisa langsung lompat ke debugger
Memang ada logika bahwa kode test dan kode backend harus dipisahkan dengan jelas, tetapi secara praktis biaya pemeliharaannya terasa lebih besar
Pada akhirnya saya tetap harus menjalankan native test suite juga, jadi memakai beberapa alat eksternal sekaligus terasa canggung
Tapi, kalau dipakai untuk memverifikasi seberapa generik sebuah API bekerja, mungkin ada gunanya
Saya juga banyak memikirkan pertanyaan kenapa harus memakai alat yang tidak mengenal backend saya dan hanya menambah repot sinkronisasi
Saya belum pernah memakai Hurl, tetapi saya sudah beberapa kali memakai alat untuk menguji API secara agnostik terhadap bahasa, dan bahkan sedang mengembangkannya sendiri
Alasan alat seperti ini terlihat menarik adalah
Karena strukturnya hanya memverifikasi input-output, alat ini tidak bergantung pada logika internal
Misalnya, saat memindahkan public API dari Perl ke Go, API Perl lama bisa dijadikan test non-regresi, lalu test yang sama dipakai apa adanya untuk API Go sehingga tingkat kepercayaannya tinggi
Ini bisa dilihat sebagai pengganti produk seperti Postman
Tidak perlu membuka jendela berat berbasis Electron hanya untuk mengetes beberapa request http sederhana
Letaknya di antara skrip
curldan Postman, jadi sangat pas bagi orang yang butuh ringan sekaligus nyaman dipakaiKami memakai Hurl saat bermigrasi dari server web ktor ke kode berbasis spring boot (stack Java/Kotlin)
Karena bisa menjalankan test suite di level spesifikasi tanpa bergantung pada stack server, transisinya jadi sangat mulus
Selain itu, karena kami memakai image Docker di produksi, kami bisa menjalankan integration test dengan sangat ringan dan independen menggunakan Hurl, bukan alat yang terlalu bergantung pada implementasi
Bagian sample (https://github.com/Orange-OpenSource/hurl?tab=readme-ov-file#samples) terasa sangat meyakinkan bagi orang yang ingin memahami kelebihan alat ini hanya dalam 5 menit, yaitu tipe orang yang cenderung menilai lebih dulu
Saya sendiri kadang juga seperti itu, dan menurut saya ini sangat mengesankan
Saya maintainer Hurl
Pertanyaan atau masukan selalu disambut
Ini pola yang cukup sering dipakai oleh saya dan para pengembang di sekitar saya: kami menulis test dalam file ".http" yang bisa dijalankan lewat ekstensi IDE seperti VS Code atau IDEA
Format contohnya adalah
Lalu output-nya dibandingkan 1:1 dengan file
expected.jsonuntuk menjalankan integration testFile-file ini dijalankan dengan cURL dan skrip bash khusus, lalu hasilnya dibandingkan dengan jq dan status sukses/gagal dicatat ke konsol
Saya penasaran apakah dengan Hurl kita juga bisa mendefinisikan contoh request HTTP dan hasil yang diharapkan berbasis file JSON seperti ini langsung dari IDE
Dan saya juga ingin tahu apakah Hurl bisa menjalankan banyak file dalam satu folder secara otomatis
Hurl kurang mendapat apresiasi untuk kemampuan menulis test suite level HTTP yang rapi dan mudah dirawat
Terima kasih sudah membuat alat seperti ini
Saya sangat suka pemilihan nama Hurl
Selera pengembangnya patut dikagumi
Saya pernah memakai Hurl cukup lama lalu ikut berkontribusi juga
Saya penasaran bagaimana kemungkinan menyediakan fitur
includeUcapan terima kasih karena terus merawat proyek ini
Saya penasaran bagaimana Anda melihat visi dan masa depan Hurl dalam 2 tahun ke depan
Saya banyak terinspirasi dari proyek ini lalu merancang alat test HTTP saya sendiri
Kami perlu menjalankan ratusan test dengan cepat secara paralel, jadi kalau Anda suka Hurl, mungkin alat bernama Nap juga menarik
Kalau ada halaman yang merangkum perbedaannya, saya ingin mengetahuinya
Terlihat menarik
Saya awalnya lama memakai Vscode-restclient, tetapi untuk skrip dan CLI belakangan ini saya mulai beralih ke httpyac
Saya juga berencana melihat apakah Hurl cocok dengan kebutuhan saya
Salah satu hal yang tidak nyaman saat memakai alat test adalah belum ada standar untuk merujuk hasil dari satu request sebagai input bagi request berikutnya di file
.httpTiga alat yang pernah saya pakai sejauh ini semuanya punya caranya sendiri
Hurl memakai [Captures]
Vscode-restclient merujuk nama request dalam deklarasi variabel
httpyac memakai sintaks @ref
Karena sintaksnya berbeda-beda, kalau ditulis untuk satu alat maka akan rusak di alat lain
Tautan referensi terkait
dokumentasi capture Hurl
Vscode-restclient
dokumentasi ref httpyac
Maaf sudah membuat format file lain lagi!
Salah satu cara untuk sedikit mengurangi masalah ini adalah memakai
hurlfmthurlfmtmemungkinkan file Hurl diekspor ke JSONDengan hasil JSON ini, mungkin bisa dibuat konversi timbal balik dengan alat lain
Ini memang bukan solusi ajaib yang sempurna, tetapi mungkin sedikit membantu saat berpindah dari Hurl ke format lain
Visual Studio Code dan Visual Studio sama-sama mendukung file .HTTP, tetapi keduanya tidak kompatibel satu sama lain
Menarik melihat ini sebagai contoh Conway's Law yang terjadi di dunia nyata
Kelihatannya agak mirip
https://marketplace.visualstudio.com/items?itemName=humao.rest-client
Ekstensi VS Code ini sangat kuat untuk pengujian terkait HTTP
Perbedaan besarnya adalah bisa dipakai secara independen dari editor
IntelliJ juga punya fitur serupa
https://www.jetbrains.com/help/idea/http-client-in-product-code-editor.html
Saya juga pernah memakai Hurl dan menurut saya cukup bagus
Tetapi belakangan ini saya lebih menyukai pendekatan .http
IntelliJ sudah punya bawaan, ada plugin yang ditautkan di atas, dan di CLI saya juga pernah memakai httpYac
Tidak ada vendor lock-in, dan sangat mudah dibagikan lewat source control atau copy-paste
Di JVM saya menjalankan integration test dengan Karate
https://github.com/karatelabs/karate
Karena bisa menyisipkan JavaScript secara bebas, request dan verifikasi bisa ditulis dengan fleksibel