2 poin oleh GN⁺ 2023-07-01 | 1 komentar | Bagikan ke WhatsApp
  • 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 long menampilkan 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 decode dan xpath memungkinkan 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 QUERY juga 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
    • --json menyediakan 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 libcurl dan 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-format yang 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 adalah Content-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 charset dari header respons Content-Type
  • Ada kasus ketika Content-Type tidak memiliki encoding, atau charset berada di tag <meta> dalam dokumen HTML
  • Filter decode yang baru memungkinkan byte didekodekan secara eksplisit menjadi teks untuk diverifikasi
    • Contohnya mendekode body ber-encoding GB2312 dengan bytes decode "gb2312"
  • Filter xpath yang baru memungkinkan evaluasi ekspresi XPath terhadap sebagian respons
    • Contohnya memverifikasi teks body HTML dengan xpath "string(//body)"

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.net yang 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 yang menggunakan filter atau selector seperti $[*].id akan mengembalikan koleksi
    • Untuk mengambil nilai dari koleksi, bisa menggunakan filter nth

Metode HTTP kustom

  • Hurl 4.0.0 mendukung metode HTTP kustom apa pun
  • Metode harus ditulis dengan huruf besar
  • Sebagai contoh, metode baru QUERY yang akan datang bisa langsung diuji coba

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

 
GN⁺ 2023-07-01
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

    • Sebagai maintainer Hurl, saya sudah lama membaca Hacker News dan mencatat semua saran presentasi seperti “tampilkan contoh bahasanya secepat mungkin” dan “jelaskan konsepnya secara ringkas setiap kali”, lalu berusaha benar-benar menerapkannya di hurl.dev
    • Terlalu banyak tulisan pengumuman dan README yang dimulai dari persyaratan instalasi atau “kami memperbaiki X, Y, Z”, tetapi justru tidak memberi tahu alat ini melakukan apa; pendekatan ini sudah benar
    • Betul, tetapi sebagian besar dari itu seharusnya masuk ke judul tulisan
      Misalnya judul seperti Hurl: Run HTTP requests in a simple plain-text format akan lebih baik
  • Saya 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

    • Di salah satu layanan, kami memakai Hurl untuk pengujian API manual dan CI, dan hasilnya cukup bagus
      Alur pertukaran HTTP per workflow bisa dimasukkan ke satu file hurl, dan itu menjadi test suite yang langsung masuk ke Git
    • Jika tim Anda memakai VSCode, vscode-restclient juga bisa dicoba: https://github.com/Huachao/vscode-restclient
      Namun Hurl juga sangat menarik, dan saya setuju bahwa tidak terikat editor adalah solusi yang lebih baik untuk masalah ini
    • Penasaran apakah Anda juga sudah mencoba https://k6.io/
      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
    • Secara pribadi, saya suka pendekatan mendefinisikan dengan OpenAPI lalu memvalidasi spesifikasinya dengan Dredd
      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

    • Saya tidak sadar betapa mengganggunya emoji di terminal, tetapi ketika mendengar alat ini tidak memilikinya, tiba-tiba rasanya menyenangkan
    • Bukan hanya MS-DOS, ini juga berarti lepas dari kekhawatiran kompatibilitas VMS
  • 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

    • Saya penasaran mengapa memakai alat standalone
      Dalam konteks pengujian, pendekatan berbasis browser seperti Selenium tampaknya jauh lebih kuat dan secara umum lebih berguna
    • Penasaran apakah alur OAuth didukung secara bawaan, atau perlu token yang di-hardcode
      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 seperti nth = *
    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

    • DSL pada akhirnya pasti perlahan tumbuh menjadi bahasa serbaguna yang Turing-complete, jadi pemanggilan skrip eksternal tampaknya masuk akal
      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

    • Sepertinya Hurl tidak memiliki fitur seperti include atau macro
      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

    • httpyac juga kompatibel dengan baik dengan dukungan .http di JetBrains IDE
      JetBrains juga menyediakan alat command-line gratis untuk menghasilkan laporan pengujian jUnit dari file .http
  • Saya 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

    • JetBrains IDE juga mendukung ini, jadi untuk saat ini tampaknya ini sudah agak seperti format yang mendekati standar dibanding pendekatan lain
    • Hurl jauh lebih cepat
    • Saya sudah cukup lama memakai ekstensi VS Code yang menjadi dasar fitur ini