المصدر المفتوح: CI / CD و Avito اختبار البنية التحتية لنظام Android

قمنا بنقل Avito لنظام Android للبنية التحتية مفتوحة المصدر: المكونات الإضافية Gradle ، المحاكيات ومكتبات الاختبار. نظامنا سيكون مفيدا في أتمتة CI / CD، وسيسهل أيضا الكتابة ودعم autotests.

في مقال المراجعة هذا ، سوف نشرح لماذا قررنا أن نجعل عملنا مفتوحًا ، حول أهم مكتبات المشروع وسنوجه إلى أين نذهب مع القضايا الناشئة. سوف نحلل بالتفصيل المكتبات الفردية ، والمكونات الإضافية لـ Gradle ، ونهج التطوير الخاصة بنا في المواد التالية.



من نحن وماذا نفعل


نحن نعمل على صناعة Android في فريق منصة السرعة. هناك أربعة منا:
Seryozha Boishtyan
كبير مهندسي
حساب Twitter


Dima Voronin كبير
مهندسي
حساب Twitter


Zhenya Krivobokov
كبير مهندسي
حساب Twitter


دانييل بوبوف
كبير مهندسي
حساب تويتر


نحن مسؤولون عن تقديم التغييرات في جميع تطبيقات Avito Android للمستخدمين بشكل أسرع. تشمل مسؤوليتنا ما يلي:

  • العمل المحلي مع المشروع: بحيث يتم تجميع كل شيء بسرعة وعدم تباطؤ IDE.
  • خط أنابيب CI: الاختبارات ، جميع الفحوصات الممكنة.
  • القرص المضغوط: أدوات لمهندسي الإصدار.

لماذا نحتاج إلى مصدر مفتوح


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

  • احصل على ملاحظات.
  • التأثير على معايير الصناعة.
  • تعلم اشياء جديدة.
  • تؤثر على مكتبات الطرف الثالث.
  • عزز علامتك التجارية الشخصية.

دعنا نراجعها لفترة وجيزة.

احصل على ملاحظات واجعل الرمز أسهل في إعادة الاستخدام


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

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

التأثير على معايير الصناعة


لقد قمنا بتطوير البنية التحتية لتطبيقات الهاتف المحمول منذ عام 2017 ونتحدث عنها بانتظام في المؤتمرات والاجتماعات:


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

  • كيفية كتابة الاختبارات الذاتية حتى يستفيدوا.
  • كيفية تشغيلها في طلبات السحب.
  • كيفية أرخص للحفاظ على البنية التحتية.

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

تعلم بشرح للآخرين


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

تؤثر على مكتبات الطرف الثالث وإصلاح مشاكلهم بشكل أسرع


تخيل أنك تواجه مشكلة في Android أو مكتبة ولا يمكنك العثور على حل بديل. أنت بحاجة إلى مساعدة من المجتمع أو مؤلفي الكود. لقد طرحت سؤالاً على Stack Overflow ، وأنشأت خطأً في Google IssueTracker ، ووصفت كل شيء بالتفصيل ، لكن المشكلة لا تتكاثر. سيطلب منك حالة اختبار. كل هذا يستغرق وقتًا إضافيًا.

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

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

العلاقات العامة والدافع الشخصي


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

ما تم إحضاره إلى المصدر المفتوح


نحن نضع تقريبا كل من الروبوت وCI / CD اختبار البنية التحتية في مستودع جيثب . لتسهيل تصفح المطورين الآخرين للمشروع ، يتم تجميع جميع الوحدات حسب الغرض:




سألاحظ وجود اثنتين من أهم المكتبات.

اختبار عداء


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

عداء الاختبار:

  • يصف الاختبارات التي سيتم تشغيلها. هناك تصفية حسب التعليقات التوضيحية والحزم ونتائج الإطلاق الأخير.
  • يصف المحاكيات التي سيتم تشغيل الاختبارات عليها. يدعمهم Kubernetes أو يتصل بمحاكيات محلية.
  • يحدد شروط إعادة بدء الاختبارات.
  • يرسل تقرير نهائي مع نتائج التشغيل التجريبي.

يتم تخزين النتائج في TMS مخصص (نظام إدارة الاختبار) ، وهي ليست مفتوحة المصدر. نحن نعمل على إمكانية ربط تنفيذ آخر.



تحليل الأثر


لدينا حوالي 1600 اختبار أجهزة واختبارات وحدة 10K. نود إجراء جميع الاختبارات لأي تغيير في الشفرة ، ولكن هذا غير ممكن - سيستغرق التشغيل الكثير من الوقت.

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

لقد كتبنا البرنامج المساعد Gradle الذي يبحث عن التغييرات في الوحدات ، ويحلل الاختبارات ويحدد تلك التي سيتم تشغيلها.



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



كيف يمكن أن تكون مكتباتنا مفيدة


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

يمكنك أن تطلب أي شيء:

  • كيف تعمل مع اختبارات غير مستقرة؟
  • لماذا الكثير من التعليمات البرمجية؟ إنه عديم الفائدة.
  • لماذا كل التعليمات البرمجية في الإضافات Gradle ، وليس البرامج النصية Python؟

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

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

استنتاج


نخطط في المقالات التالية للحديث عن:

  • عداء الاختبار لدينا.
  • تشريح الاختبار - ما يحدث من الضغط على زر "تشغيل" في IDE للحصول على النتيجة.
  • كيف نكافح مع عدم استقرار الاختبارات والبنية التحتية.
  • نهجنا لكتابة البنية التحتية.
  • كيف قمنا بتقليل وقت الإصدار من شهر لآخر.

هناك أفكار حول مواضيع أكثر عمومية:

  • كيف تبدأ كتابة الاختبارات.
  • أساسيات الاختبار للمبتدئين - حول الأساليب والتقنيات المشتركة.

أخبرنا في التعليقات بما تريد معرفته. لذلك سوف نفهم أي نص نكتبه أولاً.

All Articles