API स्वचालन परीक्षण के लिए REST एश्योर्ड ट्यूटोरियल (उदाहरण)
रेस्ट एश्योर्ड क्या है?
निश्चित होना आपको जावा लाइब्रेरी का उपयोग करके REST API का परीक्षण करने में सक्षम बनाता है और Maven के साथ अच्छी तरह से एकीकृत करता है। इसमें बहुत कुशल मिलान तकनीकें हैं, इसलिए आपके अपेक्षित परिणामों को पुष्ट करना भी बहुत आसान है। रेस्ट एश्योर्ड में अनुरोध और प्रतिक्रिया के लगभग हर हिस्से से डेटा प्राप्त करने के तरीके हैं, चाहे JSON संरचनाएँ कितनी भी जटिल क्यों न हों।
परीक्षण समुदाय के लिए, API स्वचालन परीक्षण अभी भी नया और विशिष्ट है। JSON की जटिलताएँ API परीक्षण को अनदेखा रखती हैं। लेकिन यह परीक्षण प्रक्रिया में इसे कम महत्वपूर्ण नहीं बनाता है। Rest Assured.io फ्रेमवर्क ने कोर जावा बेसिक्स का उपयोग करके इसे बहुत सरल बना दिया है, जिससे इसे सीखना बहुत ही वांछनीय चीज़ बन गया है।
निश्चिंतता की आवश्यकता क्यों है?
कल्पना कीजिए कि आप अपना गूगल मैप व्यू खोलते हैं और उस जगह को देखते हैं जहाँ आप जाना चाहते हैं, आपको तुरंत नज़दीकी रेस्टोरेंट दिखाई देते हैं, आपको आने-जाने के लिए विकल्प दिखाई देते हैं; कुछ प्रमुख ट्रैवल प्रदाताओं से, और आपकी उंगलियों पर बहुत सारे विकल्प दिखाई देते हैं। हम सभी जानते हैं कि वे गूगल उत्पाद नहीं हैं, फिर गूगल इसे कैसे दिखाता है। वे इन प्रदाताओं के उजागर एपीआई का उपयोग करते हैं। अब, यदि आपको इस तरह के सेटअप का परीक्षण करने के लिए कहा जाता है, तो यूआई के बनने या विकास के अधीन होने से पहले भी, एपीआई का परीक्षण करना बेहद महत्वपूर्ण हो जाता है और उन्हें बार-बार परीक्षण करना, विभिन्न डेटा संयोजनों के साथ इसे स्वचालन के लिए बहुत उपयुक्त मामला बनाता है।
इससे पहले, हम इसे प्राप्त करने के लिए ग्रूवी, रूबी जैसी गतिशील भाषाओं का उपयोग कर रहे थे, और यह चुनौतीपूर्ण था। इसलिए एपीआई परीक्षण को कार्यात्मक परीक्षण द्वारा नहीं खोजा गया था।
लेकिन रेस्ट एश्योर्ड का उपयोग करके, एपीआई का ऑटोमेशन परीक्षण, उपयोगकर्ता के अनुकूल अनुकूलन के साथ सरल https अनुरोध भेजना सरल है यदि किसी के पास जावा की बुनियादी पृष्ठभूमि है। एपीआई परीक्षण और एकीकरण परीक्षण को समझने के लिए इसकी आवश्यकता है, लेकिन ऑटोमेशन के बाद रेस्ट एश्योर्ड बैकएंड पर बहुत अच्छा आत्मविश्वास देता है जबकि फ्रंट-एंड परीक्षण केवल यूआई और क्लाइंट-साइड संचालन पर ध्यान केंद्रित कर सकता है। रेस्ट एश्योर्ड एक ओपन सोर्स है जिसमें बहुत सारी अतिरिक्त विधियाँ और लाइब्रेरी जोड़ी गई हैं, जिसने इसे एपीआई ऑटोमेशन के लिए एक बढ़िया विकल्प बना दिया है।
Rest Assured.io को कैसे सेटअप करें? Eclipse
चरण 1) स्थापित करें Java. इसका संदर्भ लें गाइड
चरण 2) आरंभ करने के लिए IDE डाउनलोड करें: ग्रहण
चरण 3) मावेन स्थापित करें और अपना एक्लिप्स सेट अप करें। यहाँ उत्पन्न करें.
सेटअप निश्चिंत रहें
- अपने IDE में एक Maven प्रोजेक्ट बनाएं। हम Intellij का उपयोग कर रहे हैं, लेकिन आप जिस भी IDE का उपयोग कर रहे हैं, उस पर आपको एक समान संरचना मिलेगी।
- अपना POM.xml खोलें

Rest Assured.io के लिए: Java संस्करण < 9 उपयोगकर्ता:
अपने POM.xml में नीचे दी गई निर्भरता जोड़ें:
<dependency> <groupId>io.rest-assured</groupId> <artifactId>json-path</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency> <dependency> <groupId>io.rest-assured</groupId> <artifactId>xml-path</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency> <dependency> <groupId>io.rest-assured</groupId> <artifactId>json-schema-validator</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency>
Rest Assured.io के लिए : Java संस्करण 9+ उपयोगकर्ता :
<dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured-all</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency>
समस्या निवारण:
यदि आपको त्रुटियाँ दिखाई देती हैं और आप सुनिश्चित नहीं हैं कि निर्भरताएँ ठीक से डाउनलोड हुई हैं या नहीं,
- सभी निर्भरताओं को आयात करने के लिए एक मावेन बिल्ड निष्पादित करें, फिर से आपको गुरु 99 पर मावेन सेट अप पर सहायता मिलेगी।
- फिर भी, यदि आपको त्रुटियाँ दिखाई देती हैं, तो मावेन क्लीन करें, उसके बाद मावेन इंस्टॉल करें, और यह बिना किसी त्रुटि के बन जाना चाहिए।
- आप अपने जावा क्लास में नीचे दी गई पंक्तियाँ जोड़ सकते हैं और देख सकते हैं कि कोई संकलन त्रुटियाँ मौजूद नहीं हैं।
import io.restassured.RestAssured.*; import io.restassured.matcher.RestAssuredMatchers.*; import org.hamcrest.Matchers.*;
पहली सरल रेस्ट एश्योर्ड स्क्रिप्ट
सिंटेक्स:
Rest Assured.io का सिंटैक्स सबसे सुंदर हिस्सा है, क्योंकि यह बहुत BDD जैसा और समझने योग्य है।
Given().
param("x", "y").
header("z", "w").
when().
Method().
Then().
statusCode(XXX).
body("x, ”y", equalTo("z"));
स्पष्टीकरण:
| कोड | व्याख्या |
|---|---|
| दिया गया() | 'Given' कीवर्ड, आपको बैकग्राउंड सेट करने देता है, यहाँ, आप रिक्वेस्ट हेडर, क्वेरी और पाथ पैराम, बॉडी, कुकीज़ पास करते हैं। यह वैकल्पिक है यदि रिक्वेस्ट में इन आइटम की आवश्यकता नहीं है |
| कब() | 'जब' कीवर्ड आपके परिदृश्य के आधार को चिह्नित करता है। उदाहरण के लिए, 'जब' आप कुछ प्राप्त/पोस्ट/डालते हैं, तो कुछ और करते हैं। |
| तरीका() | इसे किसी भी CRUD ऑपरेशन (get/post/put/delete) से प्रतिस्थापित करें |
| तब() | आपकी दावा और मिलान शर्तें यहां दी गई हैं |
अब जब आपके पास सेटअप और सिंटैक्स की कुछ पृष्ठभूमि है, तो चलिए अपना पहला सरल परीक्षण बनाते हैं। यह ठीक है अगर अब तक संरचना आपको नई लगती है, जैसे-जैसे आप कोड को प्रत्येक पंक्ति की व्याख्या करते हैं, आपको इसकी आदत हो जाएगी।
आप क्या लाएंगे?
अपना ब्राउज़र खोलें और दबाएं – https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1सुनिश्चित करें कि आपको नीचे जैसा कुछ दिखाई दे।
यदि अनुरोध के लिए प्रतिक्रिया प्राप्त करने का प्रयास करते समय आपको ब्राउज़र पर कोई त्रुटि मिलती है,
- देखें कि क्या आपने Https या Http का उपयोग किया है। हो सकता है कि आपके ब्राउज़र में असुरक्षित वेबसाइट न खोलने की सेटिंग हो।
- देखें कि क्या कोई प्रॉक्सी या फ़ायरवॉल आपके ब्राउज़र को वेबसाइट खोलने से रोकता है।
*नोट - आपने यहाँ कोई हेडर, कोई बॉडी और कोई कुकी का उपयोग नहीं किया। यह एक URL था और साथ ही आप API से सामग्री प्राप्त कर रहे हैं और किसी भी मौजूदा सामग्री को पोस्ट या अपडेट नहीं कर रहे हैं, इसलिए यह एक GET कॉल है। हमारे पहले परीक्षण को बेहतर ढंग से समझने के लिए इसे याद रखें।
आपके परीक्षण का उद्देश्य:
स्क्रिप्ट का लक्ष्य आपके IDE कंसोल पर वही आउटपुट प्रिंट करना है जो आपको रेस्ट एश्योर्ड के माध्यम से ब्राउज़र पर प्राप्त हुआ था।
आइये इसे नीचे दिए गए चरणों के साथ कोड करें:
प्रतिक्रिया प्राप्त करना मुख्य भाग
चरण 1) “myFirstRestAssuredClass” नाम से एक क्लास बनाएं
चरण 2) “getResponseBody” नामक विधि बनाएं
चरण 3) पहले सीखी गई संरचना के समान, जब और तब, नीचे दिए गए कोड को टाइप करें
Given(). -> कोई हेडर आवश्यक नहीं, कोई क्वेरी या पथ पैरामीटर नहीं।
when(). -> कोई विशिष्ट स्थिति सेटअप नहीं
पाना('https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1'). ->केवल यूआरएल प्रदान करना आवश्यक है
then(). -> कोई विशिष्ट कथन आवश्यक नहीं
log(). all() -> एक बार सभी प्रतिक्रियाएं प्राप्त हो जाने पर, लॉग प्रतिक्रिया, हेडर, अनिवार्य रूप से वह सब कुछ जो अनुरोध आपके पास लौटाता है।
public static void getResponseBody(){
given().when().get("https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1").then().log()
.all();
}
अब ध्यान दें कि उपयोग किया गया URL लंबा और कम पढ़ने योग्य है, यदि आप ध्यान से देखेंगे तो आप देखेंगे कि 3 क्वेरी पैरामीटर का उपयोग किया जा रहा है जो हैं
- ग्राहक आईडी
- पासवर्ड
- खाता नंबर
निश्चिंत रहें, यह हमें हर भाग (क्वेरी, पथ, हेडर पैरामीटर) को अलग-अलग पास करने में मदद करता है, जिससे कोड अधिक पठनीय और रखरखाव में आसान हो जाता है। साथ ही, हम आवश्यकतानुसार बाहरी फ़ाइल से डेटा को पैरामीटराइज़ कर सकते हैं।
क्वेरी पैराम का उपयोग करने के लिए, हम सिंटैक्स की अपनी परिभाषा पर वापस जाते हैं और देखते हैं कि उनमें से सभी को दिए गए भाग के रूप में पारित किया गया है।
public static void getResponseBody(){
given().queryParam("CUSTOMER_ID","68195")
.queryParam("PASSWORD","1234!")
.queryParam("Account_No","1")
.when().get("https://demo.guru99.com/V4/sinkministatement.php").then().log()
.body();
}
**ध्यान दें कि हमने “all” के स्थान पर “body” का उपयोग किया है; इससे हमें प्रतिक्रिया का केवल body निकालने में सहायता मिलती है।
आउटपुट:
प्रतिक्रिया स्थिति कोड प्राप्त करना
अगली विधि जो हम लिखेंगे वह स्टेटस कोड प्राप्त करना होगा तथा उसे सत्यापित करने के लिए एक दावा भी करना होगा।
चरण 1) getResponseStatus() नामक विधि बनाएँ
चरण 2) ऊपर बताई गई अनुरोध संरचना का ही उपयोग करें। इसे कॉपी करके पेस्ट करें।
चरण 3) इसे लॉग करने के बजाय, हम स्टेटस कोड मान प्राप्त करने के लिए रेस्ट एश्योर्ड की इनबिल्ट विधि 'getStatusCode' का उपयोग करते हैं
चरण 4) यह पुष्टि करने के लिए कि आपका स्टेटस कोड 200 है, हम कीवर्ड का उपयोग करते हैं – assertThat().statusCode(expectedCode)
**नोट – URL एक वैरिएबल है जिसका उपयोग सरलता के लिए किया जाता है। URL में संपूर्ण API अनुरोध URL होता है
public static void getResponseStatus(){
int statusCode= given().queryParam("CUSTOMER_ID","68195")
.queryParam("PASSWORD","1234!")
.queryParam("Account_No","1") .when().get("https://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
System.out.println("The response status is "+statusCode);
given().when().get(url).then().assertThat().statusCode(200);
}
आउटपुट:
व्यावसायिक आवश्यकता
स्वचालन के बुनियादी नियमों में से एक यह है कि हमें चेकपॉइंट लगाने होंगे ताकि परीक्षण तभी आगे बढ़े जब सभी आवश्यक शर्तें पूरी हों। API परीक्षण में, सबसे बुनियादी सत्यापन यह जांचना है कि अनुरोध का स्टेटस कोड 2XX प्रारूप में है या नहीं।
अब तक का पूरा कोड:
import java.util.ArrayList;
import static io.restassured.RestAssured.*;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
public class myFirstRestAssuredClass {
final static String url="https://demo.guru99.com/V4/sinkministatement.php?CUSTOMER_ID=68195&PASSWORD=1234!&Account_No=1";
public static void main(String args[]) {
getResponseBody();
getResponseStatus();
; }
//This will fetch the response body as is and log it. given and when are optional here
public static void getResponseBody(){
given().when().get(url).then().log()
.all();
given().queryParam("CUSTOMER_ID","68195")
.queryParam("PASSWORD","1234!")
.queryParam("Account_No","1") .when().get("https://demo.guru99.com/V4/sinkministatement.php").then().log().body();
}
public static void getResponseStatus(){
int statusCode= given().queryParam("CUSTOMER_ID","68195")
.queryParam("PASSWORD","1234!")
.queryParam("Account_No","1")
.when().get("https://demo.guru99.com/V4/sinkministatement.php").getStatusCode();
System.out.println("The response status is "+statusCode);
given().when().get(url).then().assertThat().statusCode(200);
}
}
* ध्यान दें:
- इस परिदृश्य के लिए 200 एक सफल प्रतिक्रिया है। कई बार, आपको अनुरोध को विफल करने की भी आवश्यकता होती है, और फिर आप 4XX या 5XX का उपयोग कर सकते हैं। अमान्य पैरामीटर प्रदान करके स्थिति कोड को बदलने का प्रयास करें और जाँच करें।
- जब हम कोई शर्त लागू करते हैं, तो कंसोल पर तब तक कोई मुद्रण नहीं होगा जब तक कि कोई त्रुटि न हो।
प्रतिक्रिया के विभिन्न भागों को लाने के लिए स्क्रिप्ट
प्रतिक्रिया बॉडी और प्रतिक्रिया स्थिति कोड प्राप्त करना पहले से ही ऊपर दिए गए खंड में शामिल है। यह ध्यान देने योग्य है कि प्रतिक्रिया के विभिन्न भागों को प्राप्त करने के लिए, कीवर्ड 'एक्सट्रैक्ट' बहुत महत्वपूर्ण है।
हैडर
रेस्ट एश्योर्ड एक बहुत ही सीधी भाषा है, और हेडर प्राप्त करना भी उतना ही सरल है। विधि का नाम है हेडर()। पहले की तरह, हम ऐसा करने के लिए एक स्टैंडअलोन विधि बनाएंगे।
public static void getResponseHeaders(){
System.out.println("The headers in the response "+
get(url).then().extract()
.headers());
}
कृपया ध्यान दें कि 'given().when()' को यहाँ छोड़ दिया गया है, और कोड लाइन get() से शुरू होती है, ऐसा इसलिए है क्योंकि यहाँ अनुरोध को हिट करने और प्रतिक्रिया प्राप्त करने के लिए कोई पूर्व शर्त या सत्यापन नहीं किया गया है। ऐसे मामलों में, इसका उपयोग करना वैकल्पिक है।
आउटपुट:
व्यवसाय की आवश्यकता:
कई बार, आपको आगामी अनुरोध के लिए प्राधिकरण टोकन या सत्र कुकी का उपयोग करने की आवश्यकता होगी, और अधिकतर, ये विवरण प्रतिक्रिया के हेडर के रूप में लौटाए जाते हैं।
अनुक्रिया काल
बैकएंड या अन्य डाउनस्ट्रीम प्रणालियों से प्रतिक्रिया प्राप्त करने के लिए आवश्यक समय प्राप्त करने के लिए, रेस्ट एश्योर्ड प्रतिक्रिया वापस करने में लगने वाले समय को प्राप्त करने के लिए उपयुक्त टाइम यूनिट के साथ 'टाइमइन' नामक विधि प्रदान करता है।
public static void getResponseTime(){
System.out.println("The time taken to fetch the response "+get(url)
.timeIn(TimeUnit.MILLISECONDS) + " milliseconds");
}
आउटपुट:
व्यवसाय की आवश्यकता:
API के परीक्षण की एक बहुत ही महत्वपूर्ण विशेषता उनका प्रतिक्रिया समय है, जो एप्लिकेशन के प्रदर्शन को मापने के लिए है। ध्यान दें कि आपके कॉल के लिए लगने वाला समय आपकी इंटरनेट स्पीड, उस समय API के प्रदर्शन, सर्वर लोड और समय को प्रभावित करने वाले अन्य कारकों के आधार पर कम या ज्यादा हो सकता है।
सामग्री प्रकार
आप “contentType ()” विधि का उपयोग करके लौटाई गई प्रतिक्रिया का content-Type प्राप्त कर सकते हैं।
public static void getResponseContentType(){
System.out.println("The content type of response "+
get(url).then().extract()
.contentType());
}
उत्पादन
व्यवसाय की आवश्यकता:
कभी-कभी सामग्री-प्रकार प्राप्त करना यह सुनिश्चित करने के लिए आवश्यक होता है कि किसी भी क्रॉस-ऑरिजिन खतरे के लिए कोई सुरक्षा अंतराल न हो या यह सुनिश्चित करने के लिए कि पारित की गई सामग्री API के मानकों के अनुसार है।
व्यक्तिगत JSON तत्व प्राप्त करें
दिए गए उत्तर से, आपको कुल राशि की गणना करने के लिए कहा जाता है, आपको प्रत्येक राशि लाकर उसका योग करना होगा।
चरण:
चरण 1) राशि फ़ील्ड कुंजी “स्टेटमेंट्स” के साथ एक सरणी के भीतर है जो बदले में कुंजी “परिणाम” के साथ सूची में है
चरण 2) निश्चिंत रहें, “पथ” का उपयोग करके API में मानों तक पहुंचने के लिए एक तंत्र प्रदान करता है
चरण 3) राशि तक पहुँचने का मार्ग "result.statements.AMOUNT" है। इसे सेलेनियम में Xpath की तरह समझें।
चरण 4) संग्रह में सभी राशियाँ प्राप्त करें, और फिर योग की गणना करने के लिए सभी मानों के लिए लूप करें
public static void getSpecificPartOfResponseBody(){
ArrayList<String> amounts = when().get(url).then().extract().path("result.statements.AMOUNT") ;
int sumOfAll=0;
for(String a:amounts){
System.out.println("The amount value fetched is "+a);
sumOfAll=sumOfAll+Integer.valueOf(a);
}
System.out.println("The total amount is "+sumOfAll);
}
नोट: चूंकि राशि मान स्ट्रिंग डेटा प्रकार में है, इसलिए हम इसे पूर्णांक में परिवर्तित करते हैं और योग के लिए इसका उपयोग करते हैं।
आउटपुट:
सारांश
- रेस्ट एश्योर्ड जावा लाइब्रेरीज़ का एक समूह है जो हमें स्वचालित करने में सक्षम बनाता है रेस्ट एपीआई परीक्षण
- निश्चिंत रहें Java-आधारित, और कोर का ज्ञान Java इसे सीखने के लिए पर्याप्त है
- यह जटिल JSON संरचनाओं से अनुरोध और प्रतिक्रिया के मान प्राप्त करने में मदद करता है
- RSI API अनुरोध को विभिन्न प्रकार के हेडर, क्वेरी, पथ पैरामीटर और किसी भी सत्र या कुकीज़ के साथ अनुकूलित किया जा सकता है।
- यह दावे संबंधी कथन और शर्तें निर्धारित करने में सहायता करता है।
- जबकि रेस्ट एश्योर्ड तब बहुत सहायक होता है जब प्रतिक्रिया JSON प्रकार की होती है, लेकिन यदि सामग्री प्रकार HTML या सादा पाठ है तो इसकी विधियां सुचारू रूप से काम नहीं कर सकती हैं।

