ऑटोमेशन रिपोर्टिंग और डिबगिंग
Automation reporting वह तरीका है जिससे एक test run लोगों को बताता है कि क्या हुआ: कौन-से tests चले, कौन-से fail हुए, हर एक में कितना समय लगा और हर failure ने कौन-सा evidence छोड़ा। Fail हुए test की debugging उसके बाद का काम है: उस evidence को पढ़कर पता करना कि test क्यों fail हुआ और कारण product में है, test में या environment में।
उदाहरण: nightly run बताता है कि VAT is added to the order total fail हुआ: expected 172.50 SAR, received 150.00 SAR। Failure के साथ सेव हुए screenshot, trace और server response से, बिना कुछ दोबारा चलाए, दिख जाता है कि server ने VAT जोड़ना बंद कर दिया है।
यह क्यों ज़रूरी है
कोई automated suite उतना ही काम का है जितनी जल्दी लाल result पर कार्रवाई हो सके। अगर failure सिर्फ़ expected true, received false छोड़ता है, तो किसी को test दोबारा चलाकर CI की conditions का अंदाज़ा लगाना पड़ता है; फिर team build हरा होने तक re-run करती है, और असली regressions शोर में निकल जाते हैं।
अच्छा evidence failure को छोटी जाँच में बदल देता है: screenshot और trace आम तौर पर दिखा देते हैं कि test ठीक करना है, environment owner को बुलाना है या defect report करना है। यह bug report को भी काम लायक बनाता है: “checkout test fail हुआ” की जगह fail हुई request, response और trace साथ में।
Reports: एक run, कई पाठक
एक run के कई पाठक होते हैं। जिसने run शुरू किया वह console पढ़ता है। जो failure की जाँच करता है उसे HTML report चाहिए, जिसमें हर test खुलकर अपने steps, error, retries और attachments दिखाए। CI server को machine-readable file चाहिए, आम तौर पर JUnit XML, ताकि वह हर test का result और उसकी history दिखा सके। Playwright में ज़रूरी formats reporter के नीचे list करें।
अच्छी report बिना किसी से पूछे बता देती है कि क्या fail हुआ, कहाँ, किस environment में और किस evidence के साथ। Tests का नाम उस behaviour पर रखें जिसे वे check करते हैं, business-level actions को test.step() में लपेटें ताकि report test case की तरह पढ़ी जाए, और वह data attach करें जो screen पर नहीं दिखता।
- Run context: build या commit, browser, base URL और शुरू होने का समय, ताकि failure को deployments और server logs से मिलाया जा सके।
- Flaky tests (पहले fail, फिर retry पर pass) को passed से अलग गिनें; वरना report उन्हें छिपा देती है।
// playwright.config.ts (excerpt): one run, three readers
import { defineConfig } from '@playwright/test';
export default defineConfig({
reporter: [
['list'], // the terminal
['html', { open: 'never' }], // people: playwright-report/
['junit', { outputFile: 'results/junit.xml' }], // the CI server
],
});
// checkout.spec.ts: steps and attachments make the report read like a test case
import { test, expect } from '@playwright/test';
test('VAT is added to the order total', async ({ page }, testInfo) => {
const cart = await test.step('Create a cart with one 150.00 SAR book', () =>
createCart(page, { sku: 'BOOK-01', qty: 1 })); // createCart: a project helper
await testInfo.attach('cart', {
body: JSON.stringify(cart), contentType: 'application/json',
});
await test.step('Open checkout and check the total', async () => {
await page.goto('/checkout/' + cart.id);
await expect(page.getByTestId('order-total')).toHaveText('172.50 SAR');
});
});Screenshots, video और traces: हर एक क्या दिखाता है
Evidence सिर्फ़ fail हुए tests के लिए रखें: हर तरह का evidence अलग सवाल का जवाब देता है और run time व storage खर्च करता है।
- Screenshot: failure के पल का page, जो बताता है “user ने क्या देखा?”: error banner, spinner, button के ऊपर कोई dialog। Playwright:
screenshot: 'only-on-failure'; Cypresscypress runमें test fail होने पर अपने-आप screenshot लेता है; Selenium में runner के failure hook मेंtakeScreenshot()(JavaScript) याgetScreenshotAs(Java) call करें। - Video: पूरा test, जो क्रम और हलचल दिखाता है, जैसे पल भर को दिखा dialog, पर DOM, network या console data के बिना। Files भारी होती हैं: Playwright में
video: 'retain-on-failure'इस्तेमाल करें; Cypress तभी record करता है जब उसकाvideooption चालू हो (default रूप से बंद)। - Trace: ऐसी recording जिसमें आप step by step चल सकते हैं। Playwright trace में हर action के पहले और बाद के DOM snapshots, call log, console, network requests और responses, और source line होती है। इसे
npx playwright show-traceसे, HTML report से, या trace.playwright.dev पर खोलें, जो file को आपके browser में ही load करता है, कहीं upload नहीं करता। - Logs: runner output, browser console और उसी समय-खिड़की के server logs, जिन्हें timestamp या request id से मिलाया जाता है।
- Evidence भी data है: trace में request headers, cookies और test का टाइप किया हर value हो सकता है, इसलिए synthetic data इस्तेमाल करें और artifacts की expiry तय करें।
// playwright.config.ts (excerpt): keep evidence for failures only
import { defineConfig } from '@playwright/test';
export default defineConfig({
retries: process.env.CI ? 1 : 0,
use: {
screenshot: 'only-on-failure',
video: 'retain-on-failure',
trace: 'on-first-retry', // needs retries; with none, use 'retain-on-failure'
},
});
// Then, in a terminal, open a trace downloaded from a CI run:
// npx playwright show-trace trace.zipFail हुए test की debugging: पहले error से कारण तक
ISTQB testing और debugging को अलग करता है: testing failures दिखाती है, debugging उनके कारण ढूँढती, analyse करती और हटाती है। Fail हुए automated test में tester failure analysis करता है: defect product में है, test code में या environment में? Tester test code को debug करता है; developer उसी evidence से शुरू करके product को debug करता है।
पहला error पढ़ें, आख़िरी नहीं; बाद वाले errors आम तौर पर उसी के नतीजे होते हैं। उसका type बताता है कि कौन-सा artifact खोलना है। Setup error का मतलब है test अपने check तक पहुँचा ही नहीं: hook का error और server log पढ़ें। Timeout हुए action का मतलब है कोई element मिला नहीं या इस्तेमाल नहीं हो सका: उस action से पहले का DOM snapshot और उसका call log खोलें। Fail हुए assertion का मतलब है page ने कुछ और दिखाया: screenshot की तुलना expected value से करें, फिर Network tab में देखें कि data गलत आया या देर से।
उत्तर: Setup: कोई setup step, hook या fixture fail हुआ
परिणाम: Setup failure: data, sign-in या कोई serviceTest अपने check तक पहुँचा ही नहीं। Feature पर शक करने से पहले hook का error और server log पढ़ें।उत्तर: Action timeout: किसी click, fill या wait का समय ख़त्म हुआ
प्रश्न 2: Action से पहले के DOM snapshot में क्या element मौजूद है?Trace में उस action को खोलें और उसका call log पढ़ेंउत्तर: नहीं: error page, spinner या ख़ाली जगह
परिणाम: Page load नहीं हुआ: environment या productNetwork में fail या धीमी request, या Console में script error इसे समझाता है। Locator की समस्या नहीं।उत्तर: हाँ, पर उसका role, text या test id बदल गया
परिणाम: पुराना locator या बिना बताए UI बदलावRequirement देखें: बदलाव जान-बूझकर है तो test update करें, नहीं तो report करें।उत्तर: हाँ, पर ढका हुआ, disabled या अभी हिल रहा है
परिणाम: Call log रुकावट का नाम बताता हैApp की अपनी state का इंतज़ार करें या overlay को setup में संभालें, action को force न करें; अगर users भी अटकते हैं तो UI defect report करें।
उत्तर: Assertion: expected और received अलग हैं
प्रश्न 3: क्या screenshot वही value दिखाता है जो test को मिली?उत्तर: नहीं: उसमें expected value दिखती है
परिणाम: Test की समस्या: बहुत जल्दी check या गलत elementRetry करने वाला assertion और सही element पर ले जाने वाला locator इस्तेमाल करें।उत्तर: हाँ: page गलत value दिखाता है
प्रश्न 4: Trace के Network tab में, response कैसा आया?उत्तर: गलत: server ने गलत data भेजा
परिणाम: Back end: defect, गलत test data या बदली हुई settingResponse की तुलना आख़िरी green run से करें; request, response और build range के साथ report करें।Worked exampleउत्तर: सही, पर assertion timeout के बाद
परिणाम: धीमा response: overloaded environment या performance regressionTimeout न बढ़ाएँ; समय की तुलना आख़िरी green run से करें और उस request का server log पढ़ें।उत्तर: सही और समय पर
परिणाम: Front-end defectPage सही data को गलत दिखाता है; screenshot और trace के साथ report करें।
एक fail हुए test के लिए जिसका evidence आपके पास है। जो test बिना किसी बदलाव के re-run पर pass हो जाए, वह पहले flaky-test process में जाता है।
- Local पर reproduce करें:
npx playwright test --debugPlaywright Inspector में test को step by step चलाता है,--uiUI mode खोलता है जिसमें हर run को समय में आगे-पीछे देख सकते हैं, औरawait page.pause()headed run में चुनी हुई line पर test रोक देता है। ‘फ़ेलियर रिप्रोड्यूस करना’ lesson की तरह एक बार में एक ही चीज़ बदलें। - Timeout तब तक न बढ़ाएँ जब तक पता न हो कि समय क्यों ख़त्म हुआ: धीमा response ख़ुद defect हो सकता है।
Worked example: nightly run में गलत order total
Staging पर nightly UI run, build 512, एक failure report करता है; उसका retry भी fail हुआ, इसलिए यह failed है, flaky नहीं। नीचे report और trace के छोटे किए गए हिस्से हैं।
पहला error assertion है: element मिला, पर उसकी value गलत थी। Screenshot में cart का VAT 0.00 दिखता है, यानी test ने वही पढ़ा जो page ने दिखाया। Trace में GET /api/cart/8812 के response में पहले से "vatRate": 0 है: browser ने वही दिखाया जो server ने भेजा। आख़िरी green run, build 509, ने कोई trace नहीं रखा, पर उसकी report में अब भी वह cart JSON है जिसे test हर run में attach करता है, और उसमें "vatRate": 0.15 है; दोनों का JSON diff दिखाता है कि सिर्फ़ vatRate और total बदले।
तो कारण builds 509 और 512 के बीच back end का कोई बदलाव है या staging पर बदली हुई tax setting; developer या environment owner से एक सवाल तय कर देता है कि कौन-सा। Test सही है और जैसा है वैसा रहेगा। Report “Build 512 से Cart API सऊदी cart के लिए vatRate 0 लौटाता है” के साथ दोनों responses, trace और build range जाते हैं।
✘ checkout.spec.ts:42 › checkout › VAT is added to the order total
failed (retry #1 failed too) · chromium · staging · build 512
Error: expect(locator).toHaveText(expected)
Locator: getByTestId('order-total')
Expected: "172.50 SAR"
Received: "150.00 SAR"
at checkout.spec.ts:51
Attachments: cart · screenshot · video · trace
Build 512 › trace › Network › GET /api/cart/8812 → 200
{ "subtotal": 150.00, "vatRate": 0, "total": 150.00 }
Build 509 (last green run, no trace kept) › HTML report › attachment "cart"
{ "subtotal": 150.00, "vatRate": 0.15, "total": 172.50 }आम गलतियाँ
- लाल test को pass होने तक re-run करना, fail हुई attempt का evidence पढ़े बिना।
- समय क्यों ख़त्म हुआ यह जाने बिना timeout बढ़ाना या fixed sleep जोड़ना।
- Requirement देखे बिना expected value को उस पर बदल देना जो app अभी दिखा रहा है।
- हर pass होने वाले test के लिए video और traces record करना, या कुछ भी record न करना और CI failures को सिर्फ़ एक message के साथ छोड़ देना।
- असली customer data, passwords या tokens वाली reports और traces share करना।
QA का नज़रिया
ज़्यादातर teams में लाल automated run पर पहली नज़र tester डालता है: हर failure को उसी दिन classify करना, product failures को trace के साथ bug reports से link करना, test की समस्याएँ ठीक करना, और environment की समस्याएँ उनके owner को सौंपना।
Evidence दें, ऐसे निष्कर्ष नहीं जिन्हें कोई जाँच न सके: fail हुआ step, expected और received values, request और response, build range और trace का link। जो evidence नहीं बता सकता वह पूछें, जैसे क्या UI बदलाव जान-बूझकर था।
अभ्यास
Nightly report के तीन fail हुए tests classify करें
नीचे के nightly run में तीन tests fail हुए हैं, हर एक के साथ उसका पहला error और यह कि screenshot व trace क्या दिखाते हैं। इस lesson के decision tree से हर एक को classify करें और तय करें कि आगे क्या करेंगे।
Nightly UI run · build 731 · chromium · staging · 212 passed, 3 failed, 0 flaky
1) login.spec.ts:18 › login › shows the dashboard after sign-in
Error: locator.click: Timeout 10000ms exceeded.
Call log: getByRole('button', { name: 'Sign in' }): visible, enabled and stable
<div class="cookie-banner"> intercepts pointer events, retrying click
Screenshot: a new cookie banner covers the lower half of the sign-in form
2) profile.spec.ts:44 › profile › saves a new phone number
Error: expect(locator).toHaveText(expected)
Expected: "Saved" Received: "Saving..." Timeout: 5000ms
Trace: PUT /api/profile → 200 after 7.8 s
Server log, last green run (build 728): the same request took 0.4 s
3) orders.spec.ts:71 › orders › lists the newest order first
Error: expect(locator).toHaveText(expected)
Expected: "ORD-1042" Received: "ORD-1039"
Screenshot: the list shows ORD-1039 in the first row, ORD-1042 in the second
Trace: GET /api/orders?sort=newest → [ORD-1039 (10:02), ORD-1042 (10:05)]- पहले error का type बताएँ: setup, action timeout या assertion।
- वह artifact बताएँ जो अगले सवाल का जवाब देता है, और वह क्या दिखाता है।
- Classify करें: test की समस्या, environment की समस्या, front-end या back-end defect, या अभी तय नहीं।
- अगला action लिखें: test में बदलाव, bug title या पूछने वाला सवाल।
मॉडल उत्तर दिखाएँ
Test 1, action timeout: button तैयार है, पर call log और screenshot उसके ऊपर एक नया cookie banner दिखाते हैं। अगर banner जान-बूझकर लाया गया है तो यह test की समस्या है: consent को shared setup में set या accept करें, और click को कभी force न करें। यह भी पूछें कि क्या छोटी screens पर users को भी यही ढका हुआ button मिलता है; अगर हाँ, तो UI defect report करें।
Test 2, assertion: Saving... दिखाता है कि page अभी इंतज़ार कर रहा था। Trace कारण बताता है: save request सफल हुई, पर देर से, 7.8 s में, जबकि build 728 में 0.4 s लगे थे और assertion timeout 5 s है। Timeout बढ़ाने से वह धीमापन छिप जाएगा जो users महसूस करते हैं। अभी तय नहीं: trace के समय से ढूँढे गए उस request के server logs बताएँगे कि staging environment overloaded था या build 731 में regression है।
Test 3, assertion: page वही दिखाता है जो उसे मिला, और trace दिखाता है कि sort=newest के लिए API ने ख़ुद ORD-1039 (10:02) को ORD-1042 (10:05) से पहले लौटाया। Back end उल्टी दिशा में sort करता है: “sort=newest वाला Orders API सबसे पुराना order पहले लौटाता है” report करें, request, response और trace के साथ।
अक्सर पूछे जाने वाले सवाल
क्या हर test के लिए traces और video record करूँ?
आम तौर पर नहीं: सब कुछ record करने से run धीमा होता है और ऐसी भारी files बनती हैं जिन्हें कोई नहीं खोलता। आम setup है CI में एक retry के साथ trace: 'on-first-retry', या retry न हो तो 'retain-on-failure' (zero retries पर on-first-retry कुछ record नहीं करता), और video व screenshots सिर्फ़ failures पर। Full recording सिर्फ़ तब चालू करें जब कोई ख़ास समस्या ढूँढ रहे हों।
Debugging tester का काम है या developer का?
दोनों का, अलग-अलग defects के लिए। ISTQB testing और debugging को अलग activities मानता है: testing failures दिखाती है; debugging उनके कारण ढूँढती, analyse करती और हटाती है। Tester automated failure को इतना analyse करता है कि defect की जगह दिख जाए, और test code को debug करता है; product code को developer debug करता है, tester के attach किए evidence से शुरू करके।
मैं Selenium या Cypress इस्तेमाल करता हूँ। क्या यह फिर भी लागू होता है?
हाँ; सिर्फ़ recording अलग है। Cypress cypress run में failure पर screenshots लेता है, video option चालू होने पर video record करता है, और cypress open के Command Log में हर command का snapshot दिखाता है। Selenium WebDriver अपने-आप कुछ record नहीं करता: runner के failure hook में screenshot लें और page source सेव करें, और हर step को timestamp के साथ log करें। पढ़ने का क्रम वही रहता है: पहला error, फिर evidence, फिर तुलना।
एक ही run में बहुत-से tests fail हों तो कहाँ से शुरू करूँ?
पहले कोई साझा कारण ढूँढें। अगर कई tests एक ही पहले error के साथ एक ही step पर fail हों, जैसे sign-in या कोई setup hook, तो कारण आम तौर पर environment या कोई shared fixture होता है, हर test अलग से नहीं। उसे एक बार ठीक या report करें और फिर re-run करें; CI/CD testing guide में pipeline-level failures के लिए triage flow है।
संदर्भ
- ISTQB Certified Tester Foundation Level (CTFL) v4.0सॉफ़्टवेयर टेस्टिंग का फ़ाउंडेशन पाठ्यक्रम: टेस्ट स्तर और प्रकार, टेस्ट डिज़ाइन तकनीकें, टेस्ट प्रबंधन और टूल।
- Certified Tester Advanced Level Test Automation Engineering (CTAL-TAE) v2.0टेस्ट ऑटोमेशन समाधान और उनकी आर्किटेक्चर के डिज़ाइन, कार्यान्वयन और रखरखाव पर ISTQB का advanced पाठ्यक्रम।
- Trace viewer — Playwrightटेस्ट रन को क़दम-दर-क़दम रिकॉर्ड और रीप्ले करना — DOM स्नैपशॉट, नेटवर्क, कंसोल — ख़ासकर CI की विफलताओं का निदान करने के लिए।
- Cypress DocumentationCypress से ब्राउज़र में एंड-टू-एंड और कंपोनेंट टेस्टिंग का आधिकारिक दस्तावेज़।
Mutqan tools से अभ्यास करें
दो JSON डॉक्यूमेंट की सिमैंटिक तुलना करें और जोड़ी गई, हटाई गई तथा बदली गई वैल्यू हाइलाइट करें।
दो टेक्स्ट की लाइन-दर-लाइन या शब्द-दर-शब्द तुलना करें और अंतर हाइलाइट करें।
XML को मनचाहे इंडेंटेशन के साथ प्रिटी-प्रिंट करें और वापस मिनिफ़ाई भी करें।
टाइमस्टैम्प (सेकंड, मिलीसेकंड, माइक्रोसेकंड) को पढ़ने योग्य तारीख़ में और वापस बदलें, किसी भी timezone में।
Mutqan AI से stack trace और एरर मैसेज समझें, संभावित मूल कारण पहचानें और डिबगिंग के अगले क़दम जानें।
और गहराई से
- CI/CD पाइपलाइन में टेस्टिंगटेस्ट रिपोर्ट और artifacts
- CI/CD पाइपलाइन में टेस्टिंगPipeline फ़ेलियर विश्लेषण: एक ट्राइएज फ़्लो
- Flaky टेस्टFlaky टेस्ट की जाँच
- बग रिपोर्ट कैसे लिखेंऐसी बग रिपोर्ट कैसे लिखें जिस पर डेवलपर काम कर सकें: अहम फ़ील्ड, कॉपी-रेडी टेम्पलेट, पूरा उदाहरण, severity बनाम priority, और बचने लायक गलतियाँ।
इस topic में आपकी प्रगति
प्रगति ट्रैक करने के लिए साइन इन करें
Topics पूर्ण चिह्नित करें, जहाँ छोड़ा था वहीं से जारी रखें और specialisation परीक्षाएँ खोलें।