अपने कोड के लिए एक टेस्ट सूट सेट करना एक बाधा की तरह लग सकता है जिसके लिए आप तैयार नहीं हैं, लेकिन यह लाइब्रेरी बहुत अधिक तनाव लेती है।

परीक्षण सॉफ्टवेयर विकास का एक अनिवार्य हिस्सा है। यह बग को जल्दी पकड़ने में मदद करता है और लाइन के नीचे त्रुटियों की संभावना को कम करता है।

Pytest Python के लिए सबसे लोकप्रिय टेस्टिंग फ्रेमवर्क में से एक है। यह आपको छोटे और पठनीय परीक्षण लिखने देता है जो आपके आवेदन के बढ़ने के साथ-साथ बढ़ सकते हैं। अपने Python कोड के साथ Pytest को सेट अप और उपयोग करना सीखें।

पायटेस्ट की स्थापना

Pytest को स्थापित करने से पहले, यह सबसे अच्छा है एक आभासी वातावरण बनाएँ अपने परीक्षण वातावरण को अलग करने के लिए, ताकि आप अन्य पैकेजों और निर्भरताओं के साथ विरोध से बच सकें।

वर्चुअल वातावरण बनाने के लिए, Pytest को स्थापित करने से पहले निम्न कमांड चलाएँ।

पायथन -एम वेनव परीक्षण

यह आपकी वर्तमान निर्देशिका में परीक्षण नाम का एक नया आभासी वातावरण बनाएगा। पर्यावरण को सक्रिय करने के लिए, यदि आप Linux या Mac पर हैं तो यह कमांड चलाएँ:

स्रोत परीक्षण/बिन/सक्रिय

विंडोज के लिए, यह कमांड चलाएँ:

टेस्ट\\स्क्रिप्ट\\active

पाइटेस्ट को स्थापित करने के लिए, आप अपने टर्मिनल में इस कमांड के साथ पाइप, पायथन पैकेज मैनेजर का उपयोग कर सकते हैं:

पिप पाइस्टेस्ट स्थापित करें

यदि आपके पास पिप नहीं है, तो चिंता न करें; तुम कर सकते हो विंडोज, मैक और लिनक्स पर पिप स्थापित करें.

आपने Pytest को सही तरीके से स्थापित किया है या नहीं यह जाँचने के लिए निम्न कमांड चलाएँ।

पाइस्टेस्ट --वर्जन

इसे स्थापित संस्करण संख्या वापस करनी चाहिए।

अपना पहला टेस्ट बनाना

निम्नलिखित फ़ंक्शन पर विचार करें जो दो संख्याओं को जोड़ता है और परिणाम देता है।

डीईएफ़add_numbers(ए, बी):
वापस करना ए + बी

इस फ़ंक्शन के साथ कई चीज़ें गलत हो सकती हैं। उदाहरण के लिए, विचार करें कि क्या होता है यदि आप फ़ंक्शन को गैर-संख्यात्मक मानों जैसे कि कोई नहीं या प्रकार स्ट्रिंग का मान कहते हैं। ये कुछ संभावित किनारे के मामले हैं जो फ़ंक्शन को विफल कर सकते हैं।

आपके द्वारा लिखे गए पहले परीक्षणों में से एक को यह जांचना चाहिए कि फ़ंक्शन अपेक्षित परिणाम देता है या नहीं। ऐसा करने के लिए, आप फ़ंक्शन के वास्तविक आउटपुट की अपेक्षित आउटपुट से तुलना करने के लिए मुखर कीवर्ड का उपयोग कर सकते हैं। Add_numbers फ़ंक्शन के मामले में, परीक्षण फ़ंक्शन ऐसा दिखाई दे सकता है:

डीईएफ़test_add_numbers():
ज़ोर add_numbers(2, 3) == 5
ज़ोर add_numbers(-1, 1) == 0
ज़ोर add_numbers(0, 0) == 0

इस परीक्षण फ़ंक्शन में तीन मुखर कथन शामिल हैं, जिनमें से प्रत्येक add_numbers फ़ंक्शन के आउटपुट की तुलना अपेक्षित मान से करता है। पहला टेस्ट चेक करता है कि 2 और 3 को जोड़ने पर 5 रिटर्न मिलता है, दूसरा टेस्ट चेक करता है कि -1 और 1 को जोड़ने पर 0 आता है, और तीसरा टेस्ट चेक करता है कि 0 और 0 को जोड़ने पर 0 रिटर्न मिलता है।

पाइस्टेस्ट के साथ टेस्ट कैसे चलाएं

अपने परीक्षण लिखे जाने के बाद, अगला चरण उन्हें चलाना है। Pytest के साथ ऐसा करने के लिए, अपनी परीक्षण फ़ाइल वाली निर्देशिका पर जाएँ और pytest कमांड चलाएँ:

pytest

यदि सब कुछ उम्मीद के मुताबिक काम करता है, तो आपको एक संदेश दिखाई देगा जो दर्शाता है कि सभी परीक्षण सफलतापूर्वक पास हो गए हैं। हालाँकि, यदि कोई भी अभिकथन विफल हो जाता है, तो Pytest एक त्रुटि की रिपोर्ट करेगा और आपको इनपुट मान दिखाएगा जो विफलता का कारण बना।

उदाहरण के लिए, मान लें कि आपने add_numbers फ़ंक्शन के लिए निम्न परीक्षण फ़ंक्शन चलाया:

डीईएफ़test_add_numbers():
ज़ोर add_numbers(2, 3) == 6
ज़ोर add_numbers(-1, 1) == 0
ज़ोर add_numbers(0, 0) == 0

पहला अभिकथन विफल हो जाएगा क्योंकि अपेक्षित मान 6 था, लेकिन वास्तविक मान 5 था (2 और 3 का योग)। पाइटेस्ट निम्नलिखित संदेश लौटाएगा:

यह संदेश आपको वे इनपुट मान दिखाता है जो मूल्य उत्पन्न करते हैं और यह भी बताते हैं कि वास्तविक मूल्य क्या होना चाहिए। इससे आपके कोड में त्रुटियों को जल्दी से पहचानना और ठीक करना आसान हो जाता है।

अपवादों का दावा करने के लिए Pytest.raises का उपयोग करना

अब, Add_numbers फ़ंक्शन के किनारे के मामलों में से एक को कवर करने के लिए एक परीक्षण लिखते हैं। जब आप फ़ंक्शन के लिए कोई नहीं जैसे गैर-संख्यात्मक तर्क पास करते हैं, तो पायथन को टाइपरर अपवाद उठाना चाहिए।

आपको पहले से ही होना चाहिए अपने पायथन कार्यक्रमों में अपवादों को संभालना, और आप परीक्षण कर सकते हैं कि आपका कोड उन्हें सही ढंग से भी उठाता है।

ऐसा करने के लिए, निम्न परीक्षण फ़ंक्शन को अपनी फ़ाइल में कॉपी करें। यह जांचने के लिए pytest.raises संदर्भ प्रबंधक का उपयोग करता है कि क्या add_number फ़ंक्शन को "कोई नहीं" के साथ कॉल करने से TypeError अपवाद उत्पन्न होता है।

आयात pytest

डीईएफ़test_add_numbers_with_invalid_inputs():
साथ pytest.raises (लेखन त्रुटि):
add_numbers(कोई नहीं, 2)

फिर कमांड लाइन से पाइस्टेस्ट चलाएं। यदि अपवाद नहीं उठाया जाता है, तो परीक्षण विफल हो जाएगा।

आप आगे जा सकते हैं और अपवाद संदेश का विवरण देख सकते हैं। संदर्भ प्रबंधक विवरण के साथ एक ExceptionInfo ऑब्जेक्ट बनाता है।

उदाहरण के लिए, इस परीक्षण समारोह में, अपवाद संदेश को इस तरह दर्ज करें:

डीईएफ़test_add_numbers_with_invalid_inputs():
साथ pytest.raises (त्रुटि प्रकार) जैसा exc_info:
add_numbers(कोई नहीं, 2)

ज़ोर exc_info.value.args [0] == "असमर्थित ऑपरेंड प्रकार + के लिए: 'noneType' और 'int'"

यदि संदेश परीक्षण में एक से मेल नहीं खाता है, तो पाइस्टेस्ट विफलता का संकेत देगा।

एकाधिक इनपुट का एक साथ परीक्षण करने के लिए पैरामीटरयुक्त परीक्षण का उपयोग कैसे करें

इस तरह के कई इनपुट वाले फ़ंक्शन को मैन्युअल रूप से कॉल करने के बजाय:

डीईएफ़test_add_numbers():
ज़ोर add_numbers(2, 3) == 6
ज़ोर add_numbers(-1, 1) == 0
ज़ोर add_numbers(0, 0) == 0

पाइस्टेस्ट एक पैरामीटरयुक्त परीक्षण सुविधा प्रदान करता है जो आपको एक ही काम को और अधिक आसानी से करने की अनुमति देता है। यहां बताया गया है कि आप उपरोक्त परीक्षण फ़ंक्शन को कैसे फिर से लिख सकते हैं:

आयात pytest

@pytest.mark.parametrize("ए, बी, अपेक्षित", [
(2, 3, 5),
(-1, 1, 0),
(0, 0, 0)
])
डीईएफ़test_add_numbers(ए, बी, अपेक्षित):
ज़ोरadd_numbers(ए, बी)== अपेक्षित

मल्टीपल टेस्ट कैसे चलाएं

अब तक, आपने केवल add_numbers फ़ंक्शन के लिए दो परीक्षण लिखे हैं। अधिक परीक्षणों वाले अधिक जटिल कार्यों के लिए, आप उन्हें एक कक्षा में समूहित करना चाह सकते हैं।

उदाहरण के लिए, यहां बताया गया है कि आप ऐड फंक्शन के लिए टेस्ट क्लास कैसे बनाएंगे।

कक्षाTestAddFunction:
@pytest.mark.parametrize("ए, बी, अपेक्षित", [
(2, 3, 5),
(-1, 1, 0),
(0, 0, 0),
])
डीईएफ़test_addition_with_numbers(स्वयं, ए, बी, अपेक्षित):
ज़ोर add_numbers (ए, बी) == अपेक्षित

डीईएफ़test_add_numbers_with_invalid_inputs(खुद):
साथ pytest.raises (लेखन त्रुटि) जैसा exc_info:
add_numbers(कोई नहीं, 2)
ज़ोर exc_info.value.args [0] == "असमर्थित ऑपरेंड प्रकार + के लिए: 'noneType' और 'int'"

ध्यान दें कि आपको "टेस्ट" के साथ वर्ग के नाम को उपसर्ग करने की आवश्यकता है ताकि पाइस्टेस्ट इसे एक परीक्षण वर्ग के रूप में पहचान सके और इसे चला सके।

पाइटेस्ट में और भी कई विशेषताएं हैं

Pytest का उपयोग करके, आप स्वचालित रूप से सत्यापित कर सकते हैं कि आपका कोड आपकी अपेक्षा के अनुसार काम करता है। पाइटेस्ट कई अन्य सुविधाएँ प्रदान करता है जैसे कि जुड़नार जो आपको परीक्षण डेटा सेट करने और अपने परीक्षण कार्यों पर मेटाडेटा सेट करने के लिए चिह्नों को नष्ट करने की अनुमति देता है।

इसके अतिरिक्त, आप अपने CI पाइपलाइन में Pytest को एकीकृत कर सकते हैं और जब आप अपना कोड बदलते हैं तो स्वचालित रूप से और लगातार परीक्षण चलाना शुरू कर सकते हैं।