स्वचालित परीक्षण कई वातावरणों, कई ब्राउज़रों, कई उपकरणों और समानांतर में कई डेटा सेटों पर चलाए जा सकते हैं।
ये परीक्षण मैन्युअल परीक्षणों की तुलना में मानवीय त्रुटि के कम प्रवण होते हैं, जो परीक्षण प्रक्रिया की सटीकता और विश्वसनीयता को बेहतर बनाने में मदद कर सकते हैं। इसके अलावा, वे दोहराने योग्य, सुसंगत और भरोसेमंद हैं जो झूठी सकारात्मक और झूठी नकारात्मकताओं को कम करने में मदद करते हैं। इस लेख में, मैं इस बारे में बात करूँगा कि आपको सेलेनियम, JUnit5 और गेज फ्रेमवर्क में स्वचालित परीक्षणों का उपयोग क्यों करना चाहिए।
दक्षता बढ़ाता है
स्वचालन परीक्षणों को मैन्युअल परीक्षणों की तुलना में तेज़ी से चलाया जा सकता है, जिससे कम समय अवधि में अधिक परीक्षण चलाए जा सकते हैं। यह मुद्दों और बगों को अधिक तेज़ी से पहचानने में मदद कर सकता है, लंबे समय में समय और संसाधनों की बचत कर सकता है। स्वचालन परीक्षण कई वातावरणों, कई ब्राउज़रों, कई उपकरणों और समानांतर में कई डेटा सेटों पर चल सकते हैं जो परीक्षण प्रक्रिया की समग्र दक्षता को बढ़ाता है।
import com.thoughtworks.gauge.Step import org.openqa.selenium.By import org.openqa.selenium.WebDriver import org.openqa.selenium.chrome.ChromeDriver class AutomationTest { private lateinit var driver: WebDriver @Step("Open the browser and navigate to the website") fun openBrowser() { System.setProperty("webdriver.chrome.driver", "/path/to/chrome/driver") driver = ChromeDriver() driver.get("https://www.example.com") } @Step("Search for <searchTerm>") fun search(searchTerm: String) { driver.findElement(By.name("q")).sendKeys(searchTerm) driver.findElement(By.name("btnK")).click() } @Step("Close the browser") fun closeBrowser() { driver.quit() } }
यह कोटलिन में लिखी गई एक सरल टेस्ट ऑटोमेशन स्क्रिप्ट का एक उदाहरण है, जो वेब पेज के साथ इंटरैक्ट करने के लिए सेलेनियम लाइब्रेरी का उपयोग कर रही है, और टेस्ट को व्यवस्थित करने और चलाने के लिए गेज फ्रेमवर्क का उपयोग कर रही है। यह स्क्रिप्ट एक ब्राउज़र खोलती है, एक वेबसाइट पर नेविगेट करती है, खोज करती है और फिर ब्राउज़र को बंद कर देती है।
क्योंकि यह परीक्षण स्वचालित है, यह मैन्युअल रूप से किए जाने की तुलना में तेज़ी से चल सकता है।
यह एक साधारण उदाहरण है, एक वास्तविक दुनिया के उपयोग के मामले में, आपके पास कई परिदृश्य, कई परीक्षण मामले और कई परीक्षण सूट हो सकते हैं जो स्वचालित हो सकते हैं और समानांतर में चल सकते हैं, जिससे परीक्षण प्रक्रिया की समग्र दक्षता बढ़ जाती है।
यह ध्यान देने योग्य है कि, यदि आप एक वेब एप्लिकेशन के साथ काम कर रहे हैं, तो अन्य फ्रेमवर्क और टूल हैं जिनका उपयोग सेलेनियम के साथ या उसके बजाय किया जा सकता है, जैसे कि सरू, वेबड्राइवरियो, और टेस्टकैफ़, प्रत्येक की अपनी विशिष्ट विशेषताएं और फायदे हैं। .
सटीकता में सुधार करता है
मैन्युअल परीक्षणों की तुलना में स्वचालित परीक्षणों में मानवीय त्रुटि की संभावना कम होती है, जो परीक्षण प्रक्रिया की सटीकता और विश्वसनीयता को बेहतर बनाने में मदद कर सकता है। स्वचालित परीक्षण दोहराने योग्य, सुसंगत और विश्वसनीय होते हैं जो गलत सकारात्मक और गलत नकारात्मक को कम करने में मदद करते हैं।
import com.thoughtworks.gauge.Step import org.openqa.selenium.By import org.openqa.selenium.WebDriver import org.openqa.selenium.chrome.ChromeDriver class AutomationTest { private lateinit var driver: WebDriver @Step("Open the browser and navigate to the website") fun openBrowser() { System.setProperty("webdriver.chrome.driver", "/path/to/chrome/driver") driver = ChromeDriver() driver.get("https://www.example.com") } @Step("Search for <searchTerm> and verify the result") fun search(searchTerm: String) { driver.findElement(By.name("q")).sendKeys(searchTerm) driver.findElement(By.name("btnK")).click() val searchResult = driver.findElement(By.xpath("//div[@class='g']")) assert(searchResult.text.contains(searchTerm)) } @Step("Close the browser") fun closeBrowser() { driver.quit() } }
इस उदाहरण में, स्क्रिप्ट न केवल एक खोज करती है, बल्कि यह भी दावा करती है कि लौटाए गए खोज परिणामों में खोज शब्द शामिल है। यह सुनिश्चित करने में मदद करता है कि परीक्षण सटीक है और खोज कार्यक्षमता के साथ होने वाली किसी भी समस्या को पकड़ लेगा।
क्योंकि स्क्रिप्ट स्वचालित है, यह हर बार समान इनपुट के साथ निष्पादित होने पर उसी तरह चलेगी, जिससे यह सुनिश्चित होगा कि परीक्षण दोहराने योग्य, सुसंगत और विश्वसनीय है। यह झूठे सकारात्मक और झूठे नकारात्मक को कम करने में मदद करता है, जो मैन्युअल परीक्षण के साथ हो सकता है।
इसके अतिरिक्त, आप परीक्षण के परिणामों को ट्रैक करने के लिए गेज रिपोर्ट, एल्यूर, टेस्टएनजी, जुनीट इत्यादि जैसे परीक्षण रिपोर्टिंग टूल का उपयोग कर सकते हैं, जिससे आप यह देख सकते हैं कि कोई परीक्षण विफल हुआ है या नहीं। यदि यह विफल हो गया है, तो यह विफलता के पीछे के कारण को प्रकट करेगा, जो विकास प्रक्रिया में मुद्दों को जल्दी पहचानने में मदद करता है और बाद में उन्हें और अधिक गंभीर समस्या बनने से रोकता है।
3. बार-बार परीक्षण सक्षम करता है
स्वचालित परीक्षण नियमित रूप से चलाए जा सकते हैं, जैसे कि हर बार कोड परिवर्तन किए जाते हैं, जो विकास प्रक्रिया में मुद्दों की पहचान करने में मदद कर सकते हैं और बाद में उन्हें और अधिक गंभीर समस्या बनने से रोक सकते हैं। यह विकास चक्र की शुरुआत में बगों को पकड़ने में सहायता करता है और बग्स को ठीक करने की समग्र लागत को कम करने में मदद करता है।
import com.thoughtworks.gauge.Step import org.openqa.selenium.By import org.openqa.selenium.WebDriver import org.openqa.selenium.chrome.ChromeDriver import org.junit.jupiter.api.Test import org.junit.jupiter.api.BeforeEach class AutomationTest { private lateinit var driver: WebDriver @BeforeEach fun openBrowser() { System.setProperty("webdriver.chrome.driver", "/path/to/chrome/driver") driver = ChromeDriver() driver.get("https://www.example.com") } @Test fun testSearch() { driver.findElement(By.name("q")).sendKeys("searchTerm") driver.findElement(By.name("btnK")).click() val searchResult = driver.findElement(By.xpath("//div[@class='g']")) assert(searchResult.text.contains("searchTerm")) } @AfterEach fun closeBrowser() { driver.quit() } }
यह स्क्रिप्ट JUnit5 फ्रेमवर्क और @Test
एनोटेशन का उपयोग करती है, जो एक विधि को परीक्षण विधि के रूप में चिह्नित करता है। यह परीक्षण सूट के भाग के रूप में परीक्षण को स्वचालित रूप से चलाने की अनुमति देता है। इसके अतिरिक्त, स्क्रिप्ट @BeforeEach
और @AfterEach
एनोटेशन का उपयोग करती है जो प्रत्येक परीक्षण विधि से पहले या बाद में निष्पादित होने वाली विधि को चिह्नित करती है।
आप सीआई/सीडी पाइपलाइन का भी उपयोग कर सकते हैं और इसके साथ स्वचालन परीक्षण को एकीकृत कर सकते हैं, जिससे निर्माण प्रक्रिया के भाग के रूप में और प्रत्येक कोड परिवर्तन के साथ परीक्षणों को स्वचालित रूप से चलाने की अनुमति मिलती है। इससे यह सुनिश्चित करने में मदद मिलती है कि उत्पादन में तैनात किए जाने से पहले कोड परिवर्तनों का परीक्षण किया जाता है और अच्छी गुणवत्ता वाले होते हैं।
4. लागत प्रभावी
स्वचालित परीक्षण मानवीय हस्तक्षेप के बिना चल सकते हैं, जो समय के साथ परीक्षण की लागत को कम करता है। स्वचालित परीक्षण नियमित रूप से चलाए जा सकते हैं और एक विशिष्ट समय पर चलने के लिए निर्धारित किए जा सकते हैं जो मानव संसाधनों की आवश्यकता को कम करता है।
import com.thoughtworks.gauge.Step import org.openqa.selenium.By import org.openqa.selenium.WebDriver import org.openqa.selenium.chrome.ChromeDriver import org.junit.jupiter.api.Test import org.junit.jupiter.api.BeforeEach class AutomationTest { private lateinit var driver: WebDriver @BeforeEach fun openBrowser() { System.setProperty("webdriver.chrome.driver", "/path/to/chrome/driver") driver = ChromeDriver() driver.get("https://www.example.com") } @Test fun testSearch() { driver.findElement(By.name("q")).sendKeys("searchTerm") driver.findElement(By.name("btnK")).click() val searchResult = driver.findElement(By.xpath("//div[@class='g']")) assert(searchResult.text.contains("searchTerm")) } @Test fun testSignUp() { driver.findElement(By.linkText("Sign Up")).click() driver.findElement(By.name("username")).sendKeys("myusername") driver.findElement(By.name("password")).sendKeys("mypassword") driver.findElement(By.name("submit")).click() val message = driver.findElement(By.xpath("//div[@class='message']")) assert(message.text.contains("Welcome myusername")) } @AfterEach fun closeBrowser() { driver.quit() } }
इस उदाहरण में, हमारे पास दो परीक्षण मामले हैं। पहला खोज कार्यक्षमता के परीक्षण के लिए है और दूसरा साइन-अप कार्यक्षमता का परीक्षण करने के लिए है। एक स्क्रिप्ट में कई परीक्षण मामले होने से, यह परीक्षण प्रक्रिया की समग्र दक्षता को बढ़ाता है, जिससे परीक्षण की समग्र लागत को कम करने में मदद मिल सकती है।
इसके अतिरिक्त, आप टेस्ट पैरामीटराइजेशन का उपयोग कर सकते हैं जहां आप एक ही टेस्ट केस को कई इनपुट और डेटा सेट के साथ चला सकते हैं। यह समग्र परीक्षण कवरेज को बढ़ाता है और परीक्षण की समग्र लागत को कम करते हुए अधिक बग खोजने में मदद करता है।
इसके अलावा, आप सॉसलैब्स, ब्राउज़रस्टैक और टेस्टिंगबॉट जैसे क्लाउड-आधारित परीक्षण परिवेशों का उपयोग कर सकते हैं, जिससे आप अपने परीक्षण बुनियादी ढांचे को बनाए रखने के बिना विभिन्न ब्राउज़रों और ऑपरेटिंग सिस्टम पर अपने परीक्षण चला सकते हैं। यह टेस्ट इंफ्रास्ट्रक्चर को बनाए रखने और स्केल करने से जुड़ी लागत को कम कर सकता है।
कुल मिलाकर, मानव संसाधनों की आवश्यकता को कम करके, परीक्षण प्रक्रिया की दक्षता में वृद्धि करके और क्लाउड-आधारित परीक्षण वातावरण का उपयोग करके स्वचालित परीक्षण लागत प्रभावी हो सकते हैं।
5. कवरेज बढ़ाता है
स्वचालित परीक्षण परिदृश्यों, इनपुट और उपयोग के मामलों की एक विस्तृत श्रृंखला को कवर कर सकते हैं जिन्हें मैन्युअल रूप से कवर करना मुश्किल है, इस प्रकार परीक्षण के समग्र कवरेज में वृद्धि होती है। स्वचालित परीक्षण विभिन्न ब्राउज़रों, विभिन्न उपकरणों, ऑपरेटिंग सिस्टम के विभिन्न संस्करणों, विभिन्न डेटा सेटों और विभिन्न परिदृश्यों को कवर कर सकते हैं जो परीक्षण के समग्र कवरेज को बढ़ाते हैं।
import com.thoughtworks.gauge.Step import org.openqa.selenium.By import org.openqa.selenium.WebDriver import org.openqa.selenium.chrome.ChromeDriver import org.junit.jupiter.api.Test import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.params.ParameterizedTest import org.junit.jupiter.params.provider.CsvSource class AutomationTest { private lateinit var driver: WebDriver @BeforeEach fun openBrowser() { System.setProperty("webdriver.chrome.driver", "/path/to/chrome/driver") driver = ChromeDriver() driver.get("https://www.example.com") } @ParameterizedTest @CsvSource(value = ["searchTerm1, expectedResult1", "searchTerm2, expectedResult2", "searchTerm3, expectedResult3"]) fun testSearch(searchTerm: String, expectedResult: String) { driver.findElement(By.name("q")).sendKeys(searchTerm) driver.findElement(By.name("btnK")).click() val searchResult = driver.findElement(By.xpath("//div[@class='g']")) assert(searchResult.text.contains(expectedResult)) } @AfterEach fun closeBrowser() { driver.quit() } }
इस उदाहरण में, हम JUnit5 @ParameterizedTest
एनोटेशन और @CsvSource
का उपयोग एक ही टेस्ट केस को कई इनपुट के साथ चलाने के लिए कर रहे हैं, जिससे समग्र परीक्षण कवरेज बढ़ रहा है। परीक्षण अलग-अलग इनपुट मानों के साथ तीन बार चलेगा, और हर बार यह जांच करेगा कि आउटपुट अपेक्षित परिणाम से मेल खाता है या नहीं।
इस तरह आप एक से अधिक डेटा सेट के साथ समान कार्यक्षमता का परीक्षण कर सकते हैं, जो अधिक बग खोजने में मदद करता है और समग्र परीक्षण कवरेज बढ़ाता है। इसके अतिरिक्त, आप समग्र परीक्षण कवरेज को बढ़ाते हुए, कई इनपुट के साथ परीक्षण मामलों को चलाने के लिए टेस्टएनजी, जुनीट5, आदि जैसे डेटा-संचालित परीक्षण ढांचे का भी उपयोग कर सकते हैं।
6. संगति में सुधार करता है स्वचालित परीक्षण हर बार एक ही तरह से चलते हैं, यह सुनिश्चित करते हुए कि समान मुद्दे बार-बार छूटे नहीं। स्वचालित परीक्षण दोहराए जाने योग्य, सुसंगत और विश्वसनीय होते हैं जो झूठी सकारात्मकता और झूठी नकारात्मकता को कम करते हैं।
import com.thoughtworks.gauge.Step import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.Response class API_AutomationTest { @Step("GET request to <endpoint> and verify the response") fun testAPI(endpoint: String) { val client = OkHttpClient() val request = Request.Builder() .url(endpoint) .get() .build() val response = client.newCall(request).execute() val json = response.body()?.string() assert(json!!.contains("\"userId\": 1")) } }
यह स्क्रिप्ट गेज फ्रेमवर्क और @Step
एनोटेशन का उपयोग करती है, जो परीक्षण परिदृश्य में एक चरण के रूप में एक विधि को चिह्नित करती है। यह परीक्षण परिदृश्य को पठनीय और समझने योग्य प्रारूप में लिखने की अनुमति देता है, जिससे परीक्षण के प्रवाह को समझना आसान हो जाता है।
आप डेटा-संचालित परीक्षण की गेज की अवधारणा का भी उपयोग कर सकते हैं, जहां आप एक ही परीक्षण परिदृश्य को कई इनपुट के साथ चला सकते हैं, समग्र परीक्षण कवरेज बढ़ा सकते हैं और संभावित रूप से अधिक बग ढूंढ सकते हैं।
इसके अतिरिक्त, आप गेज की रिपोर्टिंग क्षमता का उपयोग कर सकते हैं, जो परीक्षण परिदृश्यों, परीक्षण परिणामों और परीक्षण निष्पादन समय की स्पष्ट और संक्षिप्त रिपोर्ट प्रदान करती है।
7. सतत एकीकरण और सतत वितरण को सक्षम बनाता है
निरंतर एकीकरण और वितरण के लिए स्वचालित परीक्षण एक प्रमुख प्रवर्तक है, जो आधुनिक सॉफ्टवेयर विकास का एक महत्वपूर्ण पहलू है। स्वचालित परीक्षण सीआई/सीडी पाइपलाइन के साथ एकीकृत किए जा सकते हैं और प्रत्येक कोड परिवर्तन पर स्वचालित रूप से चलाए जा सकते हैं, यह सुनिश्चित करते हुए कि कोड परिवर्तनों का परीक्षण किया जाता है और उत्पादन में तैनात किए जाने से पहले अच्छी गुणवत्ता वाले होते हैं।
आप सीआई/सीडी पाइपलाइन का उपयोग कर सकते हैं और इसके साथ स्क्रिप्ट को एकीकृत कर सकते हैं, जिससे निर्माण प्रक्रिया के हिस्से के रूप में और प्रत्येक कोड परिवर्तन के साथ परीक्षणों को स्वचालित रूप से चलाने की अनुमति मिलती है।
उदाहरण के लिए, आप Jenkins, Travis, CircleCI, आदि का उपयोग CI/CD टूल के रूप में कर सकते हैं। फिर आप प्रोजेक्ट बनाने के लिए जॉब सेट कर सकते हैं, टेस्ट केस चला सकते हैं और टेस्ट पास होने पर एप्लिकेशन को प्रोडक्शन में तैनात कर सकते हैं।
यह आधुनिक सॉफ़्टवेयर विकास का एक महत्वपूर्ण पहलू है, और यह एक तेज़ और अधिक विश्वसनीय सॉफ़्टवेयर डिलीवरी प्राप्त करने में मदद करता है।
pipeline { agent any stages { stage('Build') { steps { sh './gradlew build' } } stage('Test') { steps { sh 'gauge run specs/' } } stage('Deploy') { steps { sh './deploy.sh' } } } }
यह Jenkinsfile तीन चरणों वाली एक पाइपलाइन को परिभाषित करता है: बिल्ड, टेस्ट और डिप्लॉय।
बिल्ड चरण में, पाइपलाइन कमांड './gradlew बिल्ड' चलाती है। यह आदेश परियोजना का निर्माण करेगा और आवश्यक कलाकृतियाँ उत्पन्न करेगा।
परीक्षण चरण में, पाइपलाइन कमांड 'गेज रन स्पेक्स/' चलाती है। यह आदेश ऐनक फ़ोल्डर में सभी गेज परीक्षण मामलों को निष्पादित करेगा।
तैनाती चरण में, पाइपलाइन कमांड './deploy.sh' चलाती है। यह आदेश एप्लिकेशन को उत्पादन वातावरण में परिनियोजित करेगा।
आप इस Jenkinsfile को चलाने के लिए Jenkins जॉब सेट अप कर सकते हैं और यदि परीक्षण पास हो जाते हैं तो यह एप्लिकेशन का निर्माण, परीक्षण और परिनियोजन करेगा।
इस उदाहरण के साथ, आप देख सकते हैं कि आप निरंतर एकीकरण और निरंतर वितरण को सक्षम करने के लिए जेनकिंसफाइल में गेज परीक्षणों का उपयोग कैसे कर सकते हैं। यह आपको परीक्षण प्रक्रिया को स्वचालित करने की अनुमति देता है।
एकाधिक परीक्षण मामलों को एक स्क्रिप्ट में चलाने की अनुमति देकर दक्षता बढ़ाता है।
मानवीय त्रुटि को कम करके और लगातार परिणाम प्रदान करके सटीकता में सुधार करता है।
नियमित आधार पर परीक्षण चलाना आसान बनाकर लगातार परीक्षण सक्षम करता है।
परीक्षण की समग्र लागत को कम करके और परीक्षण कवरेज को बढ़ाकर लागत प्रभावी है।
एक ही टेस्ट केस को कई इनपुट और डेटा सेट के साथ चलाने की अनुमति देकर कवरेज बढ़ाता है।
यह सुनिश्चित करके निरंतरता में सुधार करता है कि सॉफ्टवेयर अपेक्षा के अनुरूप काम कर रहा है।
एक निर्माण प्रक्रिया के भाग के रूप में परीक्षणों को स्वचालित रूप से चलाने की अनुमति देकर निरंतर एकीकरण और निरंतर वितरण को सक्षम करता है, और प्रत्येक कोड परिवर्तन के साथ, यह सुनिश्चित करता है कि कोड परिवर्तनों का परीक्षण किया जाता है और उत्पादन में तैनात किए जाने से पहले अच्छी गुणवत्ता वाले होते हैं।
कुल मिलाकर, स्वचालन परीक्षण सॉफ्टवेयर की समग्र गुणवत्ता में सुधार करने में मदद करता है, परीक्षण की समग्र लागत को कम करता है, परीक्षण कवरेज को बढ़ाता है, निरंतरता में सुधार करता है और निरंतर एकीकरण और निरंतर वितरण को सक्षम करता है जिसके परिणामस्वरूप तेजी से और अधिक विश्वसनीय सॉफ्टवेयर वितरण होता है।