يقوم برنامج تثبيت Python لنظام التشغيل Android بنفسك من TeamCity


الجمهور


مهندسو ضمان الجودة ، ومختبرو تطبيقات الهاتف المحمول ، والأتمتة.


المشكلة


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


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


حل جاهز


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


فكر في عملية تثبيت التطبيق النموذجية باستخدام Crashlytics Beta:


  • نجد أيقونة بيتا (1) → اضغط (2) = يبدأ التطبيق.
  • نجد المشروع المطلوب (3) → قم بالضغط على (4) = تفتح شاشة بقائمة من التجميعات.
  • ابحث عن التجميع المطلوب (5) ← قم بالنقر فوق "تنزيل" (6) = يتم تنزيل ملف التثبيت على الجهاز.
  • يتم عرض شاشة مع اقتراح لتثبيت التطبيق ← اضغط على "تثبيت" (7) = يتم عرض شاشة التثبيت.
  • ابحث عن التطبيق المثبت (8) → اضغط (9) = يبدأ التطبيق ؛ جاهز للاختبار.

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


حل مخصص


نختار Python كلغة برمجة ، لأنها مناسبة لمهمتنا وتحظى بشعبية كبيرة ، بما في ذلك بين مهندسي ضمان الجودة.
للتفاعل مع Android ، سنستخدم adb ، وهو جزء من Android SDK القياسي.
لتنزيل الملفات - Wget.
في حالتنا ، يتم تنفيذ التجميعات في TeamCity.


الآن دعنا ننتقل إلى كتابة التعليمات البرمجية.


بادئ ذي بدء ، نقوم باستيراد وحدة العمليات الفرعية في المشروع ، فمن الضروري تنفيذ أوامر wget و adb .


import subprocess 

أضف الإعدادات اللازمة لـ Wget.


 settings = {'user': '—user=__teamcity', 'password': '—password=__teamcity', 'way': '____'} 

سنقوم بتثبيت التطبيقات عن طريق رقم البناء ، لذلك سنقوم بتعليم البرنامج النصي لطلب هذه المعلمة.


 number = input(' № : ') 

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


 https://teamcity.mysite.com/repository/app/_/_/myapp-_-_.apk 

في العنوان ، بدلاً من رقم التجميع ، يمكنك رؤية رقم التعريف ، على سبيل المثال ، / 1234: id /. لن نذكر هنا الرقم ، بل رقم التجميع.


سنكتب وظيفة لتنزيل التجميعات المحددة.


 def download(type_b): url = 'http://teamcity.mysite.com/repository/app/{0}/{1}/myapp-{0}-{1}.apk'.format(number, type_b) #    — ,  ,    —   , #     —  subprocess.check_output(['wget', '-N', '--cache=off', '--progress=bar', settings['user'], settings['password'], '-P', settings['way'], url]) 

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


في هذا المثال الخيالي ، حزمتان:


  • com.myapp.prod
  • com.myapp.test

بدء الأنشطة:


  • com.myapp.prod/com.myapp.StartActivity
  • com.myapp.test / com.myapp.StartActivity

ستكون أسماء الحزم والنشاط الخاصة بك مختلفة.


 def install(type_b): try: #   ,  package name subprocess.check_output(['adb', 'uninstall', 'com.myapp.{0}'.format(type_b)]) except: #     —  . pass finally: #    subprocess.check_output(['adb', 'install', '{0}/myapp-{1}-{2}.apk'.format(settings['way'], number, type_b)]) #   ,  activity name subprocess.check_output(['adb', 'shell', 'am', 'start', 'com.myapp.{0}/com.myapp.StartActivity'.format(type_b)]) print('(^_^)  ({0}-{1})   .'.format(number, type_b)) 

تتم كتابة جميع الوظائف اللازمة. الآن يمكن تطبيقها.
بالإضافة إلى ذلك ، نقوم بإضافة معالج للحالة عندما لا يكون التجميع المحدد في TeamCity.


 while True: try: #  ,     download('prod') #  ,     download('test') except Exception: #    —     number = input('¯\_(ツ)_/¯   .\n  №: ') else: print(' …') #      install('prod') #      install('test') #    —       print('! (_8(|)\n') break 

البرنامج النصي جاهز. نقوم بحفظه ، على سبيل المثال ، تحت اسم installer.py
أضف اسمًا مستعارًا ، مثل alias inst = 'python ~ / scripts / installer.py'


تحقق


لذلك ، لتثبيت تجميع واحد باستخدام Crashlytics Beta ، تحتاج إلى تنفيذ 9 إجراءات. للمقارنة ، نقيس هذا المؤشر في البرنامج النصي.


  • نبدأ البرنامج النصي بالأمر inst (1) = يتم عرض اقتراح لتعيين رقم البناء.
  • قم بتعيين رقم التجميع (2) = يتم حذف التجميعات القديمة ؛ تنزيل وتثبيت وإطلاق جديدة. التطبيق جاهز للاختبار.

النتيجة


بيتا (بناء واحد) - 9 إجراءات (لا تشمل حذف الإصدارات القديمة).
البرنامج النصي الخاص بك (عدد التجميعات كما تريد) - 2 إجراءات.


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


مصادر


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


All Articles