اختبار API / دليل حلول تحريري
تشخيص اختبار واجهة يفشل بعد حالة أخرى فقط
تحديد الحالة المشتركة والبيانات المتداخلة وافتراضات الساعة وتسرب البدائل دون لمس خدمة تطبيق.
قاعدة معرفة للقراءة فقط · بلا تعليقات عامة
تعرّف على الأعراض
تنجح حالة ملكية أو عدد مختلقة منفردة وتفشل بعد حالة إنشاء، أو تتغير النتيجة بتغير قائمة الاختيار. قد تنجح الإعادة بلا تعديل. سجل الترتيب ومعرفات الحالات والحالة المتوقعة والفرق المرصود قبل اعتبار العرض سباقا في المنتج.
افهم الأسباب المحتملة
- تشمل الأسباب بيانات متداخلة مشتركة قابلة للتعديل، وبديلا بقي خارج نطاقه، ومعرفا معاد الاستخدام، وسياق فاعل مخزنا، وساعة محقونة لم تستعد. قد يوجد عيب حقيقي أيضا. لا يميز ترتيب الفشل هذه الأسباب وحده، لذا أبق التفسيرات الممكنة حتى تفصلها إعادة صغيرة.
حفظ الترتيب والحد الحاسم
انسخ أصغر بيانات مختلقة مناسبة إلى تخزين مؤقت وحدد ما تنشئه كل حالة وتعدله وتستبدله وتملكه. قارن الزوج الفاشل بترتيبه الأصلي وكل حالة منفردة. لا توجه الاختبار إلى قاعدة مهيأة أو حساب حقيقي لزيادة الواقعية. راجع القواميس العامة والقوائم المتداخلة وسمات الأصناف والعملاء المخزنين وقراءة البيئة والبدائل. وإذا ادعى الاختبار تغطية التوثيق بينما يحقن الفاعل مباشرة فصحح الوصف مع متابعة تشخيص العزل.
اختبار فرضية النسخ المتداخل محليا
تنشئ النسخة السطحية قاموسا خارجيا جديدا وتبقي مراجع الكائنات المتداخلة. يوضح المثال الآلية بمعرفات تدريب عامة: يثبت عرض مشاركة القائمة ثم ينشئ حالة مستقلة ويفحص الإصلاح. هذه إعادة مضبوطة لتسرب البيانات وليست إثباتا لعيب التطبيق نفسه. إذا كانت البيانات الفعلية ثابتة أو جديدة فارفض الفرضية وافحص عمر البديل والسياق المخزن بدلا من إجبار العرض على تفسير مألوف.
from copy import deepcopy
base = {"entries": ["book-1"]}
shallow = dict(base)
shallow["entries"].append("book-2")
assert base["entries"] == ["book-1", "book-2"]
first = deepcopy({"entries": ["book-1"]})
second = deepcopy({"entries": ["book-1"]})
first["entries"].append("book-2")
assert second["entries"] == ["book-1"]
print("shared-list cause reproduced; independent fixture checked")
shared-list cause reproduced; independent fixture checked
يوضح البرنامج الكامل المشاركة المقصودة في النسخ السطحي ثم يفحص بيانات متداخلة مستقلة. يستخدم الذاكرة والمكتبة القياسية فقط ولا يشغل اختبار المشروع أو تنظيفا خارجيا أو معاملة أو خدمة.
إصلاح الملكية بدلا من إضافة تأخير
أنشئ حالة جديدة بالنطاق المناسب واستعد البدائل بآلية تنظيف الإطار المعتمدة واحقن ساعات ومعرفات حتمية. إذا كان المورد مشتركا عمدا فحدد مالكه وإعادة ضبطه. تجنب تنظيفا يحذف موارد حالات أخرى، ولا تجعل النوم أو تثبيت الترتيب إصلاحا نهائيا. افحص ألا يخفي التصحيح فرع صلاحية أو تحقق مفقودا. أبق الإعادة صغيرة بحيث يفسر المراجع سبب تسرب الترتيب الأصلي بدقة.
تحقق من نجاح الإصلاح
أعد الترتيب الفاشل والعكسي وكل حالة منفردة بالبيانات المحلية المملوكة فقط. قارن الحالة المحمية بعد كل حالة وتأكد من تنظيف البدائل. سجل النتائج الفعلية ولا تفترض كفاية الإنشاء المستقل. إذا بقي حد خارجي غير مختبر فاذكر القيد بدلا من ادعاء حتمية الواجهة كلها.
امنع تكرار المشكلة
- وضح ملكية البيانات وامنع المتغيرات العامة القابلة للتعديل عرضيا وراجع البنى المتداخلة وعمر البدائل واحتفظ بأصغر حالة انحدار تعتمد على الترتيب. سجل بذور العشوائية ومدخلاتها الفعلية. تدعم الإعادة الناجحة الدليل عندما يفهم السبب وحد الإصلاح فقط.