How Guru’s Engineers Use Cypress for Better Burn Testing

هل تحتاج إلى طريقة أفضل للتعامل مع اختبار الاحتراق؟ لقد وجد اثنان من مهندسينا في الواجهة الأمامية طريقة لاستخدام Cypress لتحسين طريقة التعامل مع ضمان الجودة.
جدول المحتويات

نحن نهتم بمشاركة المعرفة في Guru، وعندما نكتشف شيئًا جديدًا ومفيدًا، نريد من العالم أن يعرف! يستخدم فريق الهندسة لدينا Cypress في عملية الاختبار وضمان الجودة. لقد اكتشفوا طريقة جديدة لمساعدتنا في إجراء اختبارات الاحتراق بشكل أفضل، ويريدون مشاركة عمليتهم الجديدة والمحسنة مع المهندسين والمختبرين الآخرين.

على مدار العام الماضي، كنا نركز على زيادة تغطية اختباراتنا - تحديدًا الاختبارات من النهاية إلى النهاية التي تضمن أن أجزاء مختلفة من تدفقات منتجنا تعمل بشكل صحيح أثناء تحديثات الشيفرة. لإجراء هذا النوع من الاختبارات، نستفيد من أداة تُدعى Cypress التي تحاكي سلوك المستخدم مع تطبيق الويب الخاص بنا وملحق Google Chrome. تعمل مجموعة الاختبارات هذه على كل طلب سحب لضمان أن الشيفرات الجديدة لا تتسبب في كسر الأشياء في واجهة المستخدم لدينا. نريد أيضًا منع الإصدارات من الخروج إذا فشلت مجموعة Cypress الخاصة بنا على فرع الإنتاج.

Ryan%20and%20Jack%20Talk%20About%20Cypress.png

ما الذي نبحث عنه في الاختبارات التقليدية

تتعلق إحدى المشكلات التي تعاملنا معها برؤية بعض اختباراتنا تفشل، ولكن ليس بسبب قضايا متعلقة بواجهة المستخدم أو الشيفرة. إذًا، كيف تساعدنا Cypress في هذه الحالات؟ نجعل Cypress تعمل كاستخدام يمكننا تحديد سلوكه. هناك عدة متغيرات قد تجعل Cypress تخبرنا بوجود فشل، ولكن من وجهة نظر المستخدم، لا يبدو أن هناك شيئًا خاطئًا.

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

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

كيف يساعد اختبار الاحتراق

Guru_Collage_Image-Library-23.png

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

في Guru، نستخدم اختبار الاحتراق كجزء من مجموعة Cypress الخاصة بنا لأي اختبارات جديدة أو معدلة تُضاف إلى قاعدة الشيفرة لدينا. قبل أن تُدمج هذه الاختبارات، نقوم بتشغيلها عدة مرات على التوالي ويجب أن تجتاز جميعها للانتقال إلى الخطوة التالية في خط أنابيب CircleCI الخاص بنا.

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

للعثور على الملفات التي نبحث عنها، نستخدم git diff على الفرع الحالي ونزود الإخراج كمعلمة لأداة تُدعى cypress-repeat التي تسمح لنا بتشغيل هذه الاختبارات أي عدد محدد من المرات، مما يضيف فعليًا اختبار الاحتراق كخطوة في مجموعة اختباراتنا الشاملة.

النتيجة

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

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

نحن نهتم بمشاركة المعرفة في Guru، وعندما نكتشف شيئًا جديدًا ومفيدًا، نريد من العالم أن يعرف! يستخدم فريق الهندسة لدينا Cypress في عملية الاختبار وضمان الجودة. لقد اكتشفوا طريقة جديدة لمساعدتنا في إجراء اختبارات الاحتراق بشكل أفضل، ويريدون مشاركة عمليتهم الجديدة والمحسنة مع المهندسين والمختبرين الآخرين.

على مدار العام الماضي، كنا نركز على زيادة تغطية اختباراتنا - تحديدًا الاختبارات من النهاية إلى النهاية التي تضمن أن أجزاء مختلفة من تدفقات منتجنا تعمل بشكل صحيح أثناء تحديثات الشيفرة. لإجراء هذا النوع من الاختبارات، نستفيد من أداة تُدعى Cypress التي تحاكي سلوك المستخدم مع تطبيق الويب الخاص بنا وملحق Google Chrome. تعمل مجموعة الاختبارات هذه على كل طلب سحب لضمان أن الشيفرات الجديدة لا تتسبب في كسر الأشياء في واجهة المستخدم لدينا. نريد أيضًا منع الإصدارات من الخروج إذا فشلت مجموعة Cypress الخاصة بنا على فرع الإنتاج.

Ryan%20and%20Jack%20Talk%20About%20Cypress.png

ما الذي نبحث عنه في الاختبارات التقليدية

تتعلق إحدى المشكلات التي تعاملنا معها برؤية بعض اختباراتنا تفشل، ولكن ليس بسبب قضايا متعلقة بواجهة المستخدم أو الشيفرة. إذًا، كيف تساعدنا Cypress في هذه الحالات؟ نجعل Cypress تعمل كاستخدام يمكننا تحديد سلوكه. هناك عدة متغيرات قد تجعل Cypress تخبرنا بوجود فشل، ولكن من وجهة نظر المستخدم، لا يبدو أن هناك شيئًا خاطئًا.

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

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

كيف يساعد اختبار الاحتراق

Guru_Collage_Image-Library-23.png

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

في Guru، نستخدم اختبار الاحتراق كجزء من مجموعة Cypress الخاصة بنا لأي اختبارات جديدة أو معدلة تُضاف إلى قاعدة الشيفرة لدينا. قبل أن تُدمج هذه الاختبارات، نقوم بتشغيلها عدة مرات على التوالي ويجب أن تجتاز جميعها للانتقال إلى الخطوة التالية في خط أنابيب CircleCI الخاص بنا.

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

للعثور على الملفات التي نبحث عنها، نستخدم git diff على الفرع الحالي ونزود الإخراج كمعلمة لأداة تُدعى cypress-repeat التي تسمح لنا بتشغيل هذه الاختبارات أي عدد محدد من المرات، مما يضيف فعليًا اختبار الاحتراق كخطوة في مجموعة اختباراتنا الشاملة.

النتيجة

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

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

تجربة قوة منصة Guru بشكل مباشر - قم بجولة تفاعلية في المنتج
قم بجولة