Rilis Hurl 4.0.0
(hurl.dev)- Hurl 4.0.0 adalah versi baru dari alat uji HTTP CLI berbasis curl yang meningkatkan alur eksekusi permintaan HTTP dan verifikasi respons yang ditulis dalam file teks biasa
- Laporan HTML dihasilkan sebagai HTML murni yang hanya menggunakan CSS inline tanpa JavaScript, serta menampilkan timeline waterfall per permintaan/respons, log eksekusi, dan error inline
--error-format longmenampilkan header dan body respons dari pengujian yang gagal, sehingga dalam debugging CI/CD konteks yang dibutuhkan untuk menemukan penyebab masalah bisa dilihat tanpa menjalankan ulang- Filter baru
decodedanxpathmemungkinkan decoding langsung byte respons yang charset-nya tidak jelas, serta melakukan verifikasi XPath pada sebagian HTML - Sebagian cara evaluasi JSONPath berubah, dan metode HTTP kustom yang memenuhi syarat huruf besar didukung, sehingga metode baru seperti
QUERYjuga bisa diuji coba
Gambaran umum Hurl 4.0.0
- Hurl adalah alat baris perintah berbasis curl yang menjalankan permintaan HTTP yang didefinisikan dalam format teks biasa sederhana
- File Hurl dapat berisi permintaan, status HTTP yang diharapkan, serta verifikasi (assert) seperti header, sertifikat, dan JSONPath
- Hurl 4.0.0 berfokus pada perubahan di laporan HTML, output error, filter, perilaku JSONPath, dan dukungan metode HTTP kustom
Laporan HTML dan timeline waterfall
- Hurl HTML report menghasilkan tiga jenis informasi untuk setiap eksekusi
- Timeline waterfall: menampilkan setiap permintaan/respons dalam bentuk grafik dan memungkinkan pengecekan timing respons seperti DNS, TCP handshake, dan time to first byte
- Log eksekusi: mencakup header permintaan/respons dan informasi sertifikat
- File sumber dengan syntax highlighting: menampilkan error secara inline
- Laporan disusun dari HTML murni dan CSS inline tanpa JavaScript, sehingga mudah diintegrasikan ke lingkungan CI/CD seperti GitLab CI/CD atau GitHub Actions
- Timing yang digunakan dalam timeline waterfall disediakan oleh
libcurl, dan juga diekspos melalui opsi--json--jsonmenyediakan informasi eksekusi terstruktur yang mencakup error, assert, sertifikat, capture, cookie, dan timing- Output JSON ini bisa digunakan untuk membuat laporan sendiri
Bottleneck performa assert yang terungkap lewat visualisasi
- Visualisasi yang kaya bisa mengungkap masalah performa yang tersembunyi
- Pada beberapa eksekusi, terlihat jeda besar di antara permintaan, dan penyebabnya adalah jumlah assert terhadap respons HTTP yang sangat banyak
- Perhitungan assert pada Hurl 4.0.0 masih bekerja dengan cara sederhana
- Setiap assert untuk respons yang sama diproses secara independen
- Pada tiap assert, parsing dimulai lagi dari awal dan dihitung ulang
- Tim Hurl percaya diri dengan kecepatan kombinasi
libcurldan Rust, tetapi dari kasus ini mereka menilai bahwa peningkatan performa assert diperlukan pada rilis berikutnya
Output error terperinci untuk CI/CD
- Output kegagalan pengujian sebelumnya berfokus pada nilai yang diharapkan, sehingga bisa kurang informasi untuk analisis
- Dengan opsi
--error-formatyang baru, deskripsi error yang lebih panjang bisa dipilih - Dalam mode
--error-format long, header respons dan body respons otomatis dicatat ke log - Dalam contoh, pengujian mencari header
Control-Security-Policy, tetapi pada respons sebenarnya yang ada adalahContent-Security-Policy- Karena header dan body respons ikut masuk ke log, masalah seperti salah ketik bisa dengan mudah ditemukan
- Opsi ini berguna di lingkungan CI/CD saat ingin mendapatkan konteks yang diperlukan untuk debugging sesi tanpa menjalankan ulang pengujian
- Karena body respons juga dicatat, log bisa menjadi sangat panjang
Filter baru: decode dan xpath
- Assert teks di Hurl otomatis mendekode byte body respons, dan saat melakukannya menggunakan petunjuk
charsetdari header responsContent-Type - Ada kasus ketika
Content-Typetidak memiliki encoding, atau charset berada di tag<meta>dalam dokumen HTML - Filter
decodeyang baru memungkinkan byte didekodekan secara eksplisit menjadi teks untuk diverifikasi- Contohnya mendekode body ber-encoding GB2312 dengan
bytes decode "gb2312"
- Contohnya mendekode body ber-encoding GB2312 dengan
- Filter
xpathyang baru memungkinkan evaluasi ekspresi XPath terhadap sebagian respons- Contohnya memverifikasi teks
bodyHTML denganxpath "string(//body)"
- Contohnya memverifikasi teks
Perubahan cara evaluasi JSONPath
- Hurl 4.0.0 mengubah sebagian evaluasi kueri JSONPath
- JSONPath tidak memiliki spesifikasi resmi yang memadai, dan Hurl berusaha mengikuti dokumen
goessner.netyang pada praktiknya banyak dipakai sebagai standar - Setiap implementasi memiliki edge case yang berbeda
- JSONPath standar selalu mengembalikan koleksi, tetapi dalam banyak kasus hal itu kurang bermakna dan bisa menyulitkan pengujian
- Beberapa implementasi membedakan nilai node dari definite path dan koleksi dari indefinite path
- Di Hurl 4.0.0, hanya ada dua selector yang mengembalikan nilai
- Selector indeks array:
$.store.book[2] - Selector kunci objek:
$.store.bicycle.color,$.store.bicycle['color']
- Selector indeks array:
- Selector yang menggunakan filter atau selector seperti
$[*].idakan mengembalikan koleksi- Untuk mengambil nilai dari koleksi, bisa menggunakan filter
nth
- Untuk mengambil nilai dari koleksi, bisa menggunakan filter
Metode HTTP kustom
- Hurl 4.0.0 mendukung metode HTTP kustom apa pun
- Metode harus ditulis dengan huruf besar
- Sebagai contoh, metode baru
QUERYyang akan datang bisa langsung diuji coba- Dokumen terkait: incoming new
QUERYmethod
- Dokumen terkait: incoming new
Catatan rilis dan ajakan berpartisipasi
- Peningkatan lain dan perbaikan bug dapat dilihat di release note
- Proyek ini mengajak pengguna memberi star di GitHub, membagikannya di Twitter, mengajukan permintaan perbaikan, dan membagikan use case
1 komentar
Opini Hacker News
Saya suka bahwa pengantar Hurl dimulai dengan “alat command-line berbasis curl yang menjalankan request HTTP yang didefinisikan dalam format teks biasa yang sederhana”
Saya baru pertama kali melihat Hurl, dan hanya dari pengantar singkat serta contoh kode di bagian paling atas, saya langsung ingin memasang dan mencobanya; ini terlihat seperti rilis yang bagus
Misalnya judul seperti
Hurl: Run HTTP requests in a simple plain-text formatakan lebih baikSaya berharap ini menjadi standar industri untuk pengujian API
Saya sudah lelah melihat screenshot Postman yang dikirim QA, dan juga lelah menunggu QA menekan Send setelah ada perbaikan; QA pun pasti lelah menunggu developer
Hurl bisa dibaca dan ditulis baik oleh developer maupun QA, dapat diotomatisasi dan diintegrasikan dengan CI, mudah menyampaikan perilaku yang diharapkan, serta bisa disertakan dalam PR sebagai titik awal bagi QA, jadi rasanya tidak ada alasan untuk tidak memakainya di tempat yang memungkinkan
Alur pertukaran HTTP per workflow bisa dimasukkan ke satu file hurl, dan itu menjadi test suite yang langsung masuk ke Git
Namun Hurl juga sangat menarik, dan saya setuju bahwa tidak terikat editor adalah solusi yang lebih baik untuk masalah ini
Dengan JS, Anda bisa menulis pengujian beban/performa, meng-commit-nya ke repositori, mengotomasikannya dengan mudah di CI, mengirim metrik ke berbagai backend, menggunakan protokol selain HTTP, serta mendapatkan antarmuka command-line modern dan banyak fitur
Ada juga konverter Postman-to-k6: https://github.com/apideck-libraries/postman-to-k6
Filosofi k6 adalah developer menulis pengujian seperti unit/integration test untuk memutus siklus QA-developer klasik; Hurl juga terlihat bagus, tetapi fiturnya lebih terbatas dibanding alat pengujian performa yang sudah ada, dan secara pribadi saya lebih suka menulis pengujian dengan bahasa pemrograman daripada format teks khusus
Bahkan jika memakai alat yang menghasilkan spesifikasi dari source code, kesalahan pengguna dalam mendefinisikan metadata endpoint tetap mungkin terjadi, dan Dredd menangkapnya
Ini mungkin salah satu contoh terbaik program Unix modern yang pernah saya lihat sejauh ini
Menerima input standar, mengeluarkan output ke output standar, tidak menebar emoji Unicode di seluruh terminal, dan punya man page yang cukup baik
Saya juga suka bahwa ekstensi file hurl terdiri dari empat huruf, bukan tiga; rasanya akhirnya kita lepas dari kekhawatiran kompatibilitas MS-DOS
Ini terlihat seperti alat yang layak dicoba secara serius
Untuk alat HTTP di command-line, saya paling suka Httpie atau XH, versi penulisan ulang yang lebih cepat dengan Rust
Dibanding curl, sintaksnya jauh lebih dekat dengan HTTP untuk mengirim request dari command-line, dan tidak perlu mempelajari banyak opsi
Jika Anda sudah terbiasa dengan curl, mungkin tidak terlalu berguna, tetapi untuk penggunaan ringan jauh lebih intuitif
https://httpie.io/
https://github.com/ducaale/xh
Di Adaptive, kami menggunakan hurl.dev secara luas untuk otomatisasi pengujian: https://adaptive.live
Kami menguji seluruh alur produk internal dengan Hurl, dan dari sisi stabilisasi produk, itu salah satu pilihan terbaik yang pernah kami adopsi di organisasi
Setiap sebelum deployment, kami menjalankan beberapa pengujian otomatis berbasis Hurl untuk memverifikasi onboarding, pendaftaran, alur inti, dan lainnya; semuanya dikontainerisasi dan bisa dijalankan paralel
Kami juga membangun tooling internal di sekitar hurl.dev, dan saya suka karena mudah dipelajari sehingga analis atau pengguna bisnis pun bisa membuat pengujian
Dalam konteks pengujian, pendekatan berbasis browser seperti Selenium tampaknya jauh lebih kuat dan secara umum lebih berguna
Saya sudah melihat dokumentasinya tetapi tidak menemukan bagian terkait
Saya sudah memantau hurl cukup lama, dan hal yang membedakannya dari alat lain adalah adanya DSL sendiri untuk pengujian
Bukan sekadar mengirim request HTTP, tetapi juga bisa memverifikasi respons dan menangkap data
Namun jika maintainer melihat ini, saya berharap validasi bisa didelegasikan ke skrip eksternal
Misalnya, untuk memverifikasi apakah semua properti dalam koleksi item memiliki nilai yang sama, saat ini masih sulit tanpa memakai selector
nth, dan diperlukan juga cara sepertinth = *Menyediakan semua use case di DSL adalah pekerjaan yang terlalu besar, jadi akan bagus jika hasil jsonpath bisa diteruskan ke jq lalu pengujian dianggap lulus jika mengembalikan true
Namun itu juga bisa membuat file menjadi kurang mandiri dan menimbulkan masalah yang cukup rumit
Senang melihat Hurl tumbuh dengan cepat
Dalam pengujian endpoint, autentikasi hampir selalu diperlukan; saya penasaran apakah ada cara menulis autentikasi di satu file lalu mengimpornya di bagian awal file lain yang membutuhkan token
Lagi pula, belum tentu pendekatan seperti itu adalah cara terbaik untuk menyimpan dan menggunakan secret
Menurut dokumentasi, variabel dapat diteruskan ke file hurl lewat argumen command-line dan environment variable: https://hurl.dev/docs/templates.html
Untuk kegunaan ini, saya juga cukup menyukai httpyac: https://httpyac.github.io
Ada kemampuan scripting JS sehingga cukup mirip, dan selain antarmuka command-line, integrasi VS Code-nya juga bagus
.httpdi JetBrains IDEJetBrains juga menyediakan alat command-line gratis untuk menghasilkan laporan pengujian jUnit dari file
.httpSaya baru tahu bahwa Visual Studio 2022 juga mendukung fitur serupa lewat file
.http: https://learn.microsoft.com/en-us/aspnet/core/test/http-file...Hurl tampaknya punya fitur yang jauh lebih banyak