اختبار التكامل القائم على الحاويات

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



دعونا ننشئ اختبارات BDD للتكامل ( تطوير مدفوع بالسلوك ) باستخدام Cucumber و Protractor و Selenium وتشغيلها على منصة OpenShift باستخدام Zalenium.

اختبار BDD


في تطوير اختبارات التكامل ، يسمح BDD لمحللي الأعمال (BAs) بإنشاء تعريفات اختبارات التكامل ، وليس فقط المبرمجين. بفضل BDD ، يمكن تنظيم عملية التطوير بحيث يتم إعداد المتطلبات والتعريفات الوظيفية لاختبارات التكامل في نفس الوقت ، وفي نفس الوقت يتم إنشاؤها من قبل محللي الأعمال.

هذا أفضل بكثير من المناهج التقليدية ، عندما تحدد أولاً الوظيفة التجارية للتطبيق ، ثم يقوم قسم مراقبة الجودة (QA) بإنشاء اختبارات التكامل ، كما هو موضح في الرسم البياني أدناه:



وإليك كيف يبدو عند استخدام BDD:



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

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

على سبيل المثال:

نظرًا لانتقال المستخدم إلى صفحة تسجيل الدخول (شريطة أن يكون المستخدم قد وصل إلى صفحة تسجيل الدخول)

عندما يقوم المستخدم بإدخال اسم المستخدم وكلمة المرور

عندما يكون اسم المستخدم وكلمة المرور صحيحين

ثم يقوم النظام بتسجيل دخولهم (ثم يسمح لهم النظام بتسجيل الدخول)

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

اختبار المكدس التكنولوجي


دعنا نلقي نظرة على إجراء الاختبار باستخدام تطبيق الويب TodoMVC كمثال على تنفيذ AngularJS . AngularJS هو إطار عمل شائع لإنشاء تطبيقات أحادية الصفحة (SPA).

نظرًا لأن AngularJS هي JavaScript ، فسنستخدم Cumcumber.js ، خيار Cucumber لربط JavaScript.

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

أخيرًا ، سنستخدم Protractor لمراعاة الفروق الدقيقة في تطبيقات SPA المحاكية المكتوبة في AngularJS. سيهتم المنقلة بتوقع تحميل المشاهدات داخل الصفحة بشكل صحيح.

لذا ، فإن مجموعتنا الاختبارية هي كما يلي:



يتم وصف العملية المقدمة في هذا الرسم البياني على النحو التالي:

  • عند تشغيل اختبار الخيار ، يقرأ الخيار تعريف الاختبار من ملف غيركين.
  • ثم يبدأ في استدعاء رمز تنفيذ رمز الاختبار.
  • يستخدم رمز تنفيذ البرنامج النصي منقلة لأداء الإجراءات على صفحة ويب
  • عندما يحدث هذا ، يتصل المنقلة بخادم المنقلة ويصدر أوامر لـ Selenium من خلال API.
  • يقوم السيلينيوم بتنفيذ هذه الأوامر في نسخة المتصفح.
  • المتصفح ، إذا لزم الأمر ، يتصل بخادم (خوادم) الويب. في مثالنا ، يتم استخدام تطبيق SPA ، وبالتالي ، لا يحدث مثل هذا الاتصال ، حيث تم تحميل التطبيق بالفعل عند التحميل من خادم الصفحة الأولى.

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

مزرعة اختبار التكامل


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

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

من الناحية المثالية ، أود أن أجري الاختبارات بالتوازي.

يمكن أن تساعدنا Selenium-Grid في ذلك - وهو حل يتضمن وسيط طلب Selenium Hub وعقدًا أو أكثر يتم تنفيذ هذه الطلبات عليه.



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

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

اختبار التكامل القائم على الحاويات


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

لا يزال هذا المجال من التكنولوجيا في مرحلة مبكرة من التكوين ، ومع ذلك ، فإن أحد المشاريع المفتوحة المصدر الواعدة - Zalenium - يقدم بعض ما نحتاج إليه.

يستخدم Zalenium Hub المعدل الذي يمكنه إنشاء العقد عند الطلب وتدميرها عندما لا تكون هناك حاجة إليها. يدعم Zalenium حاليًا متصفحات Chrome و Firefox فقط على نظام Linux الأساسي. ولكن مع ظهور عقد Windows لـ Kubernetes ، قد يظهر دعم Explorer و Edge على Windows.

إذا جمعت كل شيء معًا ، فإن المكدس التكنولوجي هو كما يلي:



كل شكل بيضاوي في الرسم البياني هو جراب منفصل في Kubernetes. قرون لاعب الاختبار والمحاكاة سريعة الزوال ويتم تدميرها في نهاية الاختبار.

إجراء اختبارات التكامل داخل خط أنابيب CI / CD


لنقم بإنشاء خط أنابيب بسيط في Jenkins لإظهار كيفية دمج هذا النوع من اختبارات التكامل في بقية عملية إدارة الإصدار. يبدو هذا:



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

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

وهذا مثال لتقرير عن نتائج الاختبارات (لاحظ أنه تم تشغيل الاختبارات على متصفحين):



الخلاصة


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

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

إذا كنت تقوم بتطوير تطبيقات حاويات ، فحاول استخدام هذا النهج داخل خط أنابيب CI / CD ومعرفة ما إذا كان يساعد على تبسيط اختبار التكامل.

يمكن العثور على نموذج التعليمات البرمجية من هذه المقالة على موقع GitHub على الويب على redhat-cop / container-pipelinesh.

Source: https://habr.com/ru/post/ar420385/


All Articles