atest-এর মাধ্যমে প্ল্যাটফর্ম কোড পরীক্ষা করা

Android Studio for Platform (ASfP), atest এবং Soong টেস্ট মডিউলের সাথে ইন্টিগ্রেট করে, যাতে আপনি IDE থেকে আপনার Linux হোস্ট মেশিন, কানেক্ট করা ডিভাইস বা Cuttlefish ভার্চুয়াল ডিভাইসে প্ল্যাটফর্ম টেস্ট রান ও ডিবাগ করতে পারেন।

পূর্বশর্ত

  • আপনার AOSP চেক-আউট ও lunch টার্গেটের সাথে কনফিগার করা ASfP প্রোজেক্ট খুলুন।
  • ডিভাইস টেস্টের জন্য, কোনও ফিজিক্যাল ডিভাইস কানেক্ট করুন অথবা ম্যাচিং বিল্ড রান করছে এমন Cuttlefish ভার্চুয়াল ডিভাইস লঞ্চ করুন।

টেস্ট রান ও ডিবাগ করা

আপনি ASfP-এর বিভিন্ন জায়গা থেকে প্ল্যাটফর্ম টেস্ট ও ডিবাগ সেশন লঞ্চ করতে পারবেন:

  • Android.bp টেস্ট টার্গেট: কোনও Android.bp ফাইল খুলুন এবং যেকোনও টেস্ট মডিউলের (*_test বা *_test_host) পাশে গটারে গিয়ে রান করুন বিকল্পে ক্লিক করুন:
    • রান: সব ধরনের Soong টেস্ট মডিউলের জন্য উপলভ্য (android_test, java_test_host, cc_test, rust_test, python_test, sh_test এবং android_robolectric_test)।
    • ডিবাগ: android_test মডিউলের জন্য উপলভ্য (atest --wait-for-debugger ব্যবহার করে Java ডিবাগারের সাথে অ্যাটাচ করা) এবং C++ বা Rust টেস্ট মডিউল (cc_test, cc_test_host, rust_test এবং rust_test_host, ASfP-এর বিল্ট-ইন LLDB ডিবাগারের অধীনে লঞ্চ করা)।
  • সোর্স ফাইল গটার আইকন: কোনও নির্দিষ্ট টেস্ট চালানোর বা ডিবাগ করার জন্য, টেস্ট ক্লাস বা @Test আপনার সোর্স কোডে থাকা পদ্ধতির পাশে চালান বিকল্পে ক্লিক করুন।
  • ডানদিকের বোতামে ক্লিক করে প্রসঙ্গ মেনু: কোনও টেস্ট ফাইল, ক্লাস, মেথড বা Android.bp মডিউলে ডানদিকের বোতামে ক্লিক করে রান করুন বা ডিবাগ করুন বিকল্প বেছে নিন।
  • বিল্ট-ইন এজেন্ট (Android Studio-তে AI): এজেন্ট টুল উইন্ডোতে, কোড এডিট করার পরে পরিবর্তন যাচাই করতে বিল্ট-ইন এজেন্ট atest টার্গেট রান করতে পারে।
  • ইন্টিগ্রেটেড টার্মিনাল: দেখুন > টুল উইন্ডো > টার্মিনাল বিকল্পে গিয়ে সরাসরি atest কমান্ড রান করান।

স্মার্ট টেস্ট কনফিগারেশন ও ডিবাগিং

আপনি গটার বা প্রসঙ্গ মেনু থেকে কোনও পরীক্ষা লঞ্চ করলে, ASfP আপনার Android.bp মডিউল গ্রাফ ব্যবহার করে একটি Soong Test রান কনফিগারেশন তৈরি ও কনফিগার করে।

Java ও Kotlin টার্গেট android_test ডিবাগ করা

Android.bp-এ কোনও android_test মডিউলের পাশে গটার আইকনে ক্লিক করুন অথবা Java বা Kotlin JUnit ক্লাস বা @Test পদ্ধতির পাশে ক্লিক করুন এবং তারপর '<TestName>' ডিবাগ করুন বিকল্প বেছে নিন। সোর্স ফাইল গটার থেকে, ASfP সবচেয়ে কাছের এনক্লোজিং android_test মডিউল বেছে নেয় যার srcs-এ ফাইলটি অন্তর্ভুক্ত থাকে এবং কনফিগারেশনের নাম দেয় <module>, <module>:<SimpleClass> অথবা <module>:<SimpleClass>#<method>।

ASfP --wait-for-debugger-এর সাথে atest রান করে, মডিউলের AndroidManifest.xml থেকে টার্গেট package অ্যাট্রিবিউট পড়ে, কানেক্ট করা ডিভাইসে সেই প্রসেসের জন্য অপেক্ষা করে এবং Java ডিবাগার অ্যাটাচ করে।

এডিটর গটার থেকে android_test মেথড ডিবাগ করা

LLDB-এর অধীনে cc_test ও rust_test টার্গেট ডিবাগ করা

C++ বা Rust টেস্ট মডিউল (cc_test, cc_test_host, rust_test বা rust_test_host) ডিবাগ করতে, Android.bp গটার আইকনে ক্লিক করুন এবং ডিবাগ করুন '<TestName>' বিকল্প বেছে নিন। ASfP, atest-এর মাধ্যমে এটি চালানোর পরিবর্তে, এর বিল্ট-ইন LLDB ডিবাগারের অধীনে কম্পাইল করা টেস্ট বাইনারি লঞ্চ করে।

Soong টেস্ট রান কনফিগারেশন কনফিগার করা

রান করুন > কনফিগারেশন এডিট করুন বিকল্প খুলুন এবং কীভাবে টেস্ট তৈরি, ডেপ্লয় ও লঞ্চ করা হবে তা কাস্টমাইজ করতে Soong টেস্ট কনফিগারেশন বেছে নিন:

  • মডিউল অটো-কমপ্লিট করা ও Android.bp নেভিগেশন: আপনার প্রোজেক্টে ইন্ডেক্স করা Soong টেস্ট মডিউল থেকে মডিউল ফিল্ড অটো-কমপ্লিট হয়। Android.bp-তে যান বিকল্পে ক্লিক করে Android.bp-এ মডিউলের ডিক্লারেশনে যান।
  • এগুলিতে রান করে: ডিভাইস বা হোস্ট (host_supported: true সহ): ASfP মডিউল নিয়ম ও এর ট্রানজিটিভ defaults চেইন (host_supported, device_supported, enabled, target.android.enabled, ও target.host.enabled) মূল্যায়ন করে:
    • ডুয়াল-টার্গেট টেস্ট (cc_test ও rust_test সহ host_supported: true): ডিভাইস ও হোস্ট রেডিও বোতাম দুটিই উপলভ্য (ডিফল্ট হিসেবে ডিভাইস বেছে নেওয়া হয়)। ডিভাইস ও হোস্ট প্রত্যেকটি তাদের নিজস্ব স্বতন্ত্র LLDB ডিবাগার টেমপ্লেট বজায় রাখে। ডিভাইস ও হোস্ট-এর মধ্যে রান অন বিকল্প পরিবর্তন করলে, প্রতিটি টার্গেটে করা কাস্টমাইজেশন বজায় রেখে রিমোট ডিভাইস lldb-server কনফিগারেশন ও লোকাল হোস্ট বাইনারি কনফিগারেশনের মধ্যে অদল-বদল করা হয়।
    • সিঙ্গেল-টার্গেট টেস্ট: কোনও C++ বা Rust টেস্ট যদি শুধুমাত্র একটি এনভায়রনমেন্টের (যেমন, শুধুমাত্র ডিভাইস cc_test বা শুধুমাত্র হোস্ট cc_test_host বা rust_test_host) জন্য বিল্ড করে, তাহলে ASfP কাজ করে এমন টার্গেট বেছে নেয় এবং কাজ করে না এমন রেডিও বোতামটি একটি ব্যাখ্যা সহ টুলটিপ সহ বন্ধ করে দেয়: "<module> (<ruleType>) doesn't build for the host or device."
  • লঞ্চের আগে টাস্ক (বিল্ড নেটিভ টেস্ট মডিউল এবং atest-এর মাধ্যমে ডিপ্লয় করা): প্রতিটি Soong Test কনফিগারেশনে ডিফল্ট হিসেবে দুটি লঞ্চের আগে টাস্ক থাকে:
    • নেটিভ টেস্ট মডিউল তৈরি করা: LLDB শুরু করার আগে <module>-target (ডিভাইসের জন্য) বা <module>-host (হোস্টের জন্য) তৈরি করে।
    • atest-এর মাধ্যমে ডিপ্লয় করা: ডিভাইসে ডিবাগ করার সময়, atest <module> --collect-tests-only --disable-teardown -it -s <serial> -- --abi <abi> রান করে, যাতে Tradefed টেস্টের নির্ভরতা পুশ করতে পারে এবং LLDB বাইনারি লঞ্চ করার আগে টার্গেট প্রিপেয়ারার এক্সিকিউট করতে পারে। atest কমান্ডের সঠিক প্রিভিউ পেতে, atest-এর মাধ্যমে ডেপ্লয় করুন চিপের উপরে পয়েন্টারটি নিয়ে যান। ডিভাইসে আগে থেকেই ডিপেন্ডেন্সি থাকলে, আরও দ্রুত ইটারেশনের জন্য, atest-এর মাধ্যমে ডিপ্লয় করুন বিকল্পটি সরিয়ে দিন, যাতে ASfP সরাসরি শুধু টেস্ট বাইনারি পুশ করে। আপনি এগুলিতে রান করান: হোস্ট বিকল্প বেছে নিলে, ASfP অটোমেটিক লেটেস্ট ভার্সন ডিপ্লয় করুন বিকল্পটি এড়িয়ে যায়।
  • বিকল্প পরিবর্তন ও ডিবাগার (LLDB বিকল্প কার্ড): ঐচ্ছিক কনফিগারেশন ফিল্ড যোগ করতে বিকল্প পরিবর্তন করুন বিকল্প ব্যবহার করুন:
    • প্রোগ্রাম আর্গুমেন্ট (শুধুমাত্র C++ ও Rust টেস্টের জন্য অপারেটিং সিস্টেম): ডিবাগ করার সময় --gtest_filter বা libtest ফিল্টারের পরে সরাসরি cc_test বা rust_test বাইনারিতে পাস করা অতিরিক্ত আর্গুমেন্ট
    • atest আর্গুমেন্ট (Test): atest-এ অতিরিক্ত ফ্ল্যাগ পাস করা হয় যখন Deploy with atest-এর মাধ্যমে কোনও ডিভাইস প্রস্তুত করার সময় পরীক্ষা চালানো হয়।
    • ডিবাগার (শুধুমাত্র C++ ও Rust টেস্টের জন্য): মডিউল হল cc_test* বা rust_test* টার্গেট। LLDB বিকল্প কার্ড টগল করুন (যেমন এন্ট্রি পয়েন্টে থামুন, সেশন জুড়ে সিম্বল ক্যাশে করুন, চাহিদা মতো সিম্বল লোড করুন অথবা Rust-এর ভিজ্যুয়ালাইজার সহ Rust টেস্টের জন্য), অ্যাক্টিভ ডিভাইস বা হোস্ট টেমপ্লেট রিসেট করতে ডিফল্টে রিসেট করুন বিকল্পে ক্লিক করুন অথবা সিম্বল ডিরেক্টরি, ইনিট, প্রি-রান, পোস্ট-রান বা এক্সিট কমান্ড, এবং লঞ্চ JSON (DAP সেটিংস) বিকল্প পরিবর্তন করুন > ডিবাগার থেকে যোগ করুন।

Soong টেস্ট রান কনফিগারেশনে লঞ্চের আগে টাস্ক, ডিভাইস বা হোস্ট টার্গেট এবং LLDB বিকল্প দেখানো হচ্ছে

পরীক্ষার ফলাফল দেখুন

ASfP-এর রান বা ডিবাগ টুল উইন্ডোতে রিয়েল টাইমে টেস্ট এক্সিকিউশন প্রগ্রেস, পাস বা ফেল স্ট্যাটাস, স্ট্যাক ট্রেস ও ডিভাইস লগ দেখানো হয়।

পরীক্ষা সংক্রান্ত পরামর্শ

  • টার্গেট করা টেস্ট রান করুন: সম্পূর্ণ টেস্ট স্যুট রান না করেই এডিটর গটার থেকে আলাদা আলাদা মেথড টেস্ট করুন।
  • Cuttlefish স্ন্যাপশট ব্যবহার করুন: Cuttlefish ভার্চুয়াল ডিভাইসে ডিভাইস পরীক্ষা চালানোর সময়, রানগুলির মধ্যে একটি পরিষ্কার ডিভাইস স্টেট রিস্টোর করতে স্ন্যাপশট ব্যবহার করুন।
  • Soong বিল্ড লগ পরীক্ষা করুন: কোনও টেস্ট রান করার আগে কম্পাইল করতে না পারলে, কম্পাইলার ডায়াগনস্টিকসের জন্য Soong টুল উইন্ডো চেক করুন।