paint-brush
पेट्रोलिंग और कोडमैजिक के साथ फ़्लटर ऐप्स में मूल सुविधाओं का परीक्षणद्वारा@codemagic
802 रीडिंग
802 रीडिंग

पेट्रोलिंग और कोडमैजिक के साथ फ़्लटर ऐप्स में मूल सुविधाओं का परीक्षण

द्वारा Codemagic CI/CD9m2023/11/06
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

पेट्रोल, लीनकोड का एक नया परीक्षण उपकरण है जो आपको फ़्लटर ऐप्स में मूल प्लेटफ़ॉर्म सुविधाओं का परीक्षण करने देता है। अब आप Google और Apple प्रमाणीकरण प्रवाह, वेब दृश्य, प्रकाश और अंधेरे मोड के बीच स्विच आदि के साथ बातचीत कर सकते हैं। इस लेख में, आप यह भी सीखेंगे कि अपने कोडमैजिक CI/CD वर्कफ़्लो में पेट्रोल का उपयोग कैसे करें।
featured image - पेट्रोलिंग और कोडमैजिक के साथ फ़्लटर ऐप्स में मूल सुविधाओं का परीक्षण
Codemagic CI/CD HackerNoon profile picture
0-item
1-item

"इसका कोई फायदा नहीं है! मैं फ़्लटर के एकीकरण परीक्षणों के साथ एंड-टू-एंड परीक्षण नहीं चला सकता", हमारे ग्राहकों में से एक ने लगभग 9 महीने पहले कहा था। मैंने पूछा कि समस्या क्या थी और उन्होंने बताया कि वे लॉग इन करने के लिए Google प्रमाणीकरण का उपयोग कर रहे थे और google_sign_in पैकेज का उपयोग कर रहे थे, लेकिन लॉगिन स्क्रीन के साथ इंटरैक्ट करने के लिए फ़्लटर के एकीकरण परीक्षणों का उपयोग करना संभव नहीं था। मुझे अभी भी ठीक से समझ नहीं आया कि समस्या क्या है, और फिर यह क्लिक हुआ: यह प्लगइन मूल यूआई घटकों का उपयोग करता है जिसके साथ एकीकरण परीक्षण काम नहीं करते हैं।


मैं काफी निराश था कि मैं उस समय कोई समाधान नहीं पेश कर सका और मुझे इसे वहीं छोड़ना पड़ा। हालाँकि, आज तेजी से आगे बढ़ते हुए एक शानदार नया समाधान सामने आया है जिसे "पैट्रोल" कहा जाता है लीनकोड . मैं आपको इसके बारे में सब कुछ बताने जा रहा हूं, लेकिन इससे पहले कि हम आगे बढ़ें, आइए संक्षेप में बताएं कि परीक्षण चलाना क्यों महत्वपूर्ण है, आपके पास अब तक कौन से उपकरण उपलब्ध थे, और फिर पेट्रोलिंग के साथ शुरुआत कैसे करें, इसके बारे में बात करें।

फिर भी फ़्लटर ऐप्स का परीक्षण क्यों करें?

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

फ़्लटर ऐप्स का परीक्षण करने के मुख्य स्वचालित तरीके क्या हैं?

चार मुख्य परीक्षण विधियाँ हैं जिन्हें आपके सीआई वर्कफ़्लो के हिस्से के रूप में स्वचालित किया जा सकता है। परीक्षण अपने आप में एक विषय है, इसलिए मैं इसे संक्षिप्त रखूंगा, लेकिन इन परीक्षण विधियों के संयोजन का उपयोग करने से आपको अपने ऐप की गुणवत्ता में सुधार करने और समस्याओं को जल्द से जल्द पकड़ने में मदद मिलेगी।


सबसे पहले, "यूनिट परीक्षण" है जिसका उपयोग आमतौर पर आपके कार्यों और विधियों को अलग-अलग परीक्षण करने के लिए किया जाता है ताकि यह सुनिश्चित किया जा सके कि वे अपेक्षा के अनुरूप काम करते हैं। यह सुनिश्चित करने के लिए यूनिट परीक्षण भी लिखे जा सकते हैं कि आपका व्यावसायिक तर्क बिना किसी अप्रत्याशित परिणाम के विभिन्न परिदृश्यों में काम करता है।


इसके बाद, हमारे पास फ़्लटर "विजेट परीक्षण" है जो आपको अपने यूआई घटकों का परीक्षण करने और यह सुनिश्चित करने की अनुमति देता है कि वे सही ढंग से प्रस्तुत होते हैं और आपकी अपेक्षा के अनुरूप काम करते हैं।


फिर "एकीकरण परीक्षण" है, जहां आप परीक्षण करते हैं कि आपके एप्लिकेशन की इकाइयां और घटक अपेक्षा के अनुरूप एक साथ काम करते हैं या नहीं।


अंत में, "एंड-टू-एंड यूआई परीक्षण" है जहां आप एप्लिकेशन का परीक्षण करते हैं जैसे कि यह एक वास्तविक उपयोगकर्ता द्वारा उपयोग किया जा रहा हो। सीआई वर्कफ़्लो में, यह आमतौर पर आपके ऐप के माध्यम से विभिन्न मार्गों का परीक्षण करने के लिए सिमुलेटर या एमुलेटर का उपयोग करके स्वचालित किया जाता है ताकि यह सुनिश्चित किया जा सके कि आपके कोड में परिवर्तन करने के बाद कोई समस्या नहीं है।


यह वह जगह है जहां मैं शुरुआत में जिस ग्राहक के बारे में बात कर रहा था वह फंस गया था क्योंकि वे अपने एंड-टू-एंड यूआई परीक्षण नहीं चला सके क्योंकि ऐप में लॉग इन करना संभव नहीं था। उस समय उन्होंने एक 'डेव' संस्करण का परीक्षण किया जिसने लॉग-इन भाग को बायपास कर दिया।


हालाँकि, अब इसकी आवश्यकता नहीं है क्योंकि "गश्ती" उपलब्ध है!

प्रवेश करें, मंच बाएँ, गश्ती!

तो सबसे पहले, गश्ती क्या है? खैर, मुझे लगता है कि दस्तावेज़ इसे सबसे अच्छा कहते हैं:


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


यहां सबसे महत्वपूर्ण हिस्सा यह है कि यह आपको उस प्लेटफ़ॉर्म की मूल सुविधाओं तक पहुंचने देता है जिस पर आपका फ़्लटर ऐप चल रहा है।


इसका मतलब है कि अब आप ये काम कर सकते हैं:


  1. अनुरोधों को ख़ारिज करने या स्वीकार करने के लिए अनुमति अनुरोध संवादों के साथ इंटरैक्ट करें।
  2. WebViews के साथ इंटरैक्ट करें.
  3. अपने ऐप को छोटा और बड़ा करें.
  4. Google या Apple प्रमाणीकरण जैसे प्रमाणीकरण प्रवाह के साथ सहभागिता करें।
  5. अन्य मूल सुविधाओं के साथ इंटरैक्ट करें जैसे नोटिफिकेशन ट्रे खोलना, होम बटन दबाना, वाई-फाई कनेक्टिविटी को चालू या बंद करना, या डिवाइस को डार्क मोड में बदलना आदि।


ठीक है, यह बहुत अच्छा लगता है, लेकिन इसमें दिक्कत क्या है?


खैर, वहाँ एक भी नहीं है! और इससे भी अधिक, यह न केवल मुफ़्त है बल्कि निःशुल्क भी है खुला स्त्रोत !


इसके अलावा, पैट्रोल 'कस्टम फ़ाइंडर्स' भी पेश करता है जो आपको अपने परीक्षण लिखने के लिए अधिक संक्षिप्त वाक्यविन्यास देता है। आप उनके बारे में और अधिक पढ़ सकते हैं यहाँ .

गश्ती स्थापित करना और स्थापित करना

पेट्रोलिंग शुरू करने के लिए आपको सीएलआई इंस्टॉल करना होगा, अपने पबस्पेक.आईएमएल में पेट्रोल निर्भरता जोड़ना होगा और अपने आईओएस और एंड्रॉइड प्रोजेक्ट्स में कुछ कॉन्फ़िगरेशन सेट करना होगा।


लीनकोड ने कुछ बेहतरीन दस्तावेज़ बनाए हैं यहाँ जो आपको प्रत्येक प्लेटफ़ॉर्म के लिए प्रक्रिया से परिचित कराता है जिसे आप यहां पा सकते हैं। उनकी चरण-दर-चरण मार्गदर्शिका आपको iOS और Android दोनों के लिए सेटअप के बारे में बताएगी।


यदि आपको कोई समस्या आती है, तो सहायता प्राप्त करने के लिए सबसे अच्छी जगह पेट्रोल कम्युनिटी डिस्कॉर्ड सर्वर है, जिसमें आप शामिल हो सकते हैं यहाँ .


यदि आपको कोई बग मिलता है, तो आप एक मुद्दा उठा सकते हैं यहाँ .

गश्ती स्थापित करना और स्थापित करना

पेट्रोलिंग शुरू करने के लिए आपको सीएलआई इंस्टॉल करना होगा, अपने पबस्पेक.आईएमएल में पेट्रोल निर्भरता जोड़ना होगा और अपने आईओएस और एंड्रॉइड प्रोजेक्ट्स में कुछ कॉन्फ़िगरेशन सेट करना होगा।


लीनकोड ने कुछ बेहतरीन दस्तावेज़ बनाए हैं यहाँ जो आपको प्रत्येक प्लेटफ़ॉर्म के लिए प्रक्रिया से परिचित कराता है जिसे आप यहां पा सकते हैं। उनकी चरण-दर-चरण मार्गदर्शिका आपको iOS और Android दोनों के लिए सेटअप के बारे में बताएगी।


यदि आपको कोई समस्या आती है, तो सहायता प्राप्त करने के लिए सबसे अच्छी जगह पेट्रोल कम्युनिटी डिस्कॉर्ड सर्वर है, जिसमें आप शामिल हो सकते हैं यहाँ .


यदि आपको कोई बग मिलता है, तो आप एक मुद्दा उठा सकते हैं यहाँ .

पैट्रोल के साथ देशी फीचर परीक्षण लिखना

अब आप पूरी तरह तैयार हो गए हैं, आइए कुछ मूल सुविधाओं का परीक्षण शुरू करें। इसे स्वयं आज़माने के लिए, मैंने एक ऊंचे बटन के साथ एक साधारण फ़्लटर ऐप सेट किया है जिस पर क्लिक करने पर एक मूल अलर्ट संवाद खुलता है।


"ओके" या "रद्द करें" पर क्लिक करने से संवाद ख़ारिज हो जाता है।


देशी सुविधाओं के साथ ऐप का परीक्षण करें


फिर से, मैं पैट्रोल के स्वयं के दस्तावेज़ का उपयोग करने की अनुशंसा करूंगा जिसे आप पा सकते हैं यहाँ अपनी पहली परीक्षण फ़ाइल जोड़ने के लिए।


इसलिए अपने परीक्षण के लिए, मैं ऊंचे बटन पर क्लिक करना चाहता था जिस पर "मुझे क्लिक करें!" टेक्स्ट है। यह एक मानक फ़्लटर विजेट है इसलिए इसे निम्नलिखित गश्ती खोजक का उपयोग करके टैप किया जा सकता है:


 await $('Click me!').tap();


फिर मूल संवाद प्रदर्शित किया जाना चाहिए, ताकि अब हम मूल यूआई घटक के साथ बातचीत शुरू कर सकें। तो आइए मूल खोजक जोड़ें जो हमें "ओके" बटन पर टैप करने की अनुमति देगा:


 await $('Click me!').tap(); await $.native.tap(Selector(text: 'OK'));


वो आसान था! मैं "रद्द करें" बटन का भी परीक्षण करना चाहता हूं, तो चलिए "मुझे क्लिक करें!" पर टैप करें। फिर से बटन दबाएं और फिर निम्नानुसार कुछ और पंक्तियां जोड़कर मूल संवाद के "रद्द करें" बटन पर टैप करें:


 await $('Click me!').tap(); await $.native.tap(Selector(text: 'OK')); await $('Click me!').tap(); await $.native.tap(Selector(text: 'Cancel'));


आपकी पूर्ण परीक्षण फ़ाइल इस तरह दिखनी चाहिए:


 import 'package:cmpatrol/main.dart'; import 'package:patrol/patrol.dart'; void main() { patrolTest( 'Native tests', nativeAutomation: true, ($) async { await $.pumpWidgetAndSettle(const MyApp()); await $('Click me!').tap(); await $.native.tap(Selector(text: 'OK')); await $('Click me!').tap(); await $.native.tap(Selector(text: 'Cancel')); await $('Click me!').tap(); await $.native.tap(Selector(text: 'NO')); }, ); }


अब आपको परीक्षण लॉन्च करने के लिए कमांड का उपयोग करके उस परीक्षण को अपने एमुलेटर या वास्तविक डिवाइस पर चलाने में सक्षम होना चाहिए। मेरी एकीकरण परीक्षण फ़ाइल को "बटन_टेस्ट" कहा जाता था इसलिए मैंने टर्मिनल से परीक्षण निम्नानुसार शुरू किया:


 patrol test -t integration_test/button_test.dart


आप सीधे टर्मिनल में देखेंगे कि आपके परीक्षण सफल हुए हैं या विफल। यदि परीक्षण विफल हो जाते हैं तो आपको पूर्ण परीक्षण रिपोर्ट का लिंक मिलेगा। वैकल्पिक रूप से, यदि आप मेरे जैसे एंड्रॉइड पर अपने परीक्षण चला रहे हैं तो आप निम्न निर्देशिका में Index.html पर क्लिक करके रिपोर्ट तक पहुंच सकते हैं:


 ./build/app/reports/androidTest/connected 


ग्रैडल इंडेक्स.एचटीएमएल


आप अन्य मूल सुविधाओं के साथ आगे प्रयोग कर सकते हैं जैसे नोटिफिकेशन ट्रे खोलना, वाईफाई अक्षम करना, डार्क मोड सक्षम करना, ऐप को छोटा और अधिकतम करना:


 // minimize app await $.native.pressHome(); await $.native.openNotifications(); await $.native.disableWifi(); await $.native.enableDarkMode(); // maximize app await $.native.openApp();


⚠️ ध्यान दें कि अपने ऐप को पूरी तरह से बंद करना और फिर उसे दोबारा खोलना संभव नहीं है क्योंकि ऐसा करने से पूरा परीक्षण समाप्त हो जाएगा और इसलिए, यह विफल हो जाएगा।


गश्ती दल से परामर्श लें प्रलेखन अधिक उदाहरणों के लिए.

अपने कोडमैजिक वर्कफ़्लोज़ में पेट्रोलिंग का उपयोग करना

पैट्रोल को अपने वर्कफ़्लो में शामिल करने के लिए, आपको सबसे पहले बिल्ड मशीन पर पैट्रोल सीएलआई स्थापित करना होगा। इसमें केवल कुछ सेकंड लगते हैं और एक बार यह पूरा हो जाने पर, आप अपनी परीक्षण स्क्रिप्ट चला सकते हैं। नीचे एक उदाहरण दिया गया है कि आप इन चरणों को अपनी Codemagic.yaml कॉन्फ़िगरेशन फ़ाइल के "स्क्रिप्ट" अनुभाग में कैसे जोड़ेंगे। मैं पहले स्क्रिप्ट चरणों में से एक के रूप में पैट्रोल सीएलआई को स्थापित करने के लिए स्क्रिप्ट चलाने की सिफारिश करूंगा और फिर आप अपने पैट्रोल परीक्षण या तो उसके तुरंत बाद या किसी अन्य परीक्षण के बाद चला सकते हैं जिसे आप पहले से चलाना चाहते हैं।


अपना गश्ती परीक्षण चलाने से पहले आपको एमुलेटर शुरू करने की आवश्यकता होगी इसलिए हम एमुलेटर लॉन्च करने के लिए एक स्क्रिप्ट जोड़ेंगे और इसके पूरी तरह से बूट होने की प्रतीक्षा करेंगे। ध्यान दें कि ऐप्पल वर्चुअलाइजेशन फ्रेमवर्क नेस्टेड वर्चुअलाइजेशन का समर्थन नहीं करने के कारण एंड्रॉइड एमुलेटर ऐप्पल सिलिकॉन एम 1 या एम 2 मशीनों का उपयोग करने वाली मशीनों पर उपलब्ध नहीं हैं। इसलिए, मैं एंड्रॉइड ऐप्स का परीक्षण करते समय लिनक्स इंस्टेंस का उपयोग करने की सलाह दूंगा।


आपके Codemagic.yaml का स्क्रिप्ट अनुभाग कुछ इस तरह दिखना चाहिए:


 scripts: ... - name: Install Patrol CLI script: dart pub global activate patrol_cli - name: Launch Android emulator script: | cd $ANDROID_HOME/tools emulator -avd emulator & adb wait-for-device - name: Run tests with Patrol script: patrol test -t integration_test/your_test.dart ignore_failure: true ...


कोडमैजिक बिल्ड लॉग में गश्ती परीक्षण परिणाम दिखा रहा है

पेट्रोल परीक्षण के परिणाम JUnit XML प्रारूप में भी उपलब्ध हैं, जिसका अर्थ है कि उन्हें कोडमैजिक बिल्ड अवलोकन स्क्रीन पर बिल्ड लॉग में प्रदर्शित किया जा सकता है। आपको बस जनरेट होने वाली JUnit XML फ़ाइल के पथ में test_report प्रॉपर्टी पास जोड़ने की आवश्यकता है। आप बूलियन के साथ इग्नोर_फ़ेल्योर प्रॉपर्टी का उपयोग यह नियंत्रित करने के लिए कर सकते हैं कि आप चाहते हैं कि शेष वर्कफ़्लो चलता रहे या नहीं। यदि आप अपने परिणाम किसी परीक्षण प्रबंधन प्रणाली पर अपलोड करना चाहते हैं जैसा कि अगले भाग में बताया गया है, तो आपको इसे सत्य पर सेट करना चाहिए।


आपकी स्क्रिप्ट कैसी दिखनी चाहिए इसका एक उदाहरण यहां दिया गया है:


 scripts: ... - name: Run tests with Patrol script: | patrol test -t integration_test/your_test.dart test_report: build/app/outputs/androidTest-results/connected/*.xml ignore_failure: true ...


एक असफल परीक्षण कुछ इस तरह दिख सकता है:


कोडमैजिक बिल्ड लॉग में JUnit XML परीक्षण परिणाम विफल

गश्ती परीक्षण रिपोर्ट को बिल्ड आर्टिफैक्ट के रूप में एकत्रित करना

एक अतिरिक्त चीज़ जो आप करना चाहेंगे वह है परीक्षण रिपोर्ट आउटपुट को बिल्ड आर्टिफैक्ट के रूप में इकट्ठा करना ताकि कोई भी त्रुटि होने पर आप पूरी रिपोर्ट देख सकें। ऐसा करने से रिपोर्ट बाईं ओर "कलाकृतियाँ" अनुभाग में बिल्ड अवलोकन स्क्रीन पर ज़िप फ़ाइल के रूप में डाउनलोड के लिए उपलब्ध हो जाएगी। ऐसा करने का सबसे आसान तरीका उस निर्देशिका की प्रतिलिपि बनाना है जिसमें रिपोर्ट फ़ाइलें उस निर्देशिका में हैं जिसका उपयोग कोडमैजिक कलाकृतियों को निर्यात करने के लिए करता है। इसमें $CM_EXPORT_DIR नामक एक अंतर्निहित पर्यावरण चर है जो इस निर्देशिका को संदर्भित करता है जिसे आप अपनी स्क्रिप्ट में उपयोग कर सकते हैं।


ऐसा करने की स्क्रिप्ट इस प्रकार होनी चाहिए:


 scripts: ... - name: Export Patrol test report script: | cp -r build/app/reports/androidTests/connected $CM_EXPORT_DIR/report ...


निष्कर्ष

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




यह लेख सॉल्यूशंस इंजीनियरिंग के प्रमुख केविन सुहाजदा द्वारा लिखा गया है कोडमैजिक . आप केविन को यहां पा सकते हैं एक्स , GitHub , और Linkedin .


यहाँ भी प्रकाशित किया गया है.