برنامج اختبار أتمتة محطات QIWI

مرحبا يا هابر!

سنتحدث اليوم عن موضوع محدد: أتمتة اختبار البرمجيات لمحطات الخدمة الذاتية لـ QIWI.

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

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

أردت التحدث عن شيء مثل هذا اليوم. المقالة مناسبة لأولئك المشاركين في تطوير واختبار البرمجيات لمحطات البنوك أو آلات الخدمة الذاتية. وأيضًا لأولئك الذين يريدون توسيع آفاقهم الفنية بأمثلة من "لكن هذا يحدث أيضًا". QIWI-terminal في عام 2020. في الخلفية ، يمكنك رؤية ملئه.




مشكلة


ظهرت أول محطة QIWI في عام 2004 ، وتمكنت بعد ذلك من تجديد حساب الهاتف المحمول. منذ ذلك الحين ، تدفقت الكثير من المياه ، وتغيرت ASO (آلات الخدمة الذاتية) كثيرًا. الآن ، وبمساعدة منهم ، يمكنك تجديد البطاقات المصرفية ، وإجراء التحويلات ، ودفع مقابل خدمات مختلف الموردين (مقدمي الخدمات) - الإسكان والخدمات المجتمعية ، وغرامات شرطة المرور ، والمنظمات الائتمانية ، ومنتجات QIWI الخاصة بنا (محفظة QIWI ، ضمير بطاقة التقسيط بدون فائدة). يمكن أيضًا أن تعمل محطات QIWI في وضع postamata (نقاط التسليم المؤتمتة للمتاجر عبر الإنترنت).

كيف تبدو المحطة؟


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

وهذه هي المشكلة الأولى.


تم التقاط هذه الصورة الشهيرة في مقاطعة سونوما ، كاليفورنيا. يقولون أن هذه ألوان طبيعية ، دون أي معالجة. بالمناسبة ، كان على مستعمرة مقاطعة سونوما أن تقع المستعمرة الروسية في أقصى الجنوب في أمريكا.

نعم ، هذه هي. نظام التشغيل ، الذي توقف في 2014 ، هو Windows XP. تم سحب إصدار POSReady حتى عام 2019 ، ولكن ... ليس بهذه البساطة.

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

وفقًا لذلك ، فإن 90٪ من أسطول محطات QIWI (وهناك أكثر من 100 ألف في روسيا والدول الأجنبية) يشغلون Windows XP على مجموعة متنوعة من الأجهزة - من 512 ميجابايت إلى 4 جيجابايت من ذاكرة الوصول العشوائي ، ومجموعة متنوعة من وحدات المعالجة المركزية (من Pentium 4 سنوات صفر عميقة إلى أكثر - أقل حداثة Core i5) وجودة وسرعة مختلفة للإنترنت. محطات من مختلف الأعمار ، وبعضها يتم ترقيته بانتظام ، وبعضها لم تتم ترقيته لفترة طويلة جدًا (إنه يعمل - لا تلمسه!). مهمتنا هي توفير أحدث تحديثات برامج المحطة الطرفية بانتظام (تسمى MarATL) والحفاظ على التوافق مع كل هذه المجموعة المتنوعة من الإضافات والأجهزة الطرفية.

نظام تشغيل دعم منتهي الصلاحية


تخيل دائرة أتمتة اختبار بسيطة. لدينا خادم CI ، على سبيل المثال ، TeamCity أو Jenkins. يتم جمع برنامجنا الطرفي من المواد الخام حسب الحدث (الالتزام أو الكومة) ، ويتم وضع الملف الثنائي الذي تم جمعه في مكان ما. يتم تثبيت البرنامج تلقائيًا ، ويتم إطلاق الاختبارات التلقائية الوظيفية الليلية ... آه ، توقف! أين يذهب تثبيت البرنامج؟ وكيف؟

كما قلت أعلاه ، فإن 90 بالمائة من المحطات الطرفية تعمل بنظام Windows XP ، والذي انتهى في عام 2014. وهذا يعني أن نظام التشغيل هذا لم يعد يتوافق مع سياسات الأمان لفترة طويلة ، ولم يتم إصدار تحديثات له ، ولا يوجد برنامج عمل جديد له ، وحتى Microsoft Visual Studio الأصلي يقوم بتجميع C ++ له فقط بعد الرقص مع الدف ، أو بالأحرى مع إصدار سلسلة الأدوات لمجمع MSBuild.

بشكل عام ، يعد إجراء الاختبارات ونوع من البرامج على جهاز طرفي أو جهاز افتراضي يعمل بنظام Windows XP فكرة سيئة للغاية. لا يمكنك رفع Buildagent TeamCity على XP ، ولا يمكنك تكوين مثل هذا الجهاز في Ansible playbook ، ولا توجد حاويات هناك أيضًا. قوالب المحاكاة الافتراضية لنظام التشغيل Windows XP ليست كبيرة أيضًا. في أي شركة كبيرة تفكر في أمن المعلومات ، سيتم إبقاء جهاز Windows XP بعيدًا عن شبكة الشركة ، أو حتى أقل من المجال. أي أن جميع التفاعلات مع المحطة الطرفية (أو الجهاز الظاهري الذي يتظاهر بأنه كذلك) يجب أن تحدث عن بعد ، ويجب أن يكون لدى المحطة نفسها الحد الأدنى من برامج الطرف الثالث.

القرار


يفاجأ بعض الناس عندما يسمعون عن مجموعة من OpenSSH و Windows XP. في الإصدار الحديث من Microsoft ، يتم تضمين دعم OSH مباشرة في النظام. في الإصدار غير الحديث (Windows 7) ، هناك مثبتات SSH تستخدم PowerShell. C Windows XP ، الوضع أسوأ قليلاً ، ولكن قليلاً فقط. هناك إصدار قديم من المثبت يعمل عليه بدون برامج إضافية.

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

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

على سبيل المثال ، يُظهر نظام التشغيل Windows XP SP3 القياسي في المنطقة الزمنية لموسكو الوقت الذي يسبقه بساعة واحدة عن التوقيت الحقيقي لموسكو. وفقًا لذلك ، لا تتوافق الطوابع الزمنية لسجلات المحطة الطرفية في أي حال مع الوقت في دائرة الاختبار.

المدفوعات-المدفوعات-المدفوعات ...


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

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

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

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


صفحة اختبار الواجهة. يعرض الأوامر التي تمر من خلالها.

وأين المال؟


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

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

تعمل معظم أجهزة استقبال الأموال باستخدام بروتوكول CashCode NET. يحدد هذا البروتوكول سيناريوهات التفاعل بين متقبل الفاتورة ووحدة التحكم (في حالتنا ، وحدة التحكم هي برنامجنا الطرفي).


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


الحد الأدنى لحجم أمر CashCode هو 6 بايت. للحصول على وصف للأوامر ، راجع مواصفات بروتوكول CashCode NET.

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

قضيتنا أبسط ، نحتاج إلى أداة يمكنها التمسك بالمنفذ باستخدام WinAPI ولها واجهة تعسفية مريحة ، على سبيل المثال ، أبسط stdin / stdout ، والتي يمكن توصيلها باستخدام SSH.

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

هذه هي دورة المال في الطبيعة.


طابعة الإيصالات (أعلاه) ومستقبل الفاتورة (أدناه).

24/7


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

التثبيت من الصفر والتحديث


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

التركيب النظيف من الصفر أصعب. عادة ، يقوم شخص بذلك في الحقول ببساطة عن طريق نسخ ملف التثبيت إلى المحطة وإدخال الإعدادات وبيانات التفويض في نماذج المثبت ، والتي عادة ما تكون تطبيق WinAPI مع وحدات تحكم Windows القياسية (TextBox ، CheckBox ، إلخ).

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


التثبيت النظيف من نقطة الصفر

استنتاج


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

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


All Articles