इकाई बनाम एकीकरण परीक्षण
1) परीक्षण प्रकारों में अंतर क्यों करें
परीक्षणों का उचित दान विकास को अनुमानित बनाता है: इकाई तर्क दोषों को जल्दी और सस्ते में पकड़ ती है; एकीकरण मॉड्यूल, वास्तविक परिवहन और "गोंद" के बंडलों की जांच करता है। "एक साथ, वे प्रतिगमन को कम करते हैं और रिलीज में तेजी लाते हैं।
2) परिभाषाएँ और सीमाएँ
इकाई-परीक्षण
अलगाव में व्यवहार की एक छोटी इकाई (फ़ंक्शन, वर्ग, उपयोग-मामले) का परीक्षण करता है।
बाहरी निर्भरता को प्रतिस्थापित किया जाता है (नकली/स्टब/नकली)।
फास्ट (एमएस-दसियों), नियतात्मक।
एकीकरण परीक्षण
कई वास्तविक घटकों की बातचीत की जाँच करता है: डेटाबेस, ब्रोकर (काफ्का/रैबिटएमक्यू), एचटीटीपी/जीआरपीसी, फ़ाइल सिस्टम, कैश।
न्यूनतम मोक, वास्तविक प्रोटोकॉल।
धीमी (सैकड़ों एमएस-सेकंड), समर्थन में अधिक महंगा।
3) पिरामिड का परीक्षण (बर्फ का सींग नहीं)
फाउंडेशन: यूनिट (संख्या में 70-80%) - सस्ता, तेज।
मध्य परत: एकीकरण/घटक (15-25%) - महत्वपूर्ण रास्ते और अनुबंध।
शीर्ष: E2E/UX/Exploratory (5-10%) - न्यूनतम पर्याप्त।
पक्षों पर: गुणवत्ता एम्पलीफायरों के रूप में स्थैतिक विश्लेषण/लिंट/प्रकार की जांच और उत्परिवर्तन परीक्षण।
4) यूनिट को क्या देना है और एकीकरण को क्या देना है
5) डेटा और सुधार
इकाई
इनलाइन फिक्शन/बिल्डर्स (फैक्ट्री के तरीके)।
सीमा मूल्यों के लिए तालिका-चालित परीक्षण।
आक्रमणकारियों के लिए संपत्ति-आधारित दृष्टिकोण (उदा। "डेबिट का योग = क्रेडिट का योग")।
एकीकरण
हर्मेटिक वातावरण: टेस्टकॉन्टेनर्स/डॉकर कम्पोज 'पोस्टग्रेस + रेडिस + काफ्का + वायरमॉक'।
डेटाबेस/कैश में प्रारंभिक बीज (ट्रांजेक्शन/रोलबैक, ट्रंकेट) के बाद और सफाई।
घड़ियां/टाइमर नकली (नियंत्रित) हैं, अन्यथा फ्लैक्स।
6) उपकरण और पैटर्न
मॉक/स्टब्स/फेक/जासूस:- स्टब एक निश्चित उत्तर (सस्ता) है।
- मॉक - कॉल की इंटरैक्शन/संख्या की जाँच करें।
- फेक एक सरलीकृत कार्यान्वयन है (उदाहरण के लिए, इन-मेमोरी रेपो)।
- अनुबंध परीक्षण (सीडीसी): संधि/स्वैगर-आधारित - ग्राहक की अपेक्षाओं को ठीक करें और प्रदाता की जांच करें।
- वायरमॉक/मॉकसर्वर - तीसरे पक्ष की सेवाओं के लिए HTTP स्टब।
- टेस्टनकर्ता स्थानीय स्तर पर और "चिड़ियाघर" के बिना सीआई में रहते हैं।
7) उदाहरण
7. 1 इकाई: भुगतान आइडेम्पोटेंस (स्यूडोकोड)
python def test_idempotent_create_payment_returns_same_id():
repo = InMemoryPayments()
service = Payments(repo)
first = service. create(amount=100, key="abc")
second = service. create(amount=100, key="abc")
assert first. id == second. id assert repo. count() == 1
7. 2 एकीकरण: वेबहुक हस्ताक्षर (HMAC) + दोहराएं
bash docker-compose: app + redis + wiremock (PSP)
docker compose -f docker-compose. test. yml up -d pytest -m "integration and webhook" -q
जाँचें:
- वायरमॉक एक 'एक्स-टाइमस्टैम्प' और एक हस्ताक्षर के साथ एक घटना देता है।
- अनुप्रयोग एचएमएसी की जाँच करता है, 'ईवेंट _ आईडी' द्वारा डीडुप्लिकेट करता है, 5 सेकंड के बाद दोहराता है एक डबल नहीं बनाता है.
- हम '200' की जाँच करते हैं और यह कि केवल एक प्रविष्टि है।
7. 3 सीडीसी: प्रदाता को ग्राहक अनुबंध
क्लाइंट एक संधि उत्पन्न करता है (प्रतीक्षा: 'POST/v1/payout' → '201' एक आरेख के साथ)।
सीआई में प्रदाता अपने स्टैंड पर संविदा का सत्यापन चलाता है।
8) गति, समानता, गुच्छे
इकाइयों को <100 ms प्रति परीक्षण चलाना चाहिए; पैकेट - सेकंड।
एकीकरण - कंटेनरों/बंदरगाहों द्वारा समानांतर; स्टार्टअप माइग्रेशन का उपयोग करें।
परतदार मारक:- नियंत्रित समय (नकली घड़ी),
- उम्मीदें "स्पष्ट घटना से", 'नींद' नहीं,
- स्थिर थ्रेसहोल्ड (निर्धारित रूप से जिटर परीक्षण के साथ रेट्राई)
9) गुणवत्ता मैट्रिक्स
कवरेज (लाइनें/शाखाएं): प्रवृत्ति को देखने के लिए उपयोगी, लेकिन लक्ष्य नहीं।
उत्परिवर्तन परीक्षण (PIT/Mutmut): दिखाता है कि क्या परीक्षण "मार" झूठे परिवर्तन - हत्यारों की वास्तविक शक्ति।
परीक्षण अवधि और परतदार दर: वृद्धि पर अलर्ट।
दोष नियंत्रण: उत्पादन से पहले बग का अनुपात।
10) सीआई/सीडी में एम्बेडिंग
नौकरियां: इकाई → एकीकरण → e2e (सेवा द्वारा प्रशंसक-आउट)।
निर्भरता कैश, डेटाबेस/भाषा/संस्करण द्वारा समानांतर मैट्रिसेस।
रिपोर्ट: JUnit/Allure + कंटेनर लॉग कलाकृतियाँ (बूंदों के लिए)।
गेट: "ग्रीन यूनिट + क्रिटिकल एकीकरण" - विलय की स्थिति; e2e - रात को।
मैट्रिक्स उदाहरण (GitHub क्रियाएं, टुकड़ा):yaml strategy:
matrix:
db: [postgres14, postgres16]
steps:
- run: docker run -d --name db -e POSTGRES_PASSWORD=pw postgres:${{ matrix. db }}
- run: pytest -m "unit" -q
- run: pytest -m "integration" -q
11) Microservices और घटनाएँ
सेवा अनुबंध: OpenAPI/Protobuf वर्शन हैं; संगतता परीक्षण (पिछड़ा)।
घटना-चालित:- इकाई: डोमेन इवेंट मैपिंग और अपरिवर्तनीय।
- एकीकरण: एक वास्तविक दलाल (काफ्का), आउटबॉक्स/इनबॉक्स शब्दार्थ में प्रकाशन/सदस्यता, वास्तव में एक बार नकल (कम से कम - पहचान)।
- आउट-ऑफ-ऑर्डर परीक्षण।
12) एकीकरण में डेटा और अलगाव
प्रत्येक परीक्षण - एक अद्वितीय स्कीमा/डेटाबेस (टेस्टकंटेनर जेडीबीसी यूआरएल '? TC _ TMPFS =/var/lib/postgresql/data: rw ').
लेन-देन सुधार (begin→run→rollback) सफाई को गति देता है।
Redis/cache के लिए, कुंजी उपसर्ग 'परीक्षण: $ {RUN _ ID}:' और 'FLUSHDB' आंसू है।
13) आईगेमिंग/वित्त की विशिष्टताएं
धन और सीमा: आक्रमणकारियों के लिए संपत्ति-आधारित परीक्षण (शेष ≥ 0, कुल प्रतिबंध)।
नियामक: लॉगिंग चेक (ऑडिट लॉग लिखा गया है), अपरिवर्तनीय घटनाएं।
भुगतान/PSP: HMAC/mTLS एकीकरण परीक्षण, 'Retry-After', idempotency, dedup 'jti'।
जिम्मेदार नाटक: दहलीज/कूलडाउन नियम परीक्षण; नकली घड़ी पर "vchera→segodnya"।
14) एंटीपैटर्न
"इकाइयाँ" जो DB/HTTP को बढ़ाती हैं, पहले से ही एकीकरण (भ्रमित परतें और CI को धीमा करती हैं) हैं।
खाली बयानों के कारण उच्च कवरेज ("कवर, लेकिन जाँच नहीं")।
तृतीय-पक्ष सेवाओं का मोकी तर्क जहां एक अनुबंध की आवश्यकता होती है (अद्यतन होने पर टूट जाता है)।
घटना/स्थिति की उम्मीदों के बजाय 'नींद (5)' के साथ परीक्षण।
समानांतर परीक्षण के लिए सामान्य परीक्षण डेटाबेस - दौड़ और फ्लेक।
15) प्रोड रेडीनेस चेकलिस्ट
- पिरामिड को% के रूप में परिभाषित किया गया है - और रन टाइम द्वारा शेयरों को लक्षित किया गया है
- इकाइयाँ पृथक, तेज, कवर सीमा मूल्यों और अपरिवर्तनीय हैं।
- एकीकरण आम राज्यों के बिना एक हेर्मेटिक वातावरण (टेस्टकंटेनर/कम्पोज़) का उपयोग करता है।
- अनुबंध परीक्षण (OpenAPI/Pact) CI में सत्यापित हैं।
- टेस्ट डेटा - प्रबंधित: बीज/रोलबैक/उपसर्ग, नकली घड़ी।
- समानांतर रन, JUnit/Allure रिपोर्ट, कंटेनर लॉग कलाकृतियाँ।
- मेट्रिक्स: अवधि, परतदार दर, उत्परिवर्तन स्कोर; गिरावट के लिए अलर्ट।
- भुगतान/वेबहुक परिदृश्य: एचएमएसी/एमटीएलएस, रेट्राई, आइडेम्पोटेंसी, डेडअप।
- रणनीति प्रलेखन और नमूना परीक्षण टेम्पलेट।
16) टीएल; डीआर
इकाई - अधिकतम तर्क, न्यूनतम वातावरण; एकीकरण - न्यूनतम मोक, अधिकतम यथार्थवाद। पिरामिड पकड़ो: फास्ट यूनिट्स 80% दोषों को पकड़ ते हैं, एकीकरण बंडलों और अनुबंधों की पुष्टि करता है। हर्मेटिक कंटेनरों, अनुबंध परीक्षणों, नकली घड़ी और समानतावाद का उपयोग करें। न केवल कवरेज, बल्कि उत्परिवर्तन स्कोर और परतदार दर को भी मापते हैं। विशेष रूप से भुगतान/वेबहुक पथ की जाँच करें: हस्ताक्षर, रिट्रे और पहचान।