"এটা কোন লাভ নেই! আমি ফ্লটারের ইন্টিগ্রেশন টেস্টের সাথে শেষ থেকে শেষ পরীক্ষা চালাতে পারি না", প্রায় 9 মাস আগে আমাদের একজন গ্রাহক বলেছিল। আমি জিজ্ঞাসা করেছি সমস্যাটি কী ছিল এবং তারা ব্যাখ্যা করেছিল যে তারা লগ ইন করার জন্য Google প্রমাণীকরণ ব্যবহার করছে এবং প্যাকেজ ব্যবহার করেছে কিন্তু লগইন স্ক্রিনের সাথে ইন্টারঅ্যাক্ট করার জন্য Flutter এর ইন্টিগ্রেশন পরীক্ষাগুলি ব্যবহার করা সম্ভব ছিল না। আমি এখনও সমস্যাটি কী তা বুঝতে পারিনি এবং তারপরে এটি ক্লিক করেছে: এই প্লাগইনটি ব্যবহার করে যা ইন্টিগ্রেশন পরীক্ষাগুলি কাজ করে না। google_sign_in নেটিভ UI উপাদানগুলি আমি বেশ হতাশ ছিলাম যে আমি সেই সময়ে একটি সমাধান দিতে পারিনি এবং এটিকে ছেড়ে দিতে হয়েছিল। যাইহোক, আজকে দ্রুত এগিয়ে এবং একটি দুর্দান্ত নতুন সমাধান উপস্থাপন করেছে যার নাম . আমি আপনাকে এটি সম্পর্কে সমস্ত কিছু বলতে যাচ্ছি, তবে আমরা ডুব দেওয়ার আগে আসুন পরীক্ষা চালানো কেন গুরুত্বপূর্ণ, এখন পর্যন্ত আপনার কাছে কী কী সরঞ্জাম উপলব্ধ ছিল, এবং তারপরে কীভাবে প্যাট্রোল শুরু করবেন সে সম্পর্কে কথা বলুন। "প্যাট্রল" LeanCode যাইহোক কেন ফ্লটার অ্যাপ পরীক্ষা করবেন? ডেভেলপমেন্ট টিমগুলি (সিআই) পরিষেবাগুলি ব্যবহার করার অন্যতম প্রধান কারণ তারা তাদের রেপোতে যে কোডটি প্রতিশ্রুতিবদ্ধ করছে তার উপর অবিলম্বে প্রতিক্রিয়া পাওয়া। পরীক্ষাগুলি আপনার পাইপলাইনের অংশ হিসাবে স্বয়ংক্রিয়ভাবে চালানো যেতে পারে যাতে গুণমান এবং স্থিতিশীলতা উভয়েরই একটি স্তর নিশ্চিত করা যায় কারণ বাগ বা সমস্যাগুলি তাড়াতাড়ি ধরা যায় এবং সরাসরি সংশোধন করা যায়। আমরা সবসময় গ্রাহকদের তাদের ওয়ার্কফ্লো সেট আপ করার সময় পরীক্ষা বাস্তবায়নের জন্য উত্সাহিত করি, কিন্তু "আমাদের পরীক্ষা লেখার সময় নেই" শোনাটা অস্বাভাবিক নয়। আশা করি, আপনি সেই নৌকায় নেই, এবং দুর্দান্ত মানের এবং বাগ-মুক্ত অ্যাপ সরবরাহ করতে আপনার অ্যাপ বিকাশ চক্রের অংশ হিসাবে পরীক্ষা ব্যবহার করুন! কন্টিনিউয়াস ইন্টিগ্রেশন কোডম্যাজিক Flutter অ্যাপগুলি পরীক্ষা করার প্রধান স্বয়ংক্রিয় উপায়গুলি কী কী? চারটি প্রধান পরীক্ষার পদ্ধতি রয়েছে যা আপনার CI কর্মপ্রবাহের অংশ হিসাবে স্বয়ংক্রিয় হতে পারে। পরীক্ষা করা নিজেই একটি বিষয়, তাই আমি এটিকে সংক্ষিপ্ত রাখব, তবে এই পরীক্ষা পদ্ধতিগুলির সংমিশ্রণ ব্যবহার করা আপনাকে আপনার অ্যাপের গুণমান উন্নত করতে এবং সমস্যাগুলিকে পরে না করে তাড়াতাড়ি ধরতে সাহায্য করবে৷ প্রথমত, আছে যা সাধারণত আপনার ফাংশন এবং পদ্ধতিগুলিকে বিচ্ছিন্নভাবে পরীক্ষা করার জন্য ব্যবহার করা হয় যাতে সেগুলি প্রত্যাশিতভাবে কাজ করে। আপনার ব্যবসার লজিক কোনো অপ্রত্যাশিত ফলাফল ছাড়াই বিভিন্ন পরিস্থিতিতে কাজ করে তা নিশ্চিত করতে ইউনিট পরীক্ষাগুলিও লেখা যেতে পারে। "ইউনিট টেস্টিং" এর পরে, আমাদের কাছে ফ্লটার রয়েছে যা আপনাকে আপনার UI উপাদানগুলি পরীক্ষা করতে দেয় এবং নিশ্চিত করে যে সেগুলি সঠিকভাবে রেন্ডার করে এবং আপনার প্রত্যাশা অনুযায়ী কাজ করে। "উইজেট পরীক্ষা" তারপরে রয়েছে যেখানে আপনি পরীক্ষা করেন যে আপনার অ্যাপ্লিকেশনের ইউনিট এবং উপাদানগুলি প্রত্যাশিত হিসাবে একসাথে কাজ করে কিনা। "ইন্টিগ্রেশন টেস্টিং" অবশেষে, আছে যেখানে আপনি অ্যাপ্লিকেশনটি এমনভাবে পরীক্ষা করেন যেন এটি একজন প্রকৃত ব্যবহারকারী দ্বারা ব্যবহার করা হচ্ছে। একটি CI ওয়ার্কফ্লোতে, এটি সাধারণত সিমুলেটর বা এমুলেটর ব্যবহার করে স্বয়ংক্রিয়ভাবে আপনার অ্যাপের মাধ্যমে বিভিন্ন পথ পরীক্ষা করার জন্য আপনার কোডে পরিবর্তন করার পরে কোনো সমস্যা নেই তা নিশ্চিত করা হয়। "এন্ড-টু-এন্ড UI টেস্টিং" এখানেই আমি শুরুতে যে গ্রাহকের কথা বলছিলাম তারা আটকে গিয়েছিল কারণ তারা তাদের এন্ড-টু-এন্ড UI পরীক্ষা চালাতে পারেনি কারণ অ্যাপটিতে লগ ইন করা সম্ভব ছিল না। সেই সময়ে তারা একটি 'দেব' সংস্করণ পরীক্ষা করেছিল যা লগ-ইন অংশটিকে বাইপাস করেছিল। যাইহোক, এখন আর প্রয়োজন নেই যে উপলব্ধ! "প্যাট্রোল" প্রবেশ, মঞ্চ বাম, টহল! তাই প্রথমত, পেট্রোল কি? ঠিক আছে, আমি মনে করি ডক্স এটি সর্বোত্তম বলে: Patrol হল LeanCode দ্বারা বিকশিত Flutter-এর জন্য একটি নতুন এবং ওপেন-সোর্স UI পরীক্ষার কাঠামো৷ এটি ফ্লটারের বিদ্যমান টেস্ট টুলিংয়ের উপরে তৈরি করে যা আপনাকে আগে অসম্ভব জিনিসগুলি করতে দেয়। প্যাট্রোল আপনাকে প্ল্যাটফর্মের নেটিভ বৈশিষ্ট্যগুলি অ্যাক্সেস করতে দেয় যেটিতে Flutter অ্যাপ চলছে৷ এখানে সবচেয়ে গুরুত্বপূর্ণ অংশ হল এটি আপনাকে আপনার অ্যাপ যে প্ল্যাটফর্মে চলছে তার অ্যাক্সেস করতে দেয়। ফ্লাটার নেটিভ বৈশিষ্ট্যগুলি এর মানে হল যে আপনি এখন কিছু করতে পারেন যেমন: অনুরোধ খারিজ বা গ্রহণ করার জন্য অনুমতি অনুরোধ ডায়ালগের সাথে ইন্টারঅ্যাক্ট করুন। WebViews এর সাথে ইন্টারঅ্যাক্ট করুন। আপনার অ্যাপকে ছোট করুন এবং বড় করুন। Google বা Apple প্রমাণীকরণের মতো প্রমাণীকরণ প্রবাহের সাথে ইন্টারঅ্যাক্ট করুন। অন্যান্য নেটিভ বৈশিষ্ট্যগুলির সাথে ইন্টারঅ্যাক্ট করুন যেমন নোটিফিকেশন ট্রে খোলা, হোম বোতাম টিপুন, ওয়াই-ফাই সংযোগ চালু বা বন্ধ করা, বা ডিভাইসটিকে অন্ধকার মোডে পরিবর্তন করা ইত্যাদি। ঠিক আছে, এটা চমৎকার শোনাচ্ছে, কিন্তু ধরা কি? ওয়েল, একটি নেই! এবং আরও কী, এটি কেবল নয় ! বিনামূল্যেই মুক্ত উৎস তাছাড়া, প্যাট্রোল সাথে পরিচয় করিয়ে দেয় যা আপনাকে আপনার পরীক্ষা লেখার জন্য আরও সংক্ষিপ্ত বাক্য গঠন দেয়। আপনি তাদের সম্পর্কে আরো পড়তে পারেন . 'কাস্টম ফাইন্ডার'-এর এখানে পেট্রোল ইনস্টল এবং সেট আপ করা Patrol এর সাথে শুরু করার জন্য আপনাকে CLI ইনস্টল করতে হবে, আপনার এ যোগ করতে হবে এবং আপনার iOS এবং Android প্রকল্পগুলিতে কিছু কনফিগারেশন সেট আপ করতে হবে। pubspec.yaml- প্যাট্রোল নির্ভরতা কিছু দুর্দান্ত ডকুমেন্টেশন তৈরি করেছে যা আপনাকে প্রতিটি প্ল্যাটফর্মের প্রক্রিয়ার মধ্য দিয়ে নিয়ে যায় যা আপনি এখানে খুঁজে পেতে পারেন। তাদের ধাপে ধাপে নির্দেশিকা আপনাকে এবং উভয়ের জন্য সেটআপের মাধ্যমে নিয়ে যাবে। LeanCode এখানে iOS Android আপনি যদি কোনো সমস্যায় পড়েন, সাহায্য পাওয়ার সর্বোত্তম জায়গা হল সার্ভারে যেখানে আপনি যোগ দিতে পারেন . প্যাট্রোল কমিউনিটি ডিসকর্ড এখানে আপনি যদি কোনো বাগ খুঁজে পান, তাহলে আপনি একটি সমস্যা উত্থাপন করতে পারেন . এখানে পেট্রোল ইনস্টল এবং সেট আপ করা Patrol এর সাথে শুরু করার জন্য আপনাকে CLI ইনস্টল করতে হবে, আপনার এ যোগ করতে হবে এবং আপনার iOS এবং Android প্রকল্পগুলিতে কিছু কনফিগারেশন সেট আপ করতে হবে। pubspec.yaml- প্যাট্রোল নির্ভরতা কিছু দুর্দান্ত ডকুমেন্টেশন তৈরি করেছে যা আপনাকে প্রতিটি প্ল্যাটফর্মের প্রক্রিয়ার মধ্য দিয়ে নিয়ে যায় যা আপনি এখানে খুঁজে পেতে পারেন। তাদের ধাপে ধাপে নির্দেশিকা আপনাকে এবং উভয়ের জন্য সেটআপের মাধ্যমে নিয়ে যাবে। LeanCode এখানে iOS Android আপনি যদি কোনো সমস্যায় পড়েন, সাহায্য পাওয়ার সর্বোত্তম জায়গা হল সার্ভারে যেখানে আপনি যোগ দিতে পারেন . প্যাট্রোল কমিউনিটি ডিসকর্ড এখানে আপনি যদি কোনো বাগ খুঁজে পান, তাহলে আপনি একটি সমস্যা উত্থাপন করতে পারেন . এখানে প্যাট্রোল দিয়ে নেটিভ ফিচার টেস্ট লেখা এখন আপনি সব সেট আপ করেছেন, আসুন কিছু নেটিভ বৈশিষ্ট্য পরীক্ষা করা শুরু করি। এটি নিজে চেষ্টা করার জন্য, আমি একটি এলিভেটেড বোতাম সহ একটি সাধারণ ফ্লাটার অ্যাপ সেট আপ করেছি যেটিতে ক্লিক করা হলে একটি অ্যালার্ট ডায়ালগ খোলে৷ নেটিভ "ঠিক আছে" বা "বাতিল" ক্লিক করা ডায়ালগটি খারিজ করে দেয়। আবার, আমি পেট্রোলের নিজস্ব ডকুমেন্টেশন ব্যবহার করার সুপারিশ করব যা আপনি খুঁজে পেতে পারেন আপনার প্রথম পরীক্ষা ফাইল যোগ করতে. এখানে তাই আমার পরীক্ষার জন্য, আমি "আমাকে ক্লিক করুন!" লেখা আছে উন্নত বোতামে ক্লিক করতে চেয়েছিলাম। এটি একটি স্ট্যান্ডার্ড ফ্লাটার উইজেট তাই এটি নিম্নলিখিত প্যাট্রোল ফাইন্ডার ব্যবহার করে ট্যাপ করা যেতে পারে: await $('Click me!').tap(); নেটিভ ডায়ালগটি তখন প্রদর্শিত হওয়া উচিত, তাই আমরা এখন একটি নেটিভ UI উপাদানের সাথে ইন্টারঅ্যাক্ট শুরু করতে পারি। সুতরাং আসুন নেটিভ ফাইন্ডার যুক্ত করি যা আমাদের "ঠিক আছে" বোতামটি আলতো চাপতে দেয়: 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')); }, ); } আপনি এখন পরীক্ষাটি চালু করতে কমান্ড ব্যবহার করে আপনার এমুলেটর বা একটি বাস্তব ডিভাইসে সেই পরীক্ষাটি চালাতে সক্ষম হবেন। আমার ইন্টিগ্রেশন টেস্ট ফাইলটিকে বলা হয়েছিল তাই আমি টার্মিনাল থেকে নিম্নরূপ পরীক্ষা শুরু করেছি: "button_test" 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(); ⚠️ মনে রাখবেন যে আপনার অ্যাপটি সম্পূর্ণভাবে বন্ধ করা এবং তারপরে এটি পুনরায় খোলা সম্ভব নয় কারণ এটি করলে পুরো পরীক্ষাটি শেষ হয়ে যাবে এবং তাই এটি ব্যর্থ হবে। টহল পরামর্শ আরও উদাহরণের জন্য। ডকুমেন্টেশন আপনার কোডম্যাজিক ওয়ার্কফ্লোতে প্যাট্রোল ব্যবহার করা আপনার ওয়ার্কফ্লোতে পেট্রোল অন্তর্ভুক্ত করতে, আপনাকে প্রথমে বিল্ড মেশিনে ইনস্টল করতে হবে। এটি মাত্র কয়েক সেকেন্ড সময় নেয় এবং এটি হয়ে গেলে, আপনি আপনার পরীক্ষার স্ক্রিপ্ট চালাতে পারেন। আপনার কনফিগারেশন ফাইলের "স্ক্রিপ্ট" বিভাগে আপনি কীভাবে এই পদক্ষেপগুলি যোগ করবেন তার একটি উদাহরণ নীচে দেওয়া হল। আমি প্রথম স্ক্রিপ্ট পদক্ষেপগুলির মধ্যে একটি হিসাবে Patrol CLI ইনস্টল করার জন্য স্ক্রিপ্টটি চালানোর সুপারিশ করব এবং তারপরে আপনি আপনার প্যাট্রোল পরীক্ষাগুলি তার পরপরই চালাতে পারেন বা অন্য কোনও পরীক্ষার পরেও আপনি আগে চালাতে চাইতে পারেন। প্যাট্রোল CLI codemagic.yaml আপনার প্যাট্রোল পরীক্ষা চালানোর আগে আপনাকে এমুলেটর চালু করতে হবে তাই আমরা এমুলেটর চালু করার জন্য একটি স্ক্রিপ্ট যোগ করব এবং এটি সম্পূর্ণরূপে বুট হওয়ার জন্য অপেক্ষা করব। মনে রাখবেন যে অ্যাপল ভার্চুয়ালাইজেশন ফ্রেমওয়ার্ক নেস্টেড ভার্চুয়ালাইজেশন সমর্থন না করার কারণে অ্যাপল সিলিকন M1 বা M2 মেশিন ব্যবহার করে অ্যান্ড্রয়েড এমুলেটরগুলি উপলব্ধ নয়। অতএব, আমি অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলি পরীক্ষা করার সময় একটি উদাহরণ ব্যবহার করার পরামর্শ দেব। লিনাক্স আপনার এর স্ক্রিপ্ট বিভাগটি এইরকম দেখতে হবে: 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 ... কোডম্যাজিক বিল্ড লগগুলিতে প্যাট্রোল পরীক্ষার ফলাফল দেখানো হচ্ছে প্যাট্রোল পরীক্ষার ফলাফলগুলি ফর্ম্যাটেও পাওয়া যায়, যার মানে সেগুলি Codemagic বিল্ড ওভারভিউ স্ক্রিনে বিল্ড লগগুলিতে প্রদর্শিত হতে পারে৷ আপনাকে জেনারেট করা JUnit XML ফাইলের পাথে সম্পত্তি পাস যোগ করতে হবে। আপনি বাকী ওয়ার্কফ্লো চলতে চান কিনা তা নিয়ন্ত্রণ করতে আপনি একটি বুলিয়ান সহ সম্পত্তি ব্যবহার করতে পারেন। আপনি যদি পরবর্তী বিভাগে বর্ণিত একটি পরীক্ষা ব্যবস্থাপনা সিস্টেমে আপনার ফলাফল আপলোড করতে চান, তাহলে আপনার এটি সেট করা উচিত। JUnit XML test_report ignore_failure সত্যে আপনার স্ক্রিপ্ট কেমন হওয়া উচিত তার একটি উদাহরণ এখানে দেওয়া হল: 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 ... একটি ব্যর্থ পরীক্ষা এই মত কিছু দেখতে পারে: বিল্ড আর্টিফ্যাক্ট হিসাবে প্যাট্রোল পরীক্ষার রিপোর্ট সংগ্রহ করা একটি অতিরিক্ত জিনিস যা আপনি করতে চাইতে পারেন তা হল একটি বিল্ড আর্টিফ্যাক্ট হিসাবে পরীক্ষার রিপোর্ট আউটপুট সংগ্রহ করা যাতে কোনো ত্রুটি ঘটলে আপনি সম্পূর্ণ প্রতিবেদনটি দেখতে পারেন। এটি করার ফলে বাম দিকের "আর্টিফ্যাক্টস" বিভাগে বিল্ড ওভারভিউ স্ক্রিনে একটি জিপ ফাইল হিসাবে প্রতিবেদনটি ডাউনলোডের জন্য উপলব্ধ হবে৷ এটি করার সবচেয়ে সহজ উপায় হল কোডেম্যাজিক আর্টিফ্যাক্টগুলি রপ্তানি করতে যে ডিরেক্টরিটি ব্যবহার করে রিপোর্ট ফাইলগুলিতে রয়েছে সেটিকে কপি করা। নামে একটি বিল্ট-ইন এনভায়রনমেন্ট ভেরিয়েবল রয়েছে যা এই ডিরেক্টরিটিকে উল্লেখ করে যা আপনি আপনার স্ক্রিপ্টে ব্যবহার করতে পারেন। $CM_EXPORT_DIR এটি করার জন্য স্ক্রিপ্ট এই মত হওয়া উচিত: scripts: ... - name: Export Patrol test report script: | cp -r build/app/reports/androidTests/connected $CM_EXPORT_DIR/report ... উপসংহার অবশেষে UI এবং ইন্টিগ্রেশন পরীক্ষা চালানোর সমস্যাকে কাটিয়ে উঠেছে যা নেটিভ বৈশিষ্ট্যগুলি জড়িত। এটি এখন স্থানীয় বৈশিষ্ট্যগুলি পরীক্ষা করা এবং প্রমাণীকরণ প্রবাহ, নেটিভ ডায়ালগগুলির সাথে ইন্টারঅ্যাক্ট করা এবং এমনকি ওয়াইফাই, সেলুলার, ডার্ক মোডের মতো নেটিভ বৈশিষ্ট্যগুলিকে টগল করা এবং এমনকি আপনার অ্যাপকে ছোট করা এবং এটিকে সর্বাধিক করা সম্ভব৷ উপরন্তু, এটি এবং উভয়ই এবং Flutter চালু হওয়ার পর থেকে একটি বাস্তব সমস্যার সমাধান প্রদান করে। আরও কী, আপনার কোডম্যাজিক ওয়ার্কফ্লোতে এটি যোগ করা এবং ব্যবহার করা সহজ। LeanCode যে দুর্দান্ত কাজটি করছে আপনি যদি সমর্থন করতে চান, তাহলে pub.dev-এ Patrol একটি লাইক দিন এবং Patrol GitHub সংগ্রহস্থলকে একটি তারকা দিন . প্যাট্রোল বিনামূল্যে ওপেন সোর্স এখানে এখানে এই নিবন্ধটি কেভিন সুহাজদা লিখেছেন, সমাধান প্রকৌশলের প্রধান . আপনি কেভিন খুঁজে পেতে পারেন , , এবং . কোডম্যাজিক এক্স গিটহাব লিঙ্কডইন এছাড়াও প্রকাশিত. এখানে