
Serpent Team

Andrew Hanna

الإجابة باختصار: في كل pull request شغّل الفحوصات السريعة والحتمية بس: تحليل ثابت على الـ diff، واختبارات LWC Jest، ونشر دلتا للتحقق فقط بيشغّل اختبارات Apex اللي بتغطي الكود المتغير. وأي حاجة بطيئة أو غير مستقرة، زي تشغيل كل اختبارات الأورج ورحلات الواجهة والتكاملات الخارجية، حوّلها لمهمة ليلية. استهدف نتيجة في أقل من عشر دقايق، لأن بعد كده محدش بيقراها.
وفي قاعدة واحدة بتحكم القائمة دي: كل حاجة على بوابة الـ PR لازم تكون حتمية. اختبار واحد غير مستقر بيعلّم الفريق يدوس إعادة تشغيل، والبوابة اللي الناس بتعيد تشغيلها لحد ما تخضر تبقى ديكور.
أعطال الليل بتتفرز على القهوة. وده بالظبط المقصود: هي مش واقفة بين المطور وبين الدمج بتاعه.
أربع مستويات، والاختيار في كل مرحلة هو معظم التصميم (دليل Metadata API).
NoTestRun: مقبول جوه scratch org، ومينفعش أبدًا على طريق الإنتاج.
RunSpecifiedTests: بوابة الـ PR بتاعتك. وفيه نقطة مهمة تعرفها: في
المستوى ده كل كلاس وكل trigger في الحزمة لازم يوصل 75% تغطية بمفرده، محسوبة
لكل مكوّن مش على مستوى الأورج (وثائق Salesforce).
RunLocalTests: كل حاجة ما عدا اختبارات الحزم المُدارة. وده اللي بيشتغل
افتراضيًا في نشر إنتاجي فيه Apex.
RunAllTestsInOrg: بيضيف اختبارات الحزم المُدارة. نادرًا ما يكون ده
المطلوب، وبطيء.
وقواعد المنصة تحت ده مش بتتغير: لازم 75% على الأقل من الـ Apex بتاعك يكون مغطى عشان تنشر للإنتاج، وكل trigger محتاج سطر مغطى على الأقل، وكل اختبار بيتنفذ لازم ينجح، مهما كانت نسبة التغطية (Salesforce Help).
مش على الـ pull request. اختبارات الواجهة هي أبطأ وأهش حاجة في أي pipeline لـ Salesforce: الـ shadow DOM في مكونات Lightning، ومعرّفات العناصر المولّدة، وشاشات تسجيل الدخول، كلها بتكسر المحددات لأسباب مالهاش علاقة بالتغيير اللي بتراجعه.
الوضع العملي: مجموعة اختبارات سريعة من خمسة لعشرة مسارات حرجة بعد الدمج في فرع التكامل، والحزمة الكاملة بالليل. وقاعدة عملية: لو اختبار واجهة فشل مرتين لأسباب مش من المنتج، يبقى ده بند صيانة مش بوابة.
الدليل ده جزء من أدلة Salesforce DevOps عندنا.
فحص الـ pull request في Salesforce يبقى سريع قد إيه؟
أقل من عشر دقايق من الأول للآخر. بعد كده المطورين بيتحولوا لحاجة تانية، وبيبطلوا يقروا المخرجات، والفحص بيبطل يغيّر أي سلوك.
هل نشغّل كل اختبارات Apex في كل pull request؟
لأ. شغّل الاختبارات اللي بتغطي الكلاسات المتغيرة باستخدام
RunSpecifiedTests، وسيب التشغيل المحلي الكامل للمهمة الليلية وتحقق
الإصدار.
Salesforce بتطلب تغطية قد إيه فعلًا؟
75% من الـ Apex على مستوى الأورج للنشر في الإنتاج، وسطر مغطى على الأقل في كل trigger،
وكل اختبار بيتنفذ لازم ينجح. ومع RunSpecifiedTests، كل كلاس وtrigger في
الحزمة محتاج 75% بمفرده.
هل اختبارات LWC Jest محتاجة أورج؟
لأ. بتشتغل بره المنصة في Node، وعشان كده بالظبط مكانها بوابة الـ pull request مش المهمة الليلية.
اختبارات الواجهة تشتغل فين؟
مجموعة سريعة صغيرة بعد الدمج، والحزمة الكاملة بالليل. حطها على الـ pull request أسرع طريقة تعلّم الفريق يتجاهل البناء الأحمر.
بدون التزام.