صمم ونفذ استراتيجية اختبار
مشروع قاعدة بيانات SQL الذي ينجح لا يعني أن الإجراءات المخزنة بداخله تعطي النتائج الصحيحة. يمكن للإجراء أن يترجم بدون أخطاء ويحسب الإجماليات الخاطئة أو يتخطى فحص التحقق. الاختبار يكتشف هذه المشاكل قبل أن تصل إلى مرحلة الإنتاج.
فهم مستويات اختبار قواعد البيانات
يعمل اختبار قاعدة البيانات على طبقات، حيث يلتقط كل منها فئة مختلفة من المشكلات:
-
التحقق من البناء هو الخطوة التي
dotnet buildلديك بالفعل. يكتشف أخطاء النحوية والمراجع الكائنية المعطلة. سريع، لكنه يثبت فقط صحة المخطط من الناحية الهيكلية. - تتحقق اختبارات الوحدة من أن الإجراءات والدوال المخزنة الفردية تنتج النتائج الصحيحة لمجموعة معينة من المدخلات. هم يلتقدون أخطاء المنطق.
- تمارس اختبارات التكامل سيناريوهات شاملة ضد قاعدة بيانات منتشرة. تثبت أن الكائنات تعمل معا بشكل صحيح، لكنها تتطلب نسخة تعمل وتستغرق أكبر وقت ممكن.
كل طبقة أبطأ وأغلى من التي قبلها، لكنها أيضا تلتقط مشاكل لا تستطيع الطبقة السابقة اكتشافها.
إنشاء اختبارات وحدة SQL Server
تتضمن أدوات بيانات SQL Server (SSDT) في Visual Studio إطار عمل مدمج لاختبارات وحدات قواعد البيانات. كل اختبار ينفذ T-SQL ضد قاعدة بيانات حية ويتحقق من النتائج باستخدام شروط الاختبار.
هيكل اختبار الوحدة
كل اختبار يحتوي على ثلاثة أقسام تتبع نمط الإعداد-التنفيذ-التنظيف:
- الاختبار المسبق: قم بإعداد البيانات التي يحتاجها الاختبار. أدرج سجلات العملاء، وامسح البيانات المتبقية من المحاولات السابقة.
- اختبر: نفذ العملية التي تختبرها. استدعي الإجراء المخزن واستعلام العرض.
- ما بعد الاختبار: نظف بعد الاختبار حتى لا يلوث الاختبار التالي.
شروط الاختبار
بعد تشغيل اختبار T-SQL، تقوم شروط الاختبار بالتحقق مما ظهر. أكثر الحالات استخداما هي:
- عدد الصفوف: يتحقق من أن مجموعة النتائج تحتوي على العدد المتوقع من الصفوف.
- القيمة العددية: تتحقق من أن خلية معينة في مجموعة النتائج تحتوي على القيمة المتوقعة.
- المخطط المتوقع: يتحقق من أن مجموعة النتائج تحتوي على أسماء الأعمدة المتوقعة وأنواع البيانات.
تشمل الشروط المدمجة الأخرى جمع بيانات التحقق من البيانات، مجموعة النتائج الفارغة، مجموعة النتائج غير الفارغة، ووقت التنفيذ.
إنشاء مشروع اختبار وحدة
إعداد اختبارات وحدات SQL Server في Visual Studio يتطلب عدة خطوات:
- افتح مشروع قاعدة بيانات SQL الخاص بك.
- في SQL Server Object Explorer، ابحث عن الإجراء أو الدالة المخزنة التي تريد اختبارها.
- انقر بزر الفأرة الأيمن على الكائن واختر إنشاء اختبارات وحدة.
- اختر أو أنشئ مشروع اختبار C#.
- قم بتعيين اتصال الاختبار إلى قاعدة بيانات التطوير الخاصة بك.
- اختر نشر مشروع قاعدة البيانات تلقائيا قبل تشغيل اختبارات الوحدة. هذا الخيار يحافظ على تزامن قاعدة بيانات الاختبار مع أحدث تغييرات مشروعك.
يفتتح المصمم بقالب T-SQL حيث تكتب منطق الاختبار وترفق شروط الاختبار.
كتابة اختبارات فعالة لوحدات قاعدة البيانات
يجيب اختبار الوحدة الجيد على سؤال محدد: "هل تقوم هذه العملية بما يفترض أن تفعله لمدخل معروف؟" إليك مثالا يختبر uspPlaceNewOrder، للتحقق من أن تقديم الطلب يحدث بشكل صحيح إجمالي السنة حتى التاريخ للعميل:
-- Pre-test: Set up customer and clear previous data
DECLARE @CustomerID INT;
INSERT INTO [Sales].[Customer] (CustomerName) VALUES (N'Test Customer');
SET @CustomerID = SCOPE_IDENTITY();
DELETE FROM [Sales].[Orders] WHERE [CustomerID] = @CustomerID;
-- Test: Place an order and verify YTDOrders updated correctly
DECLARE @RC INT;
EXECUTE @RC = [Sales].[uspPlaceNewOrder] @CustomerID, 100, GETDATE(), 'O';
SELECT [YTDOrders]
FROM [Sales].[Customer]
WHERE [CustomerID] = @CustomerID;
📝قم بإقران هذا الاختبار T-SQL مع شرط اختبار قيمة قياسية يتوقع أن تكون 100القيمة YTDOrders .
اختبارات سلبية
تحتاج أيضا للتحقق من أن الإجراءات المخزنة تفشل بشكل صحيح عند استلام مدخلات غير صالحة. على سبيل المثال، إلغاء طلب تم شحنه بالفعل يجب أن يسبب خطأ، وليس النجاح الصامت. يؤكد اختبار سلبي حدوث الخطأ المتوقع.
عندما تختار إنشاء اختبارات وحدة في الخطوة 3 من القسم السابق، يقوم Visual Studio بإنشاء مشروع اختبار C# في Solution Explorer مع .cs ملف يحتوي على اختبار لكل إجراء مخزن اخترته. على سبيل المثال، إذا أنشأت اختبارا ل uspCancelOrder، يتضمن الملف المنشأ قسما باسم Sales_uspCancelOrder_Test. لوضع علامة على ذلك الاختبار كاختبار سلبي، افتح الملف .cs في مستكشف الحلول وأضف السمة ExpectedSqlException مباشرة فوقه واحفظ الملف:
[TestMethod()]
[ExpectedSqlException(Severity = 16, MatchFirstError = false, State = 1)]
public void Sales_uspCancelOrder_FilledOrder_Test()
ينجح الاختبار فقط عندما يظهر الإجراء المخزن خطأ يطابق شدة الحالة والشدة المحددة. إذا نجح الإجراء بصمت، يفشل الاختبار، وهذا بالضبط ما تريده.
صمم نهج اختبار التكامل
اختبارات الوحدة تعزل الأجسام الفردية. اختبارات التكامل تذهب أبعد من ذلك وتختبر سيناريوهات تمتد عبر عدة عمليات. يجيبون على أسئلة مثل:
- هل تترك سلسلة من استدعاءات الإجراءات المخزنة قاعدة البيانات في الحالة المتوقعة؟
- هل تعمل المحفزات بشكل صحيح عندما تصل البيانات عبر طبقة التطبيق؟
- هل تعطي المشاهدات نتائج دقيقة بعد سلسلة من التغييرات ذات الصلة في الجدول؟
اختبارات التكامل تحتاج إلى قاعدة بيانات مخصصة. نشر مشروع قاعدة بيانات SQL على مثيل اختبار قبل كل تشغيل باستخدام إعداد نشر مشروع قاعدة البيانات تلقائيا قبل تشغيل اختبارات الوحدة . هذا الإعداد يحافظ على تحديث مخطط الاختبار.
اعتبارات لقواعد بيانات الاختبار
كل من اختبارات الوحدة واختبارات التكامل تشغل T-SQL على قاعدة بيانات حية، لذا تحتاج بيئة الاختبار إلى إعداد دقيق لإنتاج نتائج موثوقة.
- عزل الاختبارات من الإنتاج. استخدم نسخة منفصلة أو قاعدة بيانات اختبار مخصصة. لا ينصح أبدا بإجراء اختبارات ضد الإنتاج الإنتاجي.
- أعد ضبطك إلى حالة معروفة قبل كل تشغيل. السكربتات بعد النشر أو سكريبتات تنظيف الاختبار تتعامل مع هذه المشكلة.
- يتم تحويل سلاسل الاتصال إلى ملفات التكوين بحيث تشير خطوط أنابيب التطوير المحلية وCI إلى قاعدة البيانات الصحيحة دون تغييرات في الكود.
دمج الاختبارات في خطوط أنابيب CI/CD
أضف خطوة اختبار بعد البناء والنشر حتى تعمل الاختبارات تلقائيا على كل التزام. في Azure DevOps، استخدم المهمة VSTest :
- task: VSTest@2
inputs:
testAssembly: '**\*Tests.dll'
searchFolder: '$(System.DefaultWorkingDirectory)'
في GitHub Actions، قم بتشغيل الاختبارات باستخدام dotnet test:
- name: Run database unit tests
run: dotnet test ./DatabaseTests/DatabaseTests.csproj
نصيحة
قم بتكوين مشروع الاختبار لنشر مشروع قاعدة البيانات تلقائيا قبل تشغيل الاختبارات. يضمن هذا الإعداد أن مخطط قاعدة بيانات الاختبار يتطابق مع المشروع وقت الاختبار.
عندما يفشل الاختبار، يتوقف خط الأنابيب ولا يصل التغيير إلى مرحلة المراحل أو الإنتاج. هذا التأخير يمنح الفريق وقتا لإصلاح المشكلة قبل أن تؤثر على أي بيئة بيئة.
النقاط الموجزة الأساسية
يمتد اختبار قواعد البيانات عبر ثلاثة مستويات: التحقق من صحة البناء، اختبارات الوحدات للتحقق من المنطق، واختبارات التكامل لسير العمل من البداية إلى النهاية. تتبع اختبارات وحدة خادم SQL هيكلا ثلاثي المراحل من الاختبارات المسبقة، وإجراءات الاختبار، وإجراءات الاختبار بعد الاختبار. للتحقق من سلوك الإجراءات والدالة المخزنة، استخدم شروط اختبار مثل Scalar Value، Row Countو Expected Schema. لاختبار الطرق التي يجب أن تتحقق من مسارات معالجة الأخطاء، أضف السمة ExpectedSqlException . قم بتوصيل مشاريع اختبار في خط أنابيب CI/CD الخاص بك بحيث يمنع الاختبار الفاشل النشر قبل أن تصل التغييرات إلى مرحلة المراحل أو الإنتاج. معا، تشكل هذه الطبقات الثلاث شبكة أمان تتيح لفريقك نشر تغييرات قواعد البيانات بثقة بدلا من القلق.