الاختبار من البداية إلى النهاية
الاختبار من البداية إلى النهاية (End-to-End Testing)، ويُختصر E2E ويُسمّى أيضاً الاختبار من طرف إلى طرف، يتحقق من رحلة مستخدم كاملة، من خطوتها الأولى إلى نتيجتها النهائية، عبر كل نظام تمرّ به: واجهة المستخدم، والخدمات الخلفية وقاعدة البيانات، والأنظمة الخارجية مثل مزوّد الدفع أو خدمة البريد الإلكتروني. ويصفه مسرد ISTQB بأنه اختبار لعمليات الأعمال من بدايتها إلى نهايتها في ظروف قريبة من بيئة الإنتاج.
مثال: في متجر إلكتروني، يسجّل اختبار E2E واحد الدخول بصفته عميلاً، ويشتري منتجين ببطاقة اختبار في بيئة الاختبار المعزولة (Sandbox) لدى مزوّد الدفع، ثم يتأكد من أن الطلب حُفظ مدفوعاً، وأن رسالة التأكيد وصلت بالبريد، وأن المستودع استلم الطلب، وأن العميل يراه في النهاية مشحوناً. ربما نجح كل نظام في اختباراته الخاصة؛ أما اختبار E2E فيسأل: هل تعمل هذه الأنظمة معاً لصالح المستخدم؟
لماذا يهم
كثير من الإخفاقات الخطيرة يقع بين الأنظمة لا داخلها: يُدفع الطلب، لكن المستودع لا يُبلَّغ به أبداً. قد ينجح كل مكوّن وكل واجهة برمجية (API) في اختباراته، ومع ذلك لا يستطيع العميل إتمام الشراء. ولا يرى ما يراه المستخدم إلا اختبار يتتبع الرحلة كلها.
من منظور الأعمال، الرحلات الحرجة مثل التسجيل وإتمام الشراء والدفع هي المواضع التي تكلّف فيها الإخفاقات الإيرادات والثقة مباشرةً. ومن منظور المختبِر، تقدّم اختبارات E2E أقوى دليل على أن الإصدار قابل للاستخدام، وهي في الوقت نفسه أغلى الاختبارات بناءً وصيانةً وتشغيلاً. لذا فإن تحديد ما يستحق اختبار E2E مهارة أساسية.
ما الذي يغطيه اختبار E2E
يُعرَّف اختبار E2E برحلة، لا بشاشة ولا بمكوّن. يبدأ من حيث يبدأ المستخدم، وينتهي حيث يتحقق هدفه ويصبح ظاهراً: الطلب شُحن، والمال وصل إلى الحساب الآخر. وقيمته الحقيقية في نقاط التحقق عند الانتقالات (Hand-offs)، أي حيث تنتقل الرحلة من نظام إلى آخر.
- البداية والنهاية: فاعل واحد، وهدف واحد، ونتيجة نهائية يمكن التحقق منها.
- الأنظمة: الواجهة الأمامية، والخدمات الخلفية، وقاعدة البيانات، وطوابير الرسائل، وخدمات الأطراف الثالثة، على أن تكون أنظمتك أنت بالإصدارات التي تنوي إطلاقها.
- نقاط التحقق: الحالة بعد كل انتقال، مثل حالة الطلب أو مرجع الدفع أو رسالة البريد التي أُرسلت.
الفرق بين اختبار E2E واختبار النظام
في منهج ISTQB للمستوى التأسيسي، اختبار النظام (System Testing) مستوى اختبار يركّز على السلوك العام لنظام كامل وقدراته، وكثيراً ما يشمل الاختبار الوظيفي لمهام من البداية إلى النهاية داخل هذا النظام. ويمكن محاكاة الأجزاء التي يعتمد عليها، أما الواجهات مع الأنظمة الأخرى والخدمات الخارجية فهي محور مستوى مستقل هو اختبار تكامل الأنظمة (System Integration Testing). ويصف مسرد ISTQB الاختبار من البداية إلى النهاية بأنه نوع اختبار لا مستوى اختبار: تحدّد نطاقَه عمليةُ أعمالٍ تعبر كل الأنظمة المعنية، ومنها أنظمة لا يملكها فريقك.
يتداخل الاثنان، وكثيراً ما تُنفَّذ اختبارات E2E أثناء اختبار النظام أو اختبار تكامل الأنظمة أو اختبار القبول. وبعض الفرق تسمّي أي اختبار آلي يعمل عبر المتصفح «E2E»، حتى لو غطّى صفحة واحدة مع محاكاة الواجهة الخلفية (Back End)؛ فإذا سمعت المصطلح، فاسأل: ما الذي كان حقيقياً وما الذي جرت محاكاته؟
- النطاق: نظام واحد كامل، مقابل رحلة أعمال واحدة أينما ذهبت.
- الأنظمة المجاورة: يمكن أن تُحاكى في اختبار النظام؛ وفي اختبار E2E تكون حقيقية، أو أقرب بديل متاح مثل بيئة Sandbox لدى المزوّد.
- العيوب المعتادة: سلوك خاطئ داخل النظام، مقابل انتقالات معطّلة وصيغ بيانات غير متطابقة وخطوات مفقودة بين الأنظمة.
مثال تطبيقي: طلب إلكتروني من السلة إلى الشحن
يتكوّن متجر إلكتروني من متجر ويب (واجهة أمامية وخدمة طلبات) يبنيه فريقك، ومزوّد دفع في وضع الاختبار، ونظام مستودع يديره فريق آخر، وخدمة بريد إلكتروني. الرحلة: عميل مسجَّل يشتري منتجين ثم يُشحن الطلب. ورقم الطلب الواحد هو ما يربط كل عمليات التحقق.
- العميل المتصفح
- متجر الويب الواجهة وخدمة الطلبات
- مزوّد الدفع وضع الاختبار (Sandbox)
- نظام المستودع لدى فريق آخر
- 1 من العميل إلى متجر الويب: سجّل الدخول وأضف 2 × A و1 × B إلى السلة التحقق 1: المجموع الفرعي 190.00 ريال
- 2 من العميل إلى متجر الويب: أكمل الشراء وادفع ببطاقة اختبار المزوّد
- 3 من متجر الويب إلى مزوّد الدفع: طلب تفويض الدفع
190.00 SAR - 4 من مزوّد الدفع إلى متجر الويب: مقبول + مرجع الدفع ردّ
- 5 من متجر الويب إلى العميل: صفحة التأكيد ردّ التحقق 2: يظهر رقم الطلب
- 6 متجر الويب داخليًا: حفظ الطلب بالحالة PAID وخفض المخزون التحقق 3: مرجع الدفع محفوظ؛ مخزون A 8 وB 2
- 7 من متجر الويب إلى العميل: رسالة التأكيد بالبريد ردّ التحقق 4: رقم الطلب نفسه في صندوق بريد الاختبار
- 8 من متجر الويب إلى نظام المستودع: إرسال الطلب للتجهيز التحقق 5: لدى المستودع الأصناف الثلاثة نفسها
- 9 من نظام المستودع إلى متجر الويب: تم الشحن + رقم التتبع ردّ الخطوة 6: يُعلَّم الطلب مشحوناً في نظام المستودع
- 10 من متجر الويب إلى العميل: صفحة الطلب تعرض «تم الشحن» ردّ التحقق 6: الحالة ورقم التتبع ظاهران
النتيجة: كل نقطة تحقق تقرأ الحالة بعد انتقال، لذا تشير أول نقطة تحقق فاشلة إلى النظام أو الاتصال الذي انقطعت عنده الرحلة.
- عمليات التحقق من 3 إلى 6 في حالة الاختبار أدناه هي ما يجعلها اختبار E2E: كلٌّ منها يقرأ الحالة على الجانب الآخر من انتقال (من الدفع إلى خدمة الطلبات، ومن خدمة الطلبات إلى البريد، ومن خدمة الطلبات إلى المستودع، ومن المستودع عائداً إلى متجر الويب). ولو اقتصر الاختبار على التحققين 1 و2 لما أظهر إلا ما تعرضه شاشة العميل.
- إذا فشل التحقق 5 ونجح التحقق 3، فاشتبه في الانتقال من خدمة الطلبات إلى المستودع، وسجّل الملاحظتين كلتيهما في تقرير الخطأ.
E2E-01 عميل مسجَّل يشتري منتجين ويُشحن الطلب
الشروط المسبقة:
- العميل e2e.0412@example.com موجود وحسابه مُفعَّل
- المنتج A (75.00 ريال، المخزون 10) والمنتج B (40.00 ريال، المخزون 3)
موجودان في متجر الويب وفي نظام المستودع
- مزوّد الدفع في وضع الاختبار
- رسائل البريد الصادرة من بيئة الاختبار تصل إلى صندوق بريد الاختبار
الخطوات والتحقق:
1. سجّل الدخول، وأضف 2 x A و1 x B إلى السلة.
تحقّق: المجموع الفرعي 190.00 ريال.
2. أكمل الشراء وادفع ببطاقة الاختبار التي ينشرها المزوّد للدفع المقبول.
تحقّق: صفحة التأكيد تعرض رقم الطلب.
3. تحقّق: خدمة الطلبات تحفظ الطلب بالحالة PAID مع مرجع الدفع؛
مخزون A أصبح 8 ومخزون B أصبح 2.
4. تحقّق: رسالة التأكيد برقم الطلب نفسه موجودة في صندوق بريد الاختبار.
5. تحقّق: نظام المستودع استلم الطلب بالأصناف الثلاثة نفسها.
6. في نظام المستودع، علّم الطلب بأنه شُحن.
تحقّق: صفحة الطلب لدى العميل تعرض «تم الشحن» ورقم تتبع.لماذا تبقى اختبارات E2E قليلة
تقع اختبارات E2E في قمة هرم الاختبار (Test Pyramid)، وهو نموذج يصفه منهج ISTQB ومقال «The Practical Test Pyramid» على موقع martinfowler.com. ويصوّر الهرم مجموعة اختبارات سليمة: اختبارات كثيرة صغيرة وسريعة ومعزولة في القاعدة (اختبارات المكوّنات)، واختبارات تكامل أقل في الوسط، وعدد قليل فقط من اختبارات E2E في القمة؛ وتختلف النماذج في عدد الطبقات وأسمائها. وكلما ارتفع الاختبار في الهرم غطّى أكثر في التشغيل الواحد، وصار أبطأ وأقل عزلاً وأعلى كلفة في الصيانة. وعندما يفشل اختبار E2E، قد يكون السبب في أي نظام مرّ به.
لذلك اختبر كل قاعدة في أدنى مستوى يمكن اختبارها فيه، واحتفظ بمجموعة صغيرة من اختبارات E2E للرحلات الأهم للأعمال.
- اختر حسب المخاطر: تستحق الرحلة اختبار E2E عندما يمنع إخفاقها المستخدمين من بلوغ هدف مهم أو يكلّف مالاً.
- غطِّ المسار الرئيسي وبعض البدائل المهمة فقط، مثل رفض الدفع.
- إذا كشف اختبار E2E عيباً لم يكشفه أي اختبار في مستوى أدنى، فأضف له اختباراً أسرع في مستوى أدنى، مثل اختبار مكوّن أو اختبار API، بدلاً من إضافة مزيد من اختبارات E2E.
تحديات بيانات الاختبار وبيئة الاختبار
يذهب جزء كبير من جهد اختبار E2E إلى البيانات والبيئات. فالبيانات يجب أن تكون متسقة في عدة أنظمة في آن واحد، وكل تشغيل يغيّرها: ينقص المخزون وتتراكم الطلبات. والبيئة يجب أن تضم كل الأنظمة بإصدارات متوافقة؛ والبيئات المشتركة كثيراً ما تكون مزدحمة أو متأخرة بإصدار، وبيئات Sandbox لدى الأطراف الثالثة قد تكون بطيئة أو غير متاحة.
- أنشئ البيانات التي يحتاجها كل اختبار بقيم فريدة في كل تشغيل، مثل بريد إلكتروني جديد للعميل، بدلاً من إعادة استخدام سجلات يغيّرها غيرك.
- في المدفوعات، استخدم بيئة Sandbox لدى المزوّد وبطاقات الاختبار التي ينشرها؛ ولا تستخدم أبداً بطاقات حقيقية أو بيانات عملاء حقيقية.
- انتظر تحقّق شرط، مثل وصول رسالة البريد، مع حدّ زمني أقصى؛ ولا تنتظر أبداً عدداً ثابتاً من الثواني.
- قبل الإبلاغ عن إخفاق، تأكد من سلامة البيئة: تعطّل بيئة Sandbox ليس عيباً في المنتج.
أخطاء شائعة
- وضع كل عمليات التحقق في اختبارات E2E: التحقق من الحقول وقواعد الأسعار ورسائل الخطأ أرخص وأكثر موثوقية في المستويات الأدنى.
- تسمية اختبار «من البداية إلى النهاية» مع أن الواجهة الخلفية أو تكاملاً أساسياً تجري محاكاته، دون ذكر ذلك في تقرير الاختبار.
- التحقق من الشاشة الأخيرة فقط: يرى العميل «تم تأكيد الطلب» بينما لم يستلم المستودع الطلب أبداً.
- الاعتماد على بيانات مشتركة موجودة مسبقاً يغيّرها آخرون أو تشغيلات سابقة.
- استخدام انتظار ثابت لرسائل البريد والرسائل بين الأنظمة: الانتظار الطويل يبطئ الاختبار، والقصير يجعله متذبذباً (Flaky).
من منظور ضمان الجودة
في الفريق الحقيقي، يحتفظ المختبِر عادةً بقائمة الرحلات الحرجة، مع الأنظمة والفرق التي تعبرها كل رحلة. اتفق عليها مع مالك المنتج الذي يعرف ما يهم الأعمال، ومع الفرق التي تتحكم في البيئات وبيئات Sandbox وحسابات الاختبار. وكثيراً ما تُنفَّذ الرحلات يدوياً أولاً أثناء اختبار النظام أو اختبار القبول، ثم تُؤتمت الرحلات المستقرة عالية القيمة في خط التكامل والنشر (Pipeline).
في كل تشغيل، سجّل الأنظمة وإصداراتها، وما كان حقيقياً وما جرت محاكاته، وبيانات الاختبار، ونقطة التحقق التي وقع عندها الإخفاق. فمقارنة الأدلة عند كل نقطة تحقق تحوّل عبارة مبهمة مثل «إتمام الشراء معطّل» إلى عيب يستطيع الفريق الصحيح إصلاحه.
تمرين عملي
صمّم اختبار E2E لرحلة حجز موعد في عيادة
يتيح تطبيق عيادة للمريض حجز موعد. تعبر الرحلة تطبيق الجوال وخدمة الحجز (لدى فريقك)، ونظام جدولة الأطباء (لدى فريق آخر)، ومزوّد دفع في وضع الاختبار لرسوم قدرها 50.00 ريالاً، ومزوّد رسائل SMS يرسل التأكيد.
اكتب حالة اختبار E2E واحدة للرحلة الرئيسية مع نقطة تحقق عند كل انتقال، واذكر بيانات الاختبار والبيئة التي تحتاجها، وسمِّ عمليتَي تحقق لا تنتميان إلى هذا الاختبار.
- اكتب الرحلة في جملة واحدة: الفاعل والهدف والنتيجة النهائية.
- اذكر الأنظمة والانتقالات بينها.
- اكتب الخطوات مع نقطة تحقق بعد كل انتقال.
- اذكر احتياجات البيانات والبيئة، والأسباب غير المتعلقة بالمنتج التي قد تُفشل الاختبار.
إظهار الإجابة النموذجية
الرحلة: مريض مسجَّل يحجز موعداً شاغراً مع طبيب يختاره، ويدفع رسوماً قدرها 50.00 ريالاً، ويستلم رسالة SMS للتأكيد؛ وبعدها لا يُعرض الموعد على غيره.
الخطوات: 1) سجّل الدخول واختر الطبيب وموعداً شاغراً. 2) ادفع ببطاقة اختبار المزوّد، وتحقق من أن خدمة الحجز تحفظ الحجز بالحالة CONFIRMED مع مرجع الدفع. 3) تحقق من أن نظام الجدولة يُظهر الموعد محجوزاً لهذا المريض. 4) تحقق من أن سجل الاختبار لدى مزوّد SMS يُظهر رسالة التأكيد برقم الحجز نفسه. 5) بصفتك مريض اختبار ثانياً، تحقق من أن الموعد لا يُعرض.
البيانات والبيئة: مريض اختبار جديد برقم هاتف فريد في كل تشغيل، وطبيب له مواعيد شاغرة تُنشأ للاختبار، ووصول متفق عليه إلى نظام الجدولة وسجل اختبار SMS. أسباب قد تُفشل الاختبار ولا تتعلق بالمنتج: عدم بقاء مواعيد شاغرة بسبب تشغيلات سابقة، ورسالة SMS أبطأ من حدّ الانتظار، وتعطّل بيئة Sandbox.
ليس في هذا الاختبار: التحقق من صيغة رقم الهاتف (على مستوى المكوّن أو API)، وقاعدة استرداد الرسوم عند الإلغاء (اختبار نظام لخدمة الحجز مع محاكاة مزوّد الدفع).
أسئلة شائعة
هل الاختبار من البداية إلى النهاية هو نفسه أتمتة اختبار واجهة المستخدم؟
لا. يصف E2E نطاق الاختبار: رحلة كاملة عبر الأنظمة. وتصف أتمتة واجهة المستخدم أسلوباً: تشغيل واجهة المستخدم بأداة. كثير من اختبارات E2E الآلية تعمل عبر واجهة المستخدم، لكن اختبار E2E يمكن أن يُنفَّذ يدوياً أيضاً، وكثير من اختبارات واجهة المستخدم ليست E2E لأنها تغطي صفحة واحدة مع محاكاة الواجهة الخلفية.
هل تُشغَّل اختبارات E2E في بيئة الإنتاج؟
تُشغَّل عادةً في بيئة اختبار قريبة من الإنتاج، لأنها تنشئ طلبات ومدفوعات ورسائل. وبعض الفرق تشغّل في الإنتاج عدداً قليلاً من الرحلات المصممة بعناية، والمعلَّمة بوضوح بأنها اصطناعية، لمراقبة النظام بعد النشر. وهذا يحتاج إلى موافقة صريحة من مالك المنتج وفريق التشغيل، ولا يستخدم أبداً بيانات عملاء حقيقية أو مدفوعات حقيقية.
كم اختبار E2E يحتاج المنتج؟
لا يوجد رقم صحيح. ابدأ من قائمة الرحلات الحرجة، وغطِّ كل رحلة باختبار للمسار الرئيسي وأهم البدائل فقط. وإذا كانت مجموعة اختبارات E2E بطيئة أو تفشل كثيراً لأسباب تتعلق بالبيئة، فانقل عمليات التحقق إلى مستويات أدنى بدلاً من إضافة مزيد من اختبارات E2E.
المراجع
- ISTQB Certified Tester Foundation Level (CTFL) v4.0المنهج التأسيسي لاختبار البرمجيات: مستويات الاختبار وأنواعه وتقنيات تصميم الاختبارات وإدارة الاختبار والأدوات.
- ISTQB Glossaryالتعريفات القياسية لمصطلحات الاختبار — حالة الاختبار واختبار الانحدار والخطورة والأولوية وتحليل القيم الحدّية وغيرها.
- The Practical Test Pyramid (Ham Vocke)شرح واسع الاستشهاد لكيفية الموازنة بين اختبارات الوحدة والتكامل والعقود والواجهة في محفظة الاختبارات الآلية.
- Eradicating Non-Determinism in Tests (Martin Fowler)لماذا تُفقد الاختبارات المتذبذبة الحزمةَ قيمتها، وأسبابها الشائعة (العزل وعدم التزامن والخدمات البعيدة والوقت وتسرّب الموارد)، والحجر كاستجابة.
تدرّب بأدوات متقن
اشتق سيناريوهات اختبار شاملة (end-to-end) من قصة مستخدم، بما فيها التدفقات البديلة والاستثنائية.
قيّم الميزات حسب الاحتمالية والأثر، ثم ولّد خطة اختبار مبنية على المخاطر ومرتّبة حسب الأولوية.
مصنع متكامل لبيانات الاختبار الاصطناعية: مستخدمون وعملاء وشركات وعناوين وأرقام وتواريخ وسلاسل نصية بصيغة JSON أو CSV أو SQL أو XML.
أنشئ عنوان بريد مؤقتاً واقرأ الرسائل الواردة في الصفحة نفسها. يُحرَّر العنوان تلقائياً عند التوقف عن استخدامه.
للتعمّق أكثر
- ضمان جودة المنتج من البداية إلى النهايةبيانات الاختبار والبيئات
- الاختبار اليدوي مقابل الاختبار الآليتقرير ما يُؤتمت: الهرم وقاعدة بسيطة
- الاختبار في خطوط CI/CDمراحل الاختبار في خط الأنابيب ولماذا يهم ترتيبها
- الاختبارات المتذبذبةما الذي يجعل اختبارات الواجهة متذبذبة — التوقيت والحالة المشتركة والبيانات والبيئة والأطراف الثالثة — وكيف تُشخَّص، وسياسة معقولة لإعادة المحاولة والحجر.
تقدّمك في هذا الموضوع
سجّل الدخول لتتابع تقدّمك
علّم الموضوعات مكتملة، وتابع من حيث توقفت، وافتح امتحانات التخصص.