Hurl 4.0.0 yayımlandı
(hurl.dev)- Hurl 4.0.0, curl tabanlı CLI HTTP test aracının yeni sürümü; düz metin dosyalara yazılan HTTP isteklerini ve yanıt doğrulamalarını çalıştırma akışını iyileştiriyor
- HTML raporları JavaScript olmadan, yalnızca satır içi CSS kullanan saf HTML olarak üretiliyor; istek/yanıt bazında waterfall zaman çizelgesi, yürütme günlükleri ve satır içi hataları birlikte gösteriyor
--error-format long, başarısız testlerin yanıt başlıklarını ve gövdesini yazdırarak CI/CD hata ayıklama sırasında yeniden çalıştırmadan nedeni anlamak için gereken bağlamı görmeyi sağlıyor- Yeni
decodevexpathfiltreleriyle karakter seti net olmayan yanıt baytları doğrudan decode edilebiliyor ve HTML’in bir bölümü üzerinde XPath doğrulaması yapılabiliyor - JSONPath değerlendirme biçiminin bazı kısımları değişti; büyük harf koşulunu sağlayan özel HTTP metotları desteklenerek
QUERYgibi yeni metotlar da denenebiliyor
Hurl 4.0.0 genel bakış
- Hurl, curl tabanlı bir komut satırı aracıdır ve basit bir düz metin biçiminde tanımlanan HTTP isteklerini çalıştırır
- Hurl dosyalarında isteklerin yanı sıra beklenen HTTP durumu, başlıklar, sertifikalar ve JSONPath gibi doğrulamalar (assert) birlikte yazılabilir
- Hurl 4.0.0, ağırlıklı olarak HTML raporları, hata çıktısı, filtreler, JSONPath davranışı ve özel HTTP metodu desteği etrafında değişiyor
HTML raporu ve waterfall zaman çizelgesi
- Hurl HTML report, her çalıştırma için üç tür bilgi üretir
- Waterfall zaman çizelgesi: Her istek/yanıtı grafik olarak gösterir; DNS, TCP handshake ve time to first byte gibi yanıt zamanlamalarını kontrol etmeyi sağlar
- Yürütme günlüğü: İstek/yanıt başlıkları ve sertifika bilgileri gibi verileri içerir
- Sözdizimi vurgulu kaynak dosya: Hataları satır içinde gösterir
- Rapor, JavaScript olmadan saf HTML ve satır içi CSS’ten oluştuğu için GitLab CI/CD veya GitHub Actions gibi CI/CD ortamlarına entegre edilmesi kolaydır
- Waterfall zaman çizelgesinde kullanılan zamanlama verileri
libcurltarafından sağlanır ve--jsonseçeneği ile de dışa açılır--json, hatalar, assert’ler, sertifikalar, yakalamalar, çerezler ve zamanlamalar dahil yapılandırılmış yürütme bilgileri sağlar- Bu JSON çıktısıyla kendi raporlarınızı oluşturabilirsiniz
Görselleştirmeyle ortaya çıkan assert performans darboğazı
- Zengin görselleştirme, gizli performans sorunlarını ortaya çıkarabilir
- Bazı çalıştırmalarda istekler arasında büyük boşluklar görüldü; bunun nedeni HTTP yanıtı üzerindeki assert sayısının çok fazla olmasıydı
- Hurl 4.0.0 itibarıyla assert hesaplaması basit bir yaklaşımla çalışıyor
- Aynı yanıttaki her assert bağımsız olarak işleniyor
- Her assert için en baştan parse edilip yeniden hesaplanıyor
- Hurl ekibi
libcurlve Rust birleşimiyle hız konusunda kendinden emindi; ancak bu örnek, bir sonraki sürümde assert performans iyileştirmesinin gerekli olduğu sonucuna varmalarını sağladı
CI/CD için ayrıntılı hata çıktısı
- Mevcut test hatası çıktısı beklenen değer odaklı olduğundan, analiz için gereken bilgiler eksik kalabiliyordu
- Yeni
--error-formatseçeneği ile daha uzun hata açıklamaları seçilebiliyor --error-format longmodunda yanıt başlıkları ve yanıt gövdesi otomatik olarak günlüğe yazılıyor- Örnekte test
Control-Security-Policybaşlığını arıyordu, ancak gerçek yanıttaContent-Security-Policyvardı- Yanıt başlıkları ve gövdesi günlüğe dahil edildiğinden, yazım hatası türündeki sorun kolayca görülebiliyor
- Bu seçenek, testi yeniden çalıştırmadan oturum hata ayıklaması için gereken bağlamı almak isteyen CI/CD ortamlarında kullanışlıdır
- Yanıt gövdesi de kaydedildiği için günlükler çok uzayabilir
Yeni filtreler: decode ve xpath
- Hurl’un metin assert’leri, yanıt gövdesi baytlarını otomatik olarak decode eder; bunun için
Content-Typeyanıt başlığındakicharsetipucunu kullanır Content-Typeiçinde encoding bulunmayabilir veya karakter seti HTML belgesinin içindeki<meta>etiketinde yer alabilir- Yeni
decodefiltresi, baytları açıkça metne decode ederek doğrulama yapmayı sağlar- Örnekte GB2312 ile encode edilmiş gövde
bytes decode "gb2312"ile decode ediliyor
- Örnekte GB2312 ile encode edilmiş gövde
- Yeni
xpathfiltresi, yanıtın bir bölümü üzerinde XPath ifadeleri değerlendirmeyi sağlar- Örnekte HTML
bodymetnixpath "string(//body)"ile doğrulanıyor
- Örnekte HTML
JSONPath değerlendirme biçimindeki değişiklik
- Hurl 4.0.0, JSONPath sorgularının değerlendirilme biçimini kısmen değiştirdi
- JSONPath için uygun bir resmi spesifikasyon yok; Hurl, fiili standart gibi kullanılan
goessner.netbelgesini olabildiğince izlemeye çalışıyor - Uygulamalar arasında farklı edge case’ler bulunuyor
- Standart JSONPath her zaman koleksiyon döndürür, ancak çoğu durumda bunun anlamı büyük değildir ve test etmeyi zorlaştırabilir
- Bazı uygulamalar definite path’in düğüm değeri ile indefinite path’in koleksiyonunu ayırır
- Hurl 4.0.0’da değer döndüren selector yalnızca iki türdür
- Dizi indeksi selector’ı:
$.store.book[2] - Nesne anahtarı selector’ı:
$.store.bicycle.color,$.store.bicycle['color']
- Dizi indeksi selector’ı:
- Filtre kullanan selector’lar veya
$[*].idgibi selector’lar koleksiyon döndürür- Koleksiyondan değer almak için
nthfiltresi kullanılabilir
- Koleksiyondan değer almak için
Özel HTTP metotları
- Hurl 4.0.0, rastgele özel HTTP metotlarını destekliyor
- Metotlar büyük harfle yazılmalıdır
- Örnek olarak yeni gelecek
QUERYmetodu hemen denenebilir- İlgili belge: incoming new
QUERYmethod
- İlgili belge: incoming new
Sürüm notları ve katkı çağrısı
- Diğer iyileştirmeler ve hata düzeltmeleri release note üzerinden görülebilir
- Proje GitHub star’ı, Twitter’da paylaşım, iyileştirme talepleri ve kullanım örneklerinin paylaşılmasını istiyor
1 yorum
Hacker News görüşleri
Hurl tanıtımının “curl tabanlı bir komut satırı aracı; basit bir düz metin biçiminde tanımlanan HTTP isteklerini çalıştırır” diye başlaması hoşuma gitti
Hurl’ü ilk kez gördüm ama en üstteki kısa tanıtım ve kod örneği bile hemen kurup denemek istememe yetti; harika bir sürüm gibi görünüyor
Örneğin
Hurl: Run HTTP requests in a simple plain-text formatgibi bir başlık daha iyi olurduBunun API testinin sektör standardı haline gelmesini isterdim
QA’in gönderdiği Postman ekran görüntülerine bakmaktan da, düzeltmeden sonra QA’in Send tuşuna basmasını beklemekten de yoruldum; muhtemelen QA de geliştiriciyi beklemekten yorulmuştur
Hurl, geliştirici ve QA’in ikisinin de okuyup yazabileceği, otomasyon ve CI entegrasyonuna uygun, beklenen davranışı aktarmayı kolaylaştıran ve PR’a eklenip QA için başlangıç noktası olabilecek bir araç; mümkün olan yerlerde kullanmamak için sebep görünmüyor
İş akışı bazlı HTTP alışveriş akışını tek bir hurl dosyasına koyabiliyorsunuz ve bu da doğrudan Git’e giren bir test paketi oluyor
Yine de Hurl de çok ilgi çekici ve editöre bağlı olmaması bakımından bu sorun için daha iyi çözüm olduğuna katılıyorum
JS ile yük/performance testleri yazıp depoya commit edebiliyorsunuz, CI’da kolayca otomatikleştirebiliyorsunuz, metrikleri çeşitli backend’lere gönderebiliyorsunuz, HTTP dışı protokoller de kullanabiliyorsunuz ve modern bir komut satırı arayüzüyle pek çok özellik sunuyor
Bir de Postman-to-k6 dönüştürücüsü var: https://github.com/apideck-libraries/postman-to-k6
k6’in felsefesi, tıpkı birim/entegrasyon testlerinde olduğu gibi bu testleri geliştiricilerin yazıp klasik QA-geliştirici döngüsünü kırması; Hurl de iyi görünüyor ama mevcut performans testi araçlarına göre özellikleri daha sınırlı ve ben şahsen özel bir metin biçimi yerine programlama diliyle test yazmayı tercih ediyorum
Kaynak koddan sözleşme üreten bir araç kullansanız bile, endpoint metadata’sını yanlış tanımlayan kullanıcı hataları hâlâ mümkün ve Dredd bunu yakalıyor
Şimdiye kadar gördüğüm modern Unix programlarının en iyi örneklerinden birine yakın
Standart girdiyi alıyor, standart çıktıya yazıyor, terminalin her yerine Unicode emoji saçmıyor ve man sayfaları da gayet iyi hazırlanmış
hurl dosya uzantısının üç değil dört harf olması da hoşuma gitti; sonunda MS-DOS uyumluluğunu dert etmeyi bırakmışız gibi
Cidden kullanmaya değer bir araç gibi duruyor
Komut satırı HTTP araçları arasında en çok Httpie’yi ya da onun daha hızlı Rust yeniden yazımı olan XH’yi seviyorum
curl’den çok daha HTTP’ye yakın bir sözdizimiyle komut satırından istek gönderebiliyorsunuz ve tonla seçenek öğrenmeniz gerekmiyor
Zaten curl’e alışkınsanız çok faydalı olmayabilir ama hafif kullanım için çok daha sezgisel
https://httpie.io/
https://github.com/ducaale/xh
Adaptive’de test otomasyonu için hurl.dev’i geniş çapta kullanıyoruz: https://adaptive.live
Tüm iç ürün akışını Hurl ile test ediyoruz ve ürün istikrarı açısından organizasyona kattığımız en iyi şey buydu
Her dağıtımdan önce onboarding, kayıt, çekirdek akışlar vb. için Hurl tabanlı birkaç otomasyon testini çalıştırıyoruz; konteynerleştirilmiş olduğu için paralel de çalıştırılabiliyor
Ayrıca hurl.dev etrafında iç araçlar da geliştiriyoruz; öğrenmesi kolay olduğu için analistler ve iş kullanıcıları da test yazabiliyor
Test bağlamında Selenium gibi tarayıcı tabanlı yaklaşımlar çok daha güçlü ve genel olarak daha kullanışlı görünüyor
Dokümanlara baktım ama bununla ilgili bir şey bulamadım
hurl’ü bir süredir takip ediyorum; diğer araçlardan ayrıldığı nokta, test için kendi DSL’ine sahip olması
Yalnızca HTTP isteği göndermiyor, yanıtı doğrulayabiliyor ve veri yakalayabiliyor
Ama bakımcı bunu görüyorsa, doğrulamayı dış script’lere devretme imkânı olmasını isterdim
Mesela bir öğe koleksiyonundaki tüm özelliklerin aynı değere sahip olduğunu doğrulamak için hâlâ
nthseçicisini kullanmadan bunu yapmak zor venth = *gibi bir şeye de ihtiyaç varTüm kullanım senaryolarını DSL ile kapsamak çok büyük iş olur; bu yüzden jsonpath sonucunu jq’ya verip true dönüyorsa testin geçmesi gibi bir imkân güzel olurdu
Ama o zaman da dosya daha az bağımsız hale gelir ve epey karmaşık sorunlar doğabilir
Hurl’ün hızlı büyümesi iyi görünüyor
Endpoint testlerinde her zaman kimlik doğrulama gerekiyor; kimlik doğrulamayı bir dosyaya yazıp token gereken başka dosyaların başında bunu içe aktarmanın bir yolu var mı merak ediyorum
Zaten bunun gizli değerleri saklayıp kullanmanın en iyi yolu olup olmadığından da emin değilim
Dokümanlara göre komut satırı argümanları ve ortam değişkenleri üzerinden hurl dosyasına değişken aktarabiliyorsunuz: https://hurl.dev/docs/templates.html
Bu kullanım için httpyac’ı da epey seviyorum: https://httpyac.github.io
JS script desteği sunduğu için oldukça benzer ve yalnızca komut satırı arayüzü değil, VS Code entegrasyonu da çok iyi
.httpdesteğiyle de oldukça uyumluJetBrains ayrıca
.httpdosyalarından jUnit test raporu üreten ücretsiz bir komut satırı aracı da sunuyorVisual Studio 2022’nin de
.httpdosyalarıyla benzer bir özellik sunduğunu öğrendim: https://learn.microsoft.com/en-us/aspnet/core/test/http-file...Hurl’ün ise çok daha fazla özelliği var gibi görünüyor