- सरल टेक्स्ट फ़ाइल फ़ॉर्मेट में HTTP अनुरोध चलाने, कई अनुरोधों को चेन करने, वैल्यू निकालने, और response body व headers पर query/validation करने वाला ओपन सोर्स कमांड लाइन टूल
- REST, SOAP, GraphQL सहित विभिन्न API और HTML/XML/JSON-आधारित अनुरोधों को सपोर्ट करता है, और डेटा retrieval व HTTP session testing दोनों के लिए उपयुक्त है
- request chaining, value capture, status code·header·body सहित विभिन्न validation संभव हैं, और Junit, TAP, HTML, JSON reports जैसे CI/CD integration व automation के लिए अनुकूल है
- Rust में बना single executable file के रूप में वितरित होता है, इसलिए इंस्टॉलेशन आसान है, और अंदरूनी तौर पर libcurl engine का उपयोग करके तेज़ गति और मजबूत protocol compatibility देता है
- प्रतिस्पर्धी टूल्स की तुलना में संक्षिप्त syntax, extensibility और विविध सुविधाओं वाला आधुनिक HTTP test automation tool माना जाता है
- community-driven open source के रूप में, सहज और विस्तारयोग्य text-based format की वजह से डेवलपर्स और DevOps दोनों के लिए बेहद उपयोगी है
What's Hurl?
- Hurl एक ऐसा टूल है जो स्पष्ट और सहज टेक्स्ट फ़ॉर्मेट में HTTP अनुरोध लिखकर उन्हें कमांड लाइन से चलाने देता है
- कई अनुरोधों को chain की तरह जोड़कर, response से values निकालकर या विभिन्न queries (header·body·status code आदि) का उपयोग करके जटिल HTTP scenario testing की जा सकती है
- libcurl engine आधारित होने के कारण यह विश्वसनीय है और IPv6, HTTP/3 जैसे आधुनिक protocols को सपोर्ट करता है
- डेटा retrieval, scenario testing, performance measurement (जैसे response time) सभी को सपोर्ट करता है
- report generation (Junit, TAP, HTML आदि) और CI/CD pipeline integration के लिए अनुकूलित है
- REST, SOAP, GraphQL, HTML, XML, JSON जैसे विभिन्न API को संभालता है, और body parsing (जैसे XPath, JSONPath) भी सपोर्ट करता है
- नीचे अन्य HTTP testing tools (जैसे Postman, curl आदि) की तुलना में Hurl की प्रमुख खूबियाँ दी गई हैं:
- plain text में लिखा जा सकता है, इसलिए version control और collaboration के लिए सुविधाजनक है
- Rust में लिखा गया single lightweight binary, किसी अलग runtime की ज़रूरत नहीं
- curl जैसे ही network engine (libcurl) पर आधारित, इसलिए विश्वसनीयता और अनेक protocols का समर्थन
- REST, SOAP, GraphQL, HTML जैसे अनेक formats का समर्थन और जटिल scenarios सेट करने की क्षमता
- CI/CD, test automation, और विस्तृत reports (JUnit, HTML, TAP आदि) के साथ आसान integration
मुख्य फीचर्स का सारांश
-
बुनियादी कार्यप्रणाली
- Hurl फ़ाइल (.hurl) के अंदर कई HTTP अनुरोध क्रम से लिखकर चलाए जा सकते हैं
- हर अनुरोध के response से values निकालना, conditions validate करना, और डेटा को अगले अनुरोध तक पहुँचाना संभव है
- REST/JSON, SOAP/XML, GraphQL, HTML आदि कई formats का समर्थन
-
chaining और variables का उपयोग
- एक ही फ़ाइल में कई अनुरोध chain के रूप में लिखे जा सकते हैं
- Captures syntax से response से values निकालकर बाद के अनुरोधों में variables के रूप में inject किया जा सकता है
- XPath, JSONPath, regular expressions, body structure आदि के माध्यम से डेटा extraction और उपयोग
-
विभिन्न request और validation तरीके
- query parameters, headers, authentication आदि सहित विभिन्न request specifications सेट करने का समर्थन
- [Asserts] syntax या implicit syntax से status code, body, header, cookie, response time, hash आदि validate किए जा सकते हैं
- XPath, JSONPath का उपयोग, और REST/GraphQL/SOAP के साथ HTML content भी टेस्ट किया जा सकता है
- multi-value validation, response body/hash/certificate properties, request/response delay, binary data handling का समर्थन
-
test reports और automation integration
- execution results को text, HTML, JUnit, TAP, JSON आदि कई report formats में आउटपुट किया जा सकता है
- CI/CD pipelines में आसानी से integrate किया जा सकता है
-
advanced control और उपयोगी सुविधाएँ
- अनुरोधों के बीच डेटा ट्रांसफर (capture·variableization)
- dynamic data generation functions (
newUuid, newDate आदि)
- प्रति अनुरोध option customization
- polling/retry, request delay, skip, secret value masking (redact)
- curl जैसे ही options का समर्थन (curl options सीधे इस्तेमाल किए जा सकते हैं)
- AWS Sigv4 authentication जैसी cloud-specific सुविधाएँ built-in
उपयोग उदाहरण
प्रमुख उपयोग परिदृश्य
- REST/GraphQL/HTML/JSON/SOAP जैसे विभिन्न APIs की testing
- CSRF token, authentication·authorization जैसे values निकालना और दोबारा उपयोग करना
- status code, headers, body data, cookies, SSL certificates आदि का सटीक validation
- वास्तविक service scenarios (login~business actions आदि) का automation और monitoring
- multi-platform और अनेक installation methods का समर्थन (Linux, macOS, Windows, Docker, npm, Cargo आदि)
CLI मुख्य options
--test: test mode (summary और report output)
--report-html, --report-json, --report-junit, --report-tap: कई report formats का समर्थन
--parallel, --jobs N: parallel execution
--retry, --retry-interval: automatic retry/wait
-u, --user: authentication info इनपुट
--variable, --variables-file: variables सेट करना
-o, --output: response फ़ाइल सेव करना
--json: execution result को JSON format में आउटपुट करना
इंस्टॉलेशन तरीका
प्रतिस्पर्धी टूल्स पर फायदे
- Postman, Insomnia जैसे GUI tools की तुलना में text-based workflow, version control, और CI/CD integration के लिए अधिक उपयुक्त
- curl की तुलना में testing, scenario execution, validation, और report automation के लिए अधिक विशेषीकृत
- YAML, JSON जैसी जटिल DSL के बजाय सहज अपने फ़ॉर्मेट के कारण learning curve कम
3 टिप्पणियां
Bruno - तेज़ और Git-फ्रेंडली ओपन सोर्स API क्लाइंट (Postman का विकल्प)
https://hi.news.hada.io/topic?id=13730
Hurl 4.0.0 रिलीज़
2 साल पहले 4.0 था, लेकिन अब 6.1.1 तक आ चुका है।
Hacker News टिप्पणियाँ
मैंने पिछले कुछ महीनों में hurl का इस्तेमाल शुरू किया है
यह बात मुझे बहुत पसंद है कि इसमें test suite mode और individual call mode दोनों इस्तेमाल किए जा सकते हैं
मैं CI में HTTP request test suite चलाने के लिए इसका उपयोग करता हूँ
मुझे लगता है कि इसकी configuration language के blocks बहुत intuitive नहीं हैं, और supported assertions से जुड़ा documentation भी थोड़ा कमज़ोर है
कुल मिलाकर, यह टूल अपने आप में बहुत value देता है
POC काम करते समय मैंने interface testing शुरू की, और पता चला कि यह तरीका LLM-आधारित development में मदद कर सकता है
जब tests सीधे HTTP methods पर लिखे जाते हैं, तो project के evolve होने के दौरान tests और implementation को ज़्यादा लचीले ढंग से अलग रखा जा सकता है
tests के अलग होने से interface और implementation के बीच की सीमा भी ज़्यादा स्पष्ट हो जाती है
hurl अपनाने से पहले मैं service language के test framework में test code लिखता था, लेकिन hurl-आधारित tests के साथ मैं सख्ती से 'client perspective' बनाए रख पाता हूँ
backdoor data access जैसी चीज़ों के बिना, interface, tests और implementation पूरी तरह अलग रहते हैं, इसलिए भरोसा बना रहता है
feedback के लिए धन्यवाद
6–7 साल पहले जब मैंने शुरुआती development शुरू किया, तब पहले JSON और फिर YAML format आज़माया था, लेकिन धीरे-धीरे यक़ीन हो गया कि नया file format सीधे खुद बनाना चाहिए
मुझे पूरी तरह समझ है कि user के नज़रिए से यह अटपटा लग सकता है
मैंने कोशिश की कि आसान cases के लिए आसान syntax हो, लेकिन हो सकता है वह परफेक्ट न हो
documentation में जहाँ कमी हो या सुधार की गुंजाइश हो, वहाँ मैं सक्रिय रूप से feedback लेना और उसे बेहतर बनाना चाहता हूँ
Hurl वाकई शानदार टूल है
पहले जब मैंने Python में लिखी web service को Rust में port किया था, तब सख्त public API tests बहुत मददगार साबित हुए
language-independent integration test environment की वजह से API या website को जस का तस रखते हुए सिर्फ backend बदला जा सका
Rust में Hurl इस्तेमाल करने का एक और खास फ़ायदा है
इसे
cargo testके साथ जोड़कर hurl library सीधे इस्तेमाल की जा सकती है, और.hurlfiles भी वैसे ही दोबारा उपयोग की जा सकती हैंडेमो: https://github.com/perrygeo/axum-hurl-test
मैंने Hurl का इस्तेमाल सितंबर 2023 से शुरू किया
पहले Runscope से test suite चलाता था, लेकिन यह बहुत परेशान करने वाला था कि changes version control में नहीं आते थे
कुछ बुनियादी तैयारी के बाद मैंने Hurl पर switch कर लिया और Runscope छोड़ दिया
अब कौन, कब, क्यों और क्या बदला, यह एक नज़र में दिख जाता है, इसलिए मैं काफ़ी संतुष्ट हूँ
हमारी टीम ने भी उस समस्या को हल करने की कोशिश करते-करते project की रफ़्तार खो दी
concept अच्छा लगता है, लेकिन फिर भी सोचता हूँ कि ‘इसे क्यों इस्तेमाल करूँ’
मैं Django में development करता हूँ, और framework की built-in testing capabilities पहले से ही बहुत मज़बूत हैं
ऐसा tool लाना जो मेरे backend को नहीं जानता और सिर्फ बाहर से access करता है, मुझे लगता है sync का बोझ ही बढ़ाएगा
कुछ गड़बड़ हो तो सीधे debugger में कूद पड़ने की सुविधा भी नहीं रहेगी
test code और backend code को साफ़ अलग रखना चाहिए, यह तर्क अपनी जगह है, लेकिन व्यवहार में maintenance cost ज़्यादा लगती है
आख़िरकार native test suite भी चलानी ही पड़ेगी, इसलिए कई external tools साथ लेकर चलना थोड़ा अटपटा लगता है
हाँ, अगर मकसद यह जाँचना है कि API कितनी general-purpose तरह से काम करती है, तो यह उपयोगी हो सकता है
यह सवाल कि ऐसा tool क्यों इस्तेमाल करें जो मेरे backend को नहीं जानता और सिर्फ sync का काम बढ़ाता है, मैंने भी बहुत सोचा है
मैंने hurl इस्तेमाल नहीं किया, लेकिन language-agnostic API testing tools कई बार इस्तेमाल किए हैं और एक खुद बना भी रहा हूँ
मुझे ये tools अच्छे लगने के कारण हैं
input-output validation पर आधारित structure की वजह से ये internal logic पर निर्भर नहीं होते
उदाहरण के लिए, अगर public API को Perl से Go में migrate किया जा रहा हो, तो मौजूदा Perl API को non-regression test की तरह इस्तेमाल करके वही tests Go API पर चलाए जा सकते हैं, जिससे भरोसा बढ़ता है
इसे Postman जैसे product के विकल्प की तरह समझें
कुछ साधारण HTTP request tests के लिए electron-आधारित भारी window खोलने की ज़रूरत नहीं
यह curl scripts और Postman के बीच कहीं आता है, इसलिए जिन लोगों को हल्कापन और convenience दोनों चाहिए, उनके लिए यह बढ़िया है
हमने ktor web server से spring boot-आधारित code (Java/Kotlin stack) पर migration करते समय Hurl का इस्तेमाल किया
server stack से स्वतंत्र spec-level test suite चलाने की वजह से transition बहुत आसान रहा
साथ ही, क्योंकि हम production में docker images इस्तेमाल करते हैं, implementation पर ज़रूरत से ज़्यादा निर्भर tools की जगह Hurl से integration tests बहुत हल्के और स्वतंत्र ढंग से चल सके
samples section(https://github.com/Orange-OpenSource/hurl?tab=readme-ov-file#samples) उन लोगों के लिए बहुत persuasive है जो 5 मिनट में समझना चाहते हैं कि टूल का फ़ायदा क्या है, यानी जो पहले से जल्दी राय बना लेते हैं
मैं भी कभी-कभी ऐसा ही होता हूँ, और यह सच में प्रभावशाली लगा
मैं Hurl का maintainer हूँ
सवाल या feedback कभी भी स्वागत है
मेरे सहित आसपास के कई developers का एक आम pattern है कि हम VS Code या IDEA की IDE extensions से चलने वाली
.httpfiles में tests लिखते हैंexample format कुछ ऐसा होता है
फिर output को
expected.jsonfile से one-to-one compare करके integration test करते हैंइन files को cURL और bespoke bash scripts से चलाया जाता है, और
jqसे results compare करके success/failure console में log किया जाता हैजानना चाहता हूँ कि क्या Hurl में भी IDE के अंदर example HTTP requests और JSON file-आधारित expected results इस तरह define किए जा सकते हैं
और क्या Hurl किसी folder के अंदर कई files को अपने आप चला सकता है
Hurl को HTTP-level test suites को सुंदर और maintainable तरीके से लिखने की क्षमता के लिए जितनी पहचान मिलनी चाहिए, उतनी नहीं मिली है
ऐसा टूल बनाने के लिए धन्यवाद
Hurl नाम का चुनाव मुझे बेहद पसंद आया
developer की समझदारी काबिले-तारीफ़ है
मैंने कुछ समय Hurl इस्तेमाल किया और बाद में इसमें खुद योगदान भी दिया
जानना चाहता हूँ कि
includefeature देने की संभावना क्या हैलगातार maintenance के लिए धन्यवाद
2 साल बाद Hurl की vision और future को आप कैसे देखते हैं, यह जानना चाहता हूँ
इस project से प्रेरणा लेकर मैंने खुद एक HTTP testing tool डिज़ाइन किया
हमें सैकड़ों tests को तेज़ी से parallel में चलाने की ज़रूरत थी, इसलिए अगर आपको Hurl पसंद है तो Nap भी दिलचस्प लग सकता है
अगर differences को संक्षेप में दिखाने वाला कोई page है, तो कृपया बताइए
दिलचस्प लग रहा है
मैं पहले लंबे समय तक Vscode-restclient इस्तेमाल करता था, लेकिन scripting और CLI उपयोग के लिए हाल में httpyac पर जा रहा हूँ
मैं यह भी देखूँगा कि Hurl मेरी ज़रूरतों पर कितना फिट बैठता है
testing tools में एक परेशानी यह है कि
.httpfiles में एक request का result अगले request के input के रूप में refer करने के लिए अब तक कोई standard नहीं हैमैंने अब तक जो तीन tools इस्तेमाल किए हैं, उन सबका तरीका अलग है
hurl में [Captures]
Vscode-restclient में variable declarations में request name का reference
httpyac में @ref syntax
हर tool की syntax अलग होने से, एक के लिए लिखा गया content दूसरे में टूट जाता है
संबंधित reference links
hurl capture documentation
Vscode-restclient
httpyac ref documentation
एक और file format बना देने के लिए माफ़ कीजिए!
इस समस्या को थोड़ा कम करने के लिए
hurlfmtइस्तेमाल किया जा सकता हैhurlfmtHurl files को JSON में export कर सकता हैइस JSON result का इस्तेमाल करके दूसरे tools के साथ conversions भी बनाए जा सकते हैं
यह कोई जादुई और परफेक्ट समाधान नहीं है, लेकिन Hurl से दूसरे formats में जाने में थोड़ी मदद कर सकता है
Visual Studio Code और Visual Studio दोनों
.HTTPfiles को support करते हैं, लेकिन दोनों आपस में compatible नहीं हैंयह Conway's Law के व्यवहारिक रूप में दिखने का दिलचस्प उदाहरण लगता है
थोड़ा मिलता-जुलता लगता है
https://marketplace.visualstudio.com/items?itemName=humao.rest-client
यह VS Code extension HTTP-संबंधित testing के लिए बहुत शक्तिशाली है
editor-independent होकर इस्तेमाल किया जा सकना ही असली बड़ा फ़र्क है
IntelliJ में भी मिलती-जुलती सुविधा है
https://www.jetbrains.com/help/idea/http-client-in-product-code-editor.html
मैंने भी Hurl इस्तेमाल किया है और यह काफ़ी अच्छा लगा
लेकिन हाल में मैं
.httpapproach को ज़्यादा पसंद करने लगा हूँयह IntelliJ में built-in है, ऊपर linked plugin भी है, और CLI में मैंने httpYac भी इस्तेमाल किया है
इसमें vendor lock-in नहीं है, और source control या copy-paste से share करना भी बहुत आसान है
JVM पर मैं integration testing के लिए Karate इस्तेमाल करता हूँ
https://github.com/karatelabs/karate
क्योंकि इसमें मनमाने ढंग से JavaScript शामिल किया जा सकता है, request/validation को काफ़ी लचीले ढंग से लिखा जा सकता है