Android के लिए Do-it-Python इंस्टॉलर TeamCity से बनाता है


दर्शक


क्यूए-इंजीनियर, मोबाइल एप्लिकेशन के परीक्षक, स्वचालन।


समस्या


एंड्रॉइड के लिए अनुप्रयोगों के परीक्षण के दौरान (न केवल, बल्कि आगे हम केवल इस प्लेटफॉर्म के बारे में बात करेंगे), आपको परीक्षण किए गए उत्पाद / उत्पादों की कई विधानसभाओं को स्थापित करना होगा। इस प्रक्रिया में समय और मेहनत लगती है, जो बग ढूंढने में खर्च करने के लिए अधिक कुशल है।


इस लेख में, हम एक मौजूदा समाधान को देखेंगे, पायथन में अपना स्वयं का लिखें और उनकी तुलना करें।


टर्नकी समाधान


शायद इस समय इस समस्या का सबसे लोकप्रिय समाधान क्रैशलाईटिक्स सेवा द्वारा प्रदान किया गया है, जिसमें बीटा इंस्टॉलर शामिल है।


क्रैशलाईटिक्स बीटा का उपयोग करके एक विशिष्ट एप्लिकेशन इंस्टॉलेशन प्रक्रिया पर विचार करें:


  • हमें बीटा आइकन (1) → डू टैप (2) = एप्लिकेशन शुरू होता है।
  • हम वांछित परियोजना (3) → डू टैप करते हैं (4) = एक स्क्रीन जिसमें असेंबली की सूची खुलती है।
  • हमें वांछित असेंबली (5) → डू "डाउनलोड" (6) पर टैप करें। इंस्टॉलेशन फ़ाइल डिवाइस में डाउनलोड हो गई है।
  • एप्लिकेशन इंस्टॉल करने के प्रस्ताव के साथ एक स्क्रीन प्रदर्शित की जाती है → "इंस्टॉल" (7) टैप करें = इंस्टॉलेशन स्क्रीन प्रदर्शित होती है।
  • इंस्टॉल किए गए एप्लिकेशन को ढूंढें (8) → डू टैप (9) = एप्लिकेशन शुरू होता है; परीक्षण के लिए तैयार है।

तो, क्रैशलाईटिक्स बीटा का उपयोग करके एक एप्लिकेशन बिल्ड को स्थापित करने और चलाने के लिए, आपको कम से कम नौ क्रियाएं करने की आवश्यकता है। हम इन संकेतकों पर ध्यान केंद्रित करेंगे और एक इंस्टॉलर बनाने की कोशिश करेंगे जिसमें समान समस्याओं को हल करने के लिए कम कार्यों की आवश्यकता होती है।


कस्टम समाधान


हम पायथन को प्रोग्रामिंग भाषा के रूप में चुनते हैं, क्योंकि यह हमारे कार्य के लिए उपयुक्त है और क्यूए इंजीनियरों के बीच बहुत लोकप्रिय है।
एंड्रॉइड के साथ बातचीत करने के लिए, हम एडब का उपयोग करेंगे, जो मानक एंड्रॉइड एसडीके का हिस्सा है।
फ़ाइलों को डाउनलोड करने के लिए - Wget।
हमारे मामले में, TeamCity में असेंबली की जाती है।


अब हम कोड लिखने के लिए आगे बढ़ते हैं।


सबसे पहले, हम प्रोजेक्ट में सबप्रोसेस मॉड्यूल को आयात करते हैं, यह आवश्यक है कि वेग और एडीबी कमांड निष्पादित करें।


import subprocess 

Wget के लिए आवश्यक सेटिंग्स जोड़ें।


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

हम बिल्ड नंबर द्वारा एप्लिकेशन इंस्टॉल करेंगे, इसलिए हम इस पैरामीटर के लिए पूछने के लिए स्क्रिप्ट सिखाएंगे।


 number = input(' № : ') 

मान लीजिए कि हमें दो विधानसभाओं को एक साथ स्थापित करने की आवश्यकता है: परीक्षण और मुकाबला। हम उन्हें TeamCity से डाउनलोड करेंगे। ऐसा करने के लिए, हम सर्विस पेज खोलकर और कलाकृतियों में असेंबली का पता लगाकर फाइलों का पूरा रास्ता खोज लेते हैं। पूर्व-असेंबली URL कुछ इस तरह दिखाई देगा:


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

पते में, विधानसभा संख्या के बजाय, आप आईडी देख सकते हैं, उदाहरण के लिए, / 1234: आईडी /। यहां हम आईडी नहीं, बल्कि विधानसभा संख्या का संकेत देंगे।


हम दिए गए विधानसभाओं को डाउनलोड करने के लिए एक फ़ंक्शन लिखेंगे।


 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)) 

सभी आवश्यक कार्य लिखे गए हैं। अब इन्हें लगाया जा सकता है।
इसके अलावा, हम उस मामले के लिए एक हैंडलर जोड़ते हैं जब निर्दिष्ट असेंबली टीमसिटी में नहीं है।


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

स्क्रिप्ट तैयार है। हम इसे इंस्टाल करते हैं, उदाहरण के लिए, इंस्टालर नाम के तहत
उपनाम जोड़ें, उदा। अन्य नाम = 'अजगर ~ / स्क्रिप्ट / इंस्ट्रूमेंट'


निरीक्षण


तो, Crashlytics Beta का उपयोग करके एक असेंबली स्थापित करने के लिए, आपको 9 क्रियाएं करने की आवश्यकता है। तुलना के लिए, हम इस सूचक को स्क्रिप्ट में मापते हैं।


  • हम उदाहरण के साथ स्क्रिप्ट शुरू करते हैं (1) कमांड = एक प्रस्ताव बिल्ड नंबर सेट करने के लिए प्रदर्शित किया जाता है।
  • विधानसभा संख्या निर्धारित करें (2) = पुरानी असेंबली हटा दी जाती हैं; डाउनलोड करें, स्थापित करें और नए लॉन्च करें। आवेदन परीक्षण के लिए तैयार है।

परिणाम


बीटा (1 बिल्ड) - 9 क्रियाएं (पुराने बिल्ड को हटाने सहित नहीं)।
आपकी खुद की स्क्रिप्ट (जितनी भी असेंबली हो) - 2 क्रियाएं।


कस्टम समाधान का एक अतिरिक्त बोनस यह है कि यह तराजू (कई उत्पादों की स्थापना को कई उपकरणों, आदि) से जोड़ता है, और स्वचालित परीक्षण के कार्यों के लिए भी आसानी से स्वीकार करता है।


सूत्रों का कहना है


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


All Articles