টেস্ট চালানো (Atest)

Atest হল একটি কমান্ড লাইন টুল যা ব্যবহারকারীদের স্থানীয়ভাবে Android টেস্ট তৈরি, ইনস্টল এবং রান করতে দেয়, ট্রেড ফেডারেশন টেস্ট হারনেস কমান্ড লাইন বিকল্প সম্পর্কে জ্ঞান ছাড়াই টেস্ট পুনরায় রান করার গতিকে ব্যাপকভাবে বাড়িয়ে দেয়। Android টেস্ট চালানোর জন্য কীভাবে Atest ব্যবহার করতে হয় তা এই পৃষ্ঠা থেকে জানতে পারবেন।

Android-এর জন্য টেস্ট লেখা সংক্রান্ত সাধারণ তথ্যের জন্য, Android প্ল্যাটফর্ম টেস্টিং দেখুন।

Atest-এর সামগ্রিক গঠন সম্পর্কে তথ্য পেতে, Atest ডেভেলপার গাইড দেখুন।

Atest-এর মাধ্যমে TEST_MAPPING ফাইলে টেস্ট রান করার বিষয়ে তথ্যের জন্য, TEST_MAPPING ফাইলে টেস্ট রান করা দেখুন।

Atest-এ কোনও ফিচার যোগ করতে, Atest ডেভেলপার ওয়ার্কফ্লো অনুসরণ করুন।

আপনার পরিবেশ সেট-আপ করা

আপনার Atest এনভায়রনমেন্ট সেট-আপ করতে, এনভায়রনমেন্ট সেট-আপ করা, টার্গেট বেছে নেওয়া এবং কোড তৈরি করা লিঙ্কে দেওয়া নির্দেশাবলী অনুসরণ করুন।

প্রাথমিক ব্যবহার

Atest কমান্ডগুলি নিম্নলিখিত ফর্ম নেয়:

atest test-to-run [optional-arguments]

ঐচ্ছিক আর্গুমেন্ট

নিচে দেওয়া সারণীতে সবচেয়ে বেশি ব্যবহৃত আর্গুমেন্টের তালিকা দেওয়া হল। atest --help-এর মাধ্যমে সম্পূর্ণ তালিকা উপলভ্য।

Option দীর্ঘ বিকল্প বর্ণনা
-b --build টেস্ট টার্গেট তৈরি করে। (ডিফল্ট)
-i --install ডিভাইসে টেস্ট আর্টিফ্যাক্ট (APK) ইনস্টল করে। (ডিফল্ট)
-t --test টেস্ট রান করে। (ডিফল্ট)
-s --serial নির্দিষ্ট ডিভাইসে পরীক্ষা চালায়। একবারে একটি ডিভাইস পরীক্ষা করা যাবে।
-d --disable-teardown পরীক্ষা টিয়ারডাউন ও ক্লিনআপ বন্ধ করে।
--dry-run প্রকৃতপক্ষে কোনও টেস্ট তৈরি, ইনস্টল বা রান না করেই Atest-এর ড্রাই-রান করা।
-m --rebuild-module-info module-info.json ফাইল আবার তৈরি করতে বাধ্য করে।
-w --wait-for-debugger এক্সিকিউট করার আগে ডিবাগার শেষ হওয়ার জন্য অপেক্ষা করে।
-v --verbose DEBUG লেভেল লগিং দেখায়।
--iterations সর্বাধিক ইটারেশন না পৌঁছানো পর্যন্ত লুপ-রান টেস্ট চলতে থাকে। (ডিফল্ট হিসেবে ১০)
--rerun-until-failure [COUNT=10] কোনও ব্যর্থতা না হওয়া পর্যন্ত বা সর্বাধিক পুনরাবৃত্তিতে না পৌঁছানো পর্যন্ত সব টেস্ট আবার রান করে। (ডিফল্ট হিসেবে ১০টি)
--retry-any-failure [COUNT=10] পাস না করা বা সর্বাধিক ইটারেশনে না পৌঁছানো পর্যন্ত ব্যর্থ টেস্ট আবার রান করে। (10 ডিফল্ট হিসেবে)
--start-avd অটোমেটিক একটি AVD তৈরি করে এবং ভার্চুয়াল ডিভাইসে টেস্ট রান করে।
--acloud-create acloud কমান্ড ব্যবহার করে একটি AVD তৈরি করে।
--[CUSTOM_ARGS] টেস্ট রানারদের জন্য কাস্টম আর্গুমেন্ট নির্দিষ্ট করে।
-a --all-abi উপলভ্য সব ডিভাইস আর্কিটেকচারের জন্য টেস্ট রান করে।
--host ডিভাইস ছাড়াই হোস্টে সম্পূর্ণভাবে পরীক্ষা চালায়।
মনে রাখবেন: --host প্রয়োজনীয় ডিভাইস ছাড়া হোস্ট টেস্ট রান করলে তা কাজ করবে না।
--history কালানুক্রমিক ক্রমে পরীক্ষার ফলাফল দেখায়।
--latest-result লেটেস্ট পরীক্ষার ফলাফল প্রিন্ট করে।

-b, -i ও -t সম্পর্কে আরও জানতে, ধাপ নির্দিষ্ট করুন: তৈরি, ইনস্টল বা রান করুন বিভাগ দেখুন।

টেস্ট নির্দিষ্ট করা

টেস্ট চালানোর জন্য, নিম্নলিখিত শনাক্তকারীগুলির মধ্যে একটি ব্যবহার করে এক বা একাধিক টেস্ট নির্দিষ্ট করুন:

  • মডিউলের নাম
  • মডিউল:ক্লাস
  • ক্লাসের নাম
  • Tradefed ইন্টিগ্রেশন টেস্ট
  • ফাইল পাথ
  • প্যাকেজের নাম

একাধিক পরীক্ষার রেফারেন্স স্পেস দিয়ে আলাদা করুন, যেমন:

atest test-identifier-1 test-identifier-2

মডিউলের নাম

সম্পূর্ণ টেস্ট মডিউল রান করাতে, সেটির মডিউলের নাম ব্যবহার করুন। সেই পরীক্ষার Android.mk বা Android.bp ফাইলে LOCAL_MODULE বা LOCAL_PACKAGE_NAME ভেরিয়েবলে নাম যেভাবে দেখানো হয়েছে, সেইভাবে ইনপুট করুন।

উদাহরণ:

atest FrameworksServicesTests
atest CtsVideoTestCases

মডিউল:ক্লাস

মডিউলের মধ্যে একটি ক্লাস রান করাতে, Module:Class ব্যবহার করুন। মডিউল হল মডিউলের নামে বর্ণিত একই জিনিস। Class হল .java ফাইলে থাকা টেস্ট ক্লাসের নাম এবং এটি সম্পূর্ণ কোয়ালিফায়েড ক্লাস নেম বা প্রাথমিক নাম হতে পারে।

উদাহরণ:

atest CtsVideoTestCases:VideoEncoderDecoderTest
atest FrameworksServicesTests:ScreenDecorWindowTests
atest FrameworksServicesTests:com.android.server.wm.ScreenDecorWindowTests

ক্লাসের নাম

স্পষ্টভাবে কোনও মডিউলের নাম উল্লেখ না করে একটি ক্লাস চালাতে, ক্লাসের নাম ব্যবহার করুন।

উদাহরণ:

atest ScreenDecorWindowTests
atest VideoEncoderDecoderTest

Tradefed ইন্টিগ্রেশন টেস্ট

TradeFed (মডিউল নয়) এ সরাসরি ইন্টিগ্রেট করা টেস্ট চালানোর জন্য, tradefed.sh list configs কমান্ডের আউটপুটে যেভাবে দেখানো হয়েছে সেইভাবে নাম ইনপুট করুন। যেমন:

reboot.xml টেস্ট রান করতে:

atest example/reboot

native-benchmark.xml টেস্ট রান করতে:

atest native-benchmark

ফাইল পাথ

Atest, মডিউল-ভিত্তিক টেস্ট এবং ইন্টিগ্রেশন-ভিত্তিক টেস্ট, দুটিই চালানোর সুবিধা দেয়। এর জন্য টেস্ট ফাইল বা ডিরেক্টরির পাথ ইনপুট করতে হয়। এছাড়াও, এটি ক্লাসের জাভা ফাইলের পাথ উল্লেখ করে একটি ক্লাস রান করার সুবিধা দেয়। রিলেটিভ ও অ্যাবসোলিউট পাথ, দু'টিই কাজ করে।

মডিউল রান করা

নিম্নলিখিত উদাহরণে ফাইল পাথ ব্যবহার করে CtsVideoTestCases মডিউল রান করার দুটি উপায় দেখানো হয়েছে।

Android repo-root থেকে রান করুন:

atest cts/tests/video

Android repo-root/cts/tests/video থেকে রান করুন:

    atest .

টেস্ট ক্লাস চালানো

নিচের উদাহরণে দেখানো হয়েছে যে কীভাবে ফাইল পাথ ব্যবহার করে CtsVideoTestCases মডিউলের মধ্যে নির্দিষ্ট ক্লাস রান করাতে হয়।

Android repo-root থেকে:

    atest cts/tests/video/src/android/video/cts/VideoEncoderDecoderTest.java

ইন্টিগ্রেশন টেস্ট রান করুন

Android repo-root থেকে ফাইল পাথ ব্যবহার করে কীভাবে ইন্টিগ্রেশন টেস্ট রান করতে হয় তা নিচের উদাহরণ থেকে দেখুন:

    atest tools/tradefederation/contrib/res/config/example/reboot.xml

প্যাকেজের নাম

Atest-এ প্যাকেজের নাম দিয়ে টেস্ট সার্চ করা যায়।

উদাহরণ:

    atest com.android.server.wm
    atest com.android.uibench.janktests

ধাপগুলি নির্দিষ্ট করুন: তৈরি, ইনস্টল বা রান করা

কোন ধাপ রান করাতে হবে তা নির্দিষ্ট করতে -b, -i ও -t বিকল্প ব্যবহার করুন। আপনি কোনও বিকল্প উল্লেখ না করলে, সব ধাপ রান করে।

  • শুধুমাত্র টার্গেট তৈরি করুন: atest -b test-to-run
  • শুধু টেস্ট চালান: atest -t test-to-run
  • apk ইনস্টল করে পরীক্ষা চালান: atest -it test-to-run
  • তৈরি করুন ও চালান, তবে ইনস্টল করবেন না: atest -bt test-to-run

Atest, কোনও টেস্টকে ক্লিন-আপ বা টিয়ারডাউন ধাপ এড়িয়ে যেতে বাধ্য করতে পারে। অনেক পরীক্ষা, যেমন CTS, পরীক্ষা চালানোর পরে ডিভাইস পরিষ্কার করে, তাই --disable-teardown প্যারামিটার ছাড়া -t-এর মাধ্যমে আপনার পরীক্ষা আবার চালানোর চেষ্টা করলে তা সফল হবে না। পরীক্ষার পরে পরিষ্কার করার ধাপ এড়িয়ে যেতে এবং বারবার পরীক্ষা করতে, -t-এর আগে -d ব্যবহার করুন।

atest -d test-to-run
atest -t test-to-run

নির্দিষ্ট পদ্ধতি রান করুন

Atest, টেস্ট ক্লাসের মধ্যে নির্দিষ্ট পদ্ধতি চালানোর ক্ষেত্রে সহায়তা করে। যদিও সম্পূর্ণ মডিউলটি তৈরি করতে হবে, এটি পরীক্ষা চালানোর জন্য প্রয়োজনীয় সময় কমিয়ে দেয়। নির্দিষ্ট মেথড রান করাতে, ক্লাস শনাক্ত করার জন্য কাজ করে এমন যেকোনও পদ্ধতি ব্যবহার করে ক্লাস শনাক্ত করুন (মডিউল:ক্লাস, ফাইল পাথ ইত্যাদি) এবং মেথডের নাম যোগ করুন:

atest reference-to-class#method1

একাধিক পদ্ধতি উল্লেখ করার সময়, কমা দিয়ে সেগুলি আলাদা করুন:

atest reference-to-class#method1,method2,method3

উদাহরণ:

atest com.android.server.wm.ScreenDecorWindowTests#testMultipleDecors
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval

নিম্নলিখিত দুটি উদাহরণে একটি পদ্ধতি চালানোর জন্য পছন্দের উপায় দেখানো হয়েছে, testFlagChange। এইসব উদাহরণ শুধুমাত্র ক্লাস নেম ব্যবহার করার চেয়ে বেশি পছন্দ করা হয় কারণ মডিউল বা জাভা ফাইলের লোকেশন নির্দিষ্ট করে দিলে, Atest অনেক বেশি দ্রুত টেস্ট খুঁজে পেতে পারে।

মডিউল:ক্লাস ব্যবহার করা হচ্ছে:

atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange

Android repo-root থেকে:

atest frameworks/base/services/tests/wmtests/src/com/android/server/wm/ScreenDecorWindowTests.java#testFlagChange

বিভিন্ন ক্লাস ও মডিউল থেকে একাধিক পদ্ধতি চালানো যেতে পারে:

atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval ScreenDecorWindowTests#testMultipleDecors

একাধিক ক্লাস চালানো

একাধিক ক্লাস রান করাতে, সেগুলিকে স্পেস দিয়ে আলাদা করুন, ঠিক যেভাবে একাধিক টেস্ট রান করানোর জন্য করা হয়। Atest দক্ষতার সাথে ক্লাস তৈরি ও রান করে, তাই মডিউলের মধ্যে ক্লাসের সাবসেট নির্দিষ্ট করলে, পুরো মডিউল রান করার তুলনায় পারফর্ম্যান্স উন্নত হয়।

একই মডিউলে দুটি ক্লাস চালাতে:

atest FrameworksServicesTests:ScreenDecorWindowTests FrameworksServicesTests:DimmerTests

দুটি আলাদা মডিউলে দুটি ক্লাস চালাতে:

atest FrameworksServicesTests:ScreenDecorWindowTests CtsVideoTestCases:VideoEncoderDecoderTest

GTest বাইনারি রান করা

Atest GTest বাইনারি চালাতে পারে। উপলভ্য সব ডিভাইস আর্কিটেকচারের জন্য এইসব টেস্ট রান করতে -a ব্যবহার করুন, এই উদাহরণে যা হল armeabi-v7a (ARM 32-বিট) এবং arm64-v8a (ARM 64-বিট)।

ইনপুট টেস্টের উদাহরণ:

atest -a libinput_tests inputflinger_tests

রান করানোর জন্য নির্দিষ্ট GTest বাইনারি বেছে নিতে, টেস্টের নাম নির্দিষ্ট করতে কোলন (:) ব্যবহার করুন এবং কোনও স্বতন্ত্র পদ্ধতি আরও নির্দিষ্ট করতে হ্যাশট্যাগ (#) ব্যবহার করুন।

যেমন, নিম্নলিখিত পরীক্ষার সংজ্ঞা:

TEST_F(InputDispatcherTest, InjectInputEvent_ValidatesKeyEvents)

সম্পূর্ণ টেস্ট নির্দিষ্ট করতে নিম্নলিখিত কমান্ড রান করুন:

atest inputflinger_tests:InputDispatcherTest

অথবা নিম্নলিখিত বিকল্প ব্যবহার করে আলাদাভাবে পরীক্ষা করুন:

atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents

TEST_MAPPING-এ টেস্ট রান করা

Atest TEST_MAPPING ফাইলে পরীক্ষা চালাতে পারে।

প্রিসাবমিট টেস্ট পরোক্ষভাবে চালানো

বর্তমান ও পেরেন্ট ডিরেক্টরিতে TEST_MAPPING ফাইলে প্রিসাবমিট টেস্ট রান করুন:

atest

/path/to/project-এ TEST_MAPPING ফাইল এবং এর পেরেন্ট ডিরেক্টরিতে প্রিসাবমিট টেস্ট রান করুন:

atest --test-mapping /path/to/project

নির্দিষ্ট টেস্ট গ্রুপ চালানো

উপলভ্য টেস্ট গ্রুপগুলি হল: presubmit(ডিফল্ট), postsubmit, mainline-presubmit এবং all।

বর্তমান ও পেরেন্ট ডিরেক্টরির TEST_MAPPING ফাইলে পোস্ট-সাবমিট টেস্ট রান করুন:

atest :postsubmit

TEST_MAPPING ফাইলে সব গ্রুপ থেকে টেস্ট রান করুন:

atest :all

/path/to/project এবং এর পেরেন্ট ডিরেক্টরিতে TEST_MAPPING ফাইলে পোস্ট-সাবমিট টেস্ট রান করুন:

atest --test-mapping /path/to/project:postsubmit

/path/to/project এবং এর পেরেন্ট ডিরেক্টরিতে TEST_MAPPING ফাইলে মেইনলাইন টেস্ট রান করুন:

atest --test-mapping /path/to/project:mainline-presubmit

সাবডিরেক্টরিতে টেস্ট রান করা

সাধারণত, Atest শুধুমাত্র TEST_MAPPING ফাইলে উপরের দিকে (বর্তমান বা প্রদত্ত ডিরেক্টরি থেকে এর পেরেন্ট ডিরেক্টরি পর্যন্ত) টেস্ট সার্চ করে। এছাড়াও, আপনি যদি সাবডিরেক্টরিতে TEST_MAPPING ফাইলে টেস্ট চালাতে চান, তাহলে --include-subdirsব্যবহার করুন যাতে Atest সেইসব টেস্টও অন্তর্ভুক্ত করতে বাধ্য হয়:

atest --include-subdirs /path/to/project

ইটেরেশনে পরীক্ষা চালানো

--iterations আর্গুমেন্ট পাস করে ইটারেশনে টেস্ট চালান। এটি পাস করুক বা ফেল করুক, সর্বাধিক ইটারেশন না পৌঁছানো পর্যন্ত Atest পরীক্ষাটি পুনরাবৃত্তি করবে।

উদাহরণ:

ডিফল্ট হিসেবে, Atest ১০ বার ইটারেট করে। ইটারেশনের সংখ্যা অবশ্যই একটি ধনাত্মক পূর্ণসংখ্যা হতে হবে।

atest test-to-run --iterations
atest test-to-run --iterations 5

নিম্নলিখিত পদ্ধতিগুলি ফ্ল্যাকি টেস্ট শনাক্ত করা সহজ করে তোলে:

পদ্ধতি ১: কোনও টেস্ট ব্যর্থ না হওয়া পর্যন্ত বা সর্বাধিক ইটারেশন না পৌঁছানো পর্যন্ত সব টেস্ট চালান।

  • কোনও সমস্যা হলে বা ১০ম (ডিফল্ট) রাউন্ডে পৌঁছালে বন্ধ করুন।
    atest test-to-run --rerun-until-failure
    
  • কোনও সমস্যা হলে অথবা ১০০ বার পুনরাবৃত্তি হয়ে গেলে বন্ধ করে দাও।
    atest test-to-run --rerun-until-failure 100
    

পদ্ধতি ২: যতক্ষণ না পাস করা যায় বা সর্বাধিক ইটারেশন না পৌঁছানো যায়, ততক্ষণ পর্যন্ত শুধুমাত্র ব্যর্থ হওয়া পরীক্ষাগুলি চালান।

  • ধরে নিন test-to-run-এর একাধিক টেস্ট কেস আছে এবং তার মধ্যে একটি টেস্টে সমস্যা হয়েছে। শুধু ব্যর্থ হওয়া টেস্টটি ১০ বার (ডিফল্ট) বা যতক্ষণ না টেস্টটি পাস করছে ততক্ষণ পর্যন্ত চালান।
    atest test-to-run --retry-any-failure
    
  • ফেল করা টেস্টটি পাস করলে বা ১০০তম রাউন্ডে পৌঁছালে সেটি চালানো বন্ধ করুন।
    atest test-to-run --retry-any-failure 100
    

AVD-তে টেস্ট রান করা

Atest, নতুন তৈরি করা AVD-তে পরীক্ষা চালাতে পারে। AVD তৈরি করতে ও আর্টিফ্যাক্ট বিল্ড করতে acloud create রান করুন, তারপর আপনার টেস্ট রান করতে নিম্নলিখিত উদাহরণগুলি ব্যবহার করুন।

AVD শুরু করুন এবং এতে টেস্ট চালান:

acloud create --local-instance --local-image && atest test-to-run

টেস্ট রানের অংশ হিসেবে AVD চালু করুন:

atest test-to-run --acloud-create "--local-instance --local-image"

আরও তথ্যের জন্য, acloud create --help রান করুন।

মডিউলে বিকল্প পাস করা

Atest, টেস্ট মডিউলে বিকল্প পাস করতে পারে। আপনার টেস্ট রানে TradeFed কমান্ড লাইন বিকল্প যোগ করতে, নিম্নলিখিত স্ট্রাকচার ব্যবহার করুন এবং নিশ্চিত করুন যে আপনার কাস্টম আর্গুমেন্ট Tradefed কমান্ড লাইন বিকল্প ফর্ম্যাট মেনে চলে।

atest test-to-run -- [CUSTOM_ARGS]

প্রস্তুতকারী বা টেস্ট রানারদের টার্গেট করার জন্য টেস্ট মডিউল বিকল্প পাস করুন যা টেস্ট কনফিগারেশন ফাইলে সংজ্ঞায়িত করা হয়েছে:

atest test-to-run -- --module-arg module-name:option-name:option-value
atest GtsPermissionTestCases -- --module-arg GtsPermissionTestCases:ignore-business-logic-failure:true

রানার টাইপ বা ক্লাসে বিকল্প পাস করা:

atest test-to-run -- --test-arg test-class:option-name:option-value
atest CtsVideoTestCases -- --test-arg com.android.tradefed.testtype.JarHosttest:collect-tests-only:true

শুধুমাত্র-পরীক্ষা বিকল্প সম্পর্কে আরও তথ্যের জন্য, মডিউলে বিকল্প পাস করুন দেখুন।