The Chromium Chronicle #2: محاربة تقطُّع الانتباه

الحلقة الثانية: من إعداد "فاسيلي" في ميونخ (مايو 2019)
الحلقات السابقة

الاختبارات غير المستقرة هي مشكلة شائعة في Chrome. فهي تؤثر في إنتاجية المطورين الآخرين، ويتم إيقافها بمرور الوقت. أما الاختبارات التي يتم إيقافها، فسيؤدي ذلك إلى تقليل تغطية الاختبارات.

مرحلة الفرز

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

مرحلة تصحيح الأخطاء

يكون عدد من علامات سطر الأوامر مفيدًا لحل الاختبارات غير المستقرة. على سبيل المثال، ستعرض الأداة --enable-pixel-output-in-tests واجهة المستخدم الفعلية للمتصفّح.

استخدِم أدوات احتياطية إذا أخفى برنامج تصحيح الأخطاء التشويش. بموجب برنامج تصحيح الأخطاء، قد لا يكون الاختبار غير مستقر. في هذه الحالة، يمكن أن تكون بيانات السجل أو base::debug::StackTrace مفيدة.

الإجراءات غير المُوصى بها

يُرجى العِلم بالأسباب الشائعة لتعذُّر استخدام EXPECT__*، بالإضافة إلى الأخطاء في رمز الإنتاج:

  • توقّعات غير صحيحة (على سبيل المثال، تشير الصفحة الآمنة إلى بروتوكول HTTPS، ويمكن أن تكون مضيفًا محليًا بدلاً منها).
  • شروط السباق بسبب الاختبارات التي لا تكون في انتظار الحدث المناسب.

[لا تختبر التنفيذ][ليس التنفيذ] ولكن السلوك.

// It takes 2 round trips between the UI and the background thread to complete.
SyncWithTheStore();
SyncWithTheStore();
CheckTheStore();

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

الإجراءات غير المُوصى بها

يجب الانتباه إلى الأنماط الشائعة، مثل ما يلي:

Submit TestPasswordForm();
// Wait until things settle down.
RunLoop().RunUntilIdle();
CheckCredentialPromptVisible();

من المؤكد أن مقتطفًا من اختبار متصفح مثل المقتطف أعلاه غير صحيح. هناك العديد من الأحداث التي يجب أن تحدث في عمليات وسلاسل محادثات مختلفة قبل ظهور بعض واجهة المستخدم.

الإجراءات التي يُنصح بها

إليك إصلاح صحيح:

SubmitTestPasswordForm();
WaitUntilCredentialPromptVisible();

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

مرحلة ما بعد الإصلاح

بعد حلّ المشكلة، يمكنك إجراء الاختبار مئات المرات على الجهاز. احرص على متابعة بوابة Falakiness.