كيف تكتب حالات الاختبار (Test Cases)

حالة الاختبار تعليمة دقيقة قابلة للتكرار: مع هذه الشروط المسبقة، نفّذ هذه الخطوات بهذه البيانات، وتوقّع هذه النتيجة. وعندما تُكتب جيداً تتيح لأي مختبِر — أو سكربت أتمتة — التحقق من سلوك واحد بالطريقة نفسها في كل مرة، وتخبر المطوّر بالضبط كيف يعيد إنتاج الفشل. أما عندما تُكتب بشكل سيئ فهي جملة غامضة تنجح يوم الاثنين وتفشل يوم الثلاثاء لأسباب لا يستطيع أحد تسميتها.

يمنحك هذا الدليل بنية حالة الاختبار الجيدة، ونموذجاً يمكنك لصقه في Jira أو TestRail أو جدول بيانات، ومثالاً عملياً، وتقنيات التصميم التي تحوّل المتطلب إلى مجموعة صغيرة من الحالات ذات تغطية حقيقية.

الحقول التي تحتاجها كل حالة اختبار

  • المعرّف — معرّف ثابت (TC-LOGIN-004) حتى يمكن الإشارة إلى الحالة من تقارير الأخطاء والتقارير.
  • العنوان — سطر واحد يسمّي السلوك لا الميزة: «تسجيل الدخول يرفض كلمة المرور الخاطئة برسالة واضحة»، لا «اختبار تسجيل الدخول».
  • الشروط المسبقة — الحالة التي يجب أن يكون عليها النظام قبل الخطوة 1: مستخدم موجود وموثّق، أو سلة فارغة، أو دور محدد.
  • بيانات الاختبار — القيم الدقيقة المستخدمة، أو إشارة إلى مجموعة بيانات مولّدة. «بريد إلكتروني صالح» ليس بيانات اختبار؛ أما «layla.h@example.com» فهو كذلك.
  • الخطوات — مرقّمة، إجراء واحد في كل خطوة، مكتوبة بحيث يستطيع موظف جديد اتباعها.
  • النتيجة المتوقعة — ما يجب ملاحظته بعد الخطوة الأخيرة، بتحديد يكفي للتحقق: رمز الحالة، ونص الرسالة، وحالة السجل.
  • الأولوية والنوع — دخاني، انحدار، سلبي، حدّي — حتى يمكن تصفية الحزم.
  • التتبّع — المتطلب أو قصة المستخدم أو معيار القبول الذي تغطيه الحالة.

جرّبها: مولّد حالات الاختبار

نموذج حالة اختبار

ID:             TC-LOGIN-004
Title:          Login rejects a wrong password with a clear message
Priority:       High        Type: Negative
Requirement:    US-12 (User can sign in with email and password)
Preconditions:  A verified account exists for layla.h@example.com
Test data:      email = layla.h@example.com, password = WrongPass!9

Steps:
  1. Open /login
  2. Enter the email and the wrong password
  3. Click "Sign in"

Expected result:
  - The page stays on /login
  - The message "Email or password is incorrect" is shown
  - No session cookie is set; the failed attempt is counted

Postconditions:  Account is not locked (attempt 1 of 5)

جرّبها: مولّد حالات الاختبار جرّبها: قصة المستخدم ← حالات اختبار

الفرق بين سيناريو الاختبار وحالة الاختبار

سيناريو الاختبار عبارة من سطر واحد عمّا يجب اختباره — «التحقق من تسجيل الدخول ببيانات صالحة وغير صالحة». أما حالة الاختبار فهي السكربت التفصيلي الذي يختبر مساراً واحداً من ذلك السيناريو. يتوسع السيناريو الواحد عادةً إلى عدة حالات: تسجيل دخول صالح، وكلمة مرور خاطئة، وبريد غير معروف، وحساب مقفل، وحقول فارغة. ابدأ بالسيناريوهات للاتفاق على النطاق، ثم اكتب الحالات للمسارات المهمة.

جرّبها: مولّد سيناريوهات الاختبار

تقنيات تصميم تكتشف الأخطاء الحقيقية

  • تقسيم التكافؤ — اجمع المدخلات التي يجب أن يعاملها النظام بالطريقة نفسها (الأعمار 18–65) واختبر قيمة واحدة من كل مجموعة بدلاً من كل قيمة.
  • تحليل القيم الحدّية — تعيش معظم العيوب عند الحواف. لحقل يقبل 1–100، اختبر 0 و1 و2 و99 و100 و101.
  • جداول القرار — عندما تتحد عدة شروط (عضو؟ قسيمة؟ أكثر من 50 ريالاً؟)، يضمن جدول بكل التوليفات عدم نسيان أي قاعدة.
  • اختبار انتقال الحالات — لأي شيء له دورة حياة (طلب: أُنشئ ← دُفع ← شُحن ← استُرد)، اختبر كل انتقال مسموح والانتقالات الممنوعة.
  • الاختبار السلبي — أنواع خاطئة، وحقول ناقصة، وأحرف خاصة، ومدخلات طويلة جداً، وإجراءات متزامنة، وجلسات منتهية.
  • الاختبار الزوجي — عندما تكثر توليفات المعاملات، غطِّ كل زوج من القيم بجزء صغير من الحالات.

جرّبها: مولّد القيم الحدّية جرّبها: مولّد أقسام التكافؤ جرّبها: مولّد جداول القرار جرّبها: مولّد الاختبارات السلبية

من قصة المستخدم إلى حالات الاختبار

ابدأ من معايير القبول. كل عبارة Given/When/Then هي حالة إيجابية واحدة على الأقل؛ وكل «يجب ألا» أو «يجب» تخفي حالة سلبية. ثم أضف حدود كل حقل تذكره القصة، وحالة لكل دور مستخدم يلامس الميزة، وحالة لما يحدث عند فشل تبعية (مزوّد الدفع أو خدمة البريد). تنتج القصة ذات معايير القبول الثلاثة عادةً ما بين ثماني وخمس عشرة حالة.

جرّبها: قصة المستخدم ← حالات اختبار جرّبها: مولّد معايير القبول جرّبها: مولّد حالات الاختبار بالذكاء الاصطناعي

الأخطاء الشائعة

  • اختبار عدة أشياء في حالة واحدة — عندما تفشل لا يعرف أحد أي جزء تعطّل.
  • نتائج متوقعة غامضة («يعمل بشكل صحيح»، «تظهر رسالة خطأ») لا يمكن الحكم عليها بالنجاح أو الفشل.
  • خطوات تعتمد على تنفيذ حالة أخرى أولاً، فلا يمكن تشغيل الحزمة بأي ترتيب.
  • بيانات اختبار من بيانات عملاء حقيقيين — استخدم بيانات مولّدة واقعية لكنها اصطناعية.
  • كتابة المسار السعيد فقط. معظم حوادث الإنتاج حالات سلبية أو حدّية.
  • عدم التشذيب أبداً: الحالات الخاصة بميزات محذوفة والحالات المكررة تجعل دورات الانحدار بطيئة وغير موثوقة.

جرّبها: مصنع بيانات الاختبار جرّبها: كاشف حالات الاختبار المكرّرة بالذكاء الاصطناعي

الأسئلة الشائعة

ما الفرق بين حالة الاختبار وسيناريو الاختبار؟

السيناريو يصف ما يجب اختباره في سطر واحد؛ وحالة الاختبار هي السكربت خطوة بخطوة لمسار واحد عبر ذلك السيناريو، مع البيانات والنتيجة المتوقعة.

كم حالة اختبار يجب أن تكون للميزة الواحدة؟

ما يكفي لتغطية كل معيار قبول، وكل حد لكل مدخل، وكل دور، وأنماط الفشل الرئيسية — عادةً 8–15 لقصة مستخدم نموذجية. تغطية السلوكيات أهم من العدد.

هل يجب أن تتضمن حالات الاختبار بيانات اختبار؟

نعم، أو إشارة إلى مجموعة بيانات مولّدة. بدون قيم دقيقة لا تكون الحالة قابلة للتكرار ويصعب إعادة إنتاج الفشل.

ما الصيغة التي تتوقعها Jira وTestRail وXray؟

جميعها تستورد CSV بأعمدة للعنوان والشروط المسبقة والخطوات والنتيجة المتوقعة والأولوية. اجعل كل خطوة في صف عندما تدعم الأداة جداول الخطوات.

هل يستطيع الذكاء الاصطناعي كتابة حالات الاختبار؟

يستطيع الذكاء الاصطناعي صياغة مجموعة أولى قوية من قصة مستخدم أو متطلب، بما فيها الحالات السلبية والحدّية التي يتجاوزها المراجعون كثيراً. وينبغي للمختبِر مراجعة كل حالة في سياق العمل وحذف ما لا ينطبق.

كيف أكتب حالات اختبار لواجهة API؟

تنطبق البنية نفسها: الخطوات طلبات، وبيانات الاختبار هي الحمولة والترويسات، والنتيجة المتوقعة هي رمز الحالة وجسم الاستجابة وأي تغيّر في الحالة. راجع دليل اختبار API للطريقة الكاملة.

الأدوات المذكورة في هذا الدليل

ولّد حالات اختبار منظّمة (المعرّف والعنوان والشروط المسبقة والخطوات والنتيجة المتوقّعة والأولوية) من وصف الميزة وقائمة الحقول.

تصميم الاختبارات فتح الأداة

حوّل قصة مستخدم إلى حالات اختبار احترافية ومنظّمة (المعرّف والعنوان والنوع والأولوية والشروط المسبقة والبيانات والخطوات والنتيجة المتوقّعة) باستخدام الذكاء الاصطناعي من متقن.

توليد الاختبارات ذكاء اصطناعي جديد فتح الأداة

مصنع متكامل لبيانات الاختبار الاصطناعية: مستخدمون وعملاء وشركات وعناوين وأرقام وتواريخ وسلاسل نصية بصيغة JSON أو CSV أو SQL أو XML.

بيانات الاختبار جديد فتح الأداة

أدلة أخرى

أدلة أخرى →
JSON والبيانات

ما هو JSON؟

شرح JSON بلغة مبسّطة: ما هو، وأنواع القيم الست، وقواعد الصياغة التي يخطئ فيها الكثيرون، وكيفية تنسيقه والتحقق منه، ومقارنته بـ XML وYAML.

وقت القراءة 4 دقائق
اختبار واجهات API

ما هو اختبار API؟ وكيف تختبر REST API

شرح اختبار API: ما هو، وما الذي تفحصه في كل طلب واستجابة، وطريقة خطوة بخطوة لاختبار REST API، والأخطاء الشائعة، وأدوات مجانية من متصفحك.

وقت القراءة 5 دقائق
الأمان

ما هو JWT؟ شرح رموز JSON Web Token

شرح مبسّط لـ JWT: الأجزاء الثلاثة للرمز، والمطالبات مثل exp وsub، وكيفية فك ترميزه والتحقق منه، ولماذا فك الترميز ليس تحققاً، وقواعد الأمان.

وقت القراءة 4 دقائق
الترميز

ما هو Base64؟ شرح الترميز

شرح Base64: ما هو وما ليس هو، وكيف يعمل الترميز، ولماذا يكبر الناتج بالثلث، والفرق بين Base64 وBase64URL، وحشو =، وكيفية الترميز وفك الترميز.

وقت القراءة 4 دقائق
أدوات مساعدة

ما هو UUID؟ الفرق بين v4 وv7 وبين UUID وGUID وULID

شرح UUID: صيغة الـ 128 بت، والفرق بين v4 وv7، ولماذا v7 أفضل لمفاتيح قواعد البيانات، ومقارنة UUID بـ GUID وULID، واحتمال التصادم، والتوليد والتحقق.

وقت القراءة 4 دقائق
الويب

شرح رموز حالة HTTP

شرح كل فئة من رموز حالة HTTP مع الرموز التي تقابلها فعلاً — 200 و301 و400 و401 و403 و404 و422 و429 و500 و502 و503 و504 — وسبب كل منها وأيها تعيده.

وقت القراءة 4 دقائق