Atest, कमांड लाइन टूल है. इसकी मदद से, उपयोगकर्ता Android के टेस्ट, स्थानीय तौर पर बिल्ड, इंस्टॉल, और रन कर सकते हैं. इससे, Trade Federation टेस्ट हार्नेस के कमांड लाइन विकल्पों की जानकारी के बिना भी, टेस्ट को बार-बार रन किया जा सकता है. इससे टेस्ट को बार-बार रन करने में लगने वाला समय काफ़ी कम हो जाता है. इस पेज पर, Android के टेस्ट रन करने के लिए Atest का इस्तेमाल करने का तरीका बताया गया है.
Android के लिए टेस्ट लिखने के बारे में सामान्य जानकारी पाने के लिए, Android प्लैटफ़ॉर्म की टेस्टिंग देखें.
Atest के पूरे स्ट्रक्चर के बारे में जानकारी पाने के लिए, Atest के डेवलपर गाइड पर जाएं.
Atest की मदद से, TEST_MAPPING फ़ाइलों में टेस्ट रन करने के बारे में जानकारी पाने के लिए, TEST_MAPPING फ़ाइलों में टेस्ट रन करना लेख पढ़ें.
Atest में कोई सुविधा जोड़ने के लिए, Atest के डेवलपर वर्कफ़्लो को फ़ॉलो करें.
अपना एनवायरमेंट सेट अप करने का तरीका
अपना Atest एनवायरमेंट सेट अप करने के लिए, एनवायरमेंट सेट अप करना, टारगेट चुनना, और कोड बिल्ड करना में दिए गए निर्देशों का पालन करें.
बुनियादी इस्तेमाल
Atest के कमांड इस फ़ॉर्मैट में होते हैं:
atest test-to-run [optional-arguments]
ज़रूरी नहीं वाले आर्ग्युमेंट
यहां दी गई टेबल में, सबसे ज़्यादा इस्तेमाल किए जाने वाले आर्ग्युमेंट की सूची दी गई है. atest --help कमांड की मदद से, पूरी सूची देखी जा सकती है.
| विकल्प | लॉन्ग विकल्प | ब्यौरा |
|---|---|---|
-b |
--build |
टेस्ट टारगेट बिल्ड करता है. (डिफ़ॉल्ट) |
-i |
--install |
डिवाइस पर टेस्ट आर्टफ़ैक्ट (एपीके) इंस्टॉल करता है. (डिफ़ॉल्ट) |
-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 |
टेस्ट को तब तक लूप में रन करता है, जब तक कि ज़्यादा से ज़्यादा बार रन करने की सीमा पूरी न हो जाए. (डिफ़ॉल्ट रूप से 10) |
|
--rerun-until-failure [COUNT=10] |
सभी टेस्ट को तब तक बार-बार रन करता है, जब तक कोई गड़बड़ी न हो या ज़्यादा से ज़्यादा बार रन करने की सीमा पूरी न हो जाए. (डिफ़ॉल्ट रूप से 10) |
|
--retry-any-failure [COUNT=10] |
फ़ेल हुए टेस्ट को तब तक बार-बार रन करता है, जब तक वे पास न हो जाएं या ज़्यादा से ज़्यादा बार रन करने की सीमा पूरी न हो जाए. (डिफ़ॉल्ट रूप से 10 ) |
|
--start-avd |
अपने-आप एवीडी बनाता है और वर्चुअल डिवाइस पर टेस्ट रन करता है. |
|
--acloud-create |
acloud कमांड का इस्तेमाल करके, एवीडी बनाता है. |
|
--[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 FrameworksServicesTestsatest CtsVideoTestCases
मॉड्यूल:क्लास
किसी मॉड्यूल में मौजूद किसी एक क्लास को रन करने के लिए, मॉड्यूल:क्लास का इस्तेमाल करें. मॉड्यूल का मतलब वही है जो
मॉड्यूल का नाम में बताया गया है. क्लास, .java फ़ाइल में मौजूद टेस्ट क्लास का नाम है. यह पूरी तरह क्वालिफ़ाइड क्लास का नाम या बुनियादी नाम हो सकता है.
उदाहरण:
atest CtsVideoTestCases:VideoEncoderDecoderTestatest FrameworksServicesTests:ScreenDecorWindowTestsatest FrameworksServicesTests:com.android.server.wm.ScreenDecorWindowTests
क्लास का नाम
मॉड्यूल का नाम साफ़ तौर पर बताए बिना, किसी एक क्लास को रन करने के लिए, क्लास का नाम इस्तेमाल करें.
उदाहरण:
atest ScreenDecorWindowTestsatest VideoEncoderDecoderTest
Tradefed इंटिग्रेशन टेस्ट
TradeFed (मॉड्यूल के अलावा अन्य) में सीधे इंटिग्रेट किए गए टेस्ट रन करने के लिए, tradefed.sh list configs कमांड के आउटपुट में दिखने वाला नाम डालें. उदाहरण के लिए:
reboot.xml टेस्ट रन करने के लिए:
atest example/reboot
native-benchmark.xml टेस्ट रन करने के लिए:
atest native-benchmark
फ़ाइल का पाथ
Atest, मॉड्यूल पर आधारित टेस्ट और इंटिग्रेशन पर आधारित टेस्ट, दोनों को रन कर सकता है. इसके लिए, टेस्ट फ़ाइल या डायरेक्ट्री का पाथ डालें. यह क्लास की Java फ़ाइल का पाथ तय करके, किसी एक क्लास को भी रन कर सकता है. रेलेटिव और ऐब्सलूट, दोनों पाथ इस्तेमाल किए जा सकते हैं.
कोई मॉड्यूल रन करना
यहां दिए गए उदाहरणों में, फ़ाइल पाथ का इस्तेमाल करके, 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 - एपीके इंस्टॉल करना और टेस्ट रन करना:
atest -it test-to-run - बिल्ड करना और रन करना, लेकिन इंस्टॉल नहीं करना:
atest -bt test-to-run
Atest, किसी टेस्ट को क्लीनअप या टियरडाउन चरण को स्किप करने के लिए मजबूर कर सकता है. कई टेस्ट, जैसे कि
सीटीएस, टेस्ट रन होने के बाद डिवाइस को साफ़ करते हैं. इसलिए, --disable-teardown पैरामीटर के बिना, -t के साथ अपने टेस्ट
को फिर से रन करने की कोशिश करने पर, वह फ़ेल हो जाएगा. टेस्ट क्लीन अप चरण को स्किप करने और बार-बार टेस्ट करने के लिए, -t से पहले -d का इस्तेमाल करें.
atest -d test-to-runatest -t test-to-run
-t
खास तरीके रन करना
Atest, टेस्ट क्लास में मौजूद खास तरीकों को रन कर सकता है. हालांकि, पूरे मॉड्यूल को बिल्ड करना पड़ता है, लेकिन इससे टेस्ट रन करने में लगने वाला समय कम हो जाता है. खास तरीकों को रन करने के लिए, क्लास की पहचान करने के लिए इस्तेमाल किए जाने वाले किसी भी तरीके (मॉड्यूल:क्लास, फ़ाइल पाथ वगैरह) का इस्तेमाल करके, क्लास की पहचान करें और तरीके का नाम जोड़ें:
atest reference-to-class#method1
एक से ज़्यादा तरीके तय करते समय, उन्हें कॉमा से अलग करें:
atest reference-to-class#method1,method2,method3
उदाहरण:
atest com.android.server.wm.ScreenDecorWindowTests#testMultipleDecorsatest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval
यहां दिए गए दो उदाहरणों में, testFlagChange नाम के किसी एक तरीके को रन करने के पसंदीदा तरीके दिखाए गए हैं. सिर्फ़ क्लास के नाम का इस्तेमाल करने के बजाय, इन उदाहरणों का इस्तेमाल करना बेहतर है. इसकी वजह यह है कि मॉड्यूल या Java फ़ाइल की जगह तय करने से, 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 10 बार टेस्ट रन करता है. बार-बार टेस्ट रन करने की संख्या, पॉज़िटिव इंटिजर होनी चाहिए.
atest test-to-run --iterationsatest test-to-run --iterations 5
इन तरीकों से, फ़्लेकी टेस्ट का पता लगाना आसान हो जाता है:
पहला तरीका: सभी टेस्ट को तब तक रन करें, जब तक कोई गड़बड़ी न हो या ज़्यादा से ज़्यादा बार रन करने की सीमा पूरी न हो जाए.
- गड़बड़ी होने पर या (डिफ़ॉल्ट रूप से) 10वीं बार टेस्ट रन होने पर, टेस्ट रन करना बंद करें.
atest test-to-run --rerun-until-failure - गड़बड़ी होने पर या 100वीं बार टेस्ट रन होने पर, टेस्ट रन करना बंद करें.
atest test-to-run --rerun-until-failure 100
दूसरा तरीका: सिर्फ़ फ़ेल हुए टेस्ट को तब तक रन करें, जब तक वे पास न हो जाएं या ज़्यादा से ज़्यादा बार रन करने की सीमा पूरी न हो जाए.
- मान लें कि
test-to-runमें एक से ज़्यादा टेस्ट केस हैं और उनमें से एक टेस्ट फ़ेल हो जाता है. सिर्फ़ फ़ेल हुए टेस्ट को (डिफ़ॉल्ट रूप से) 10 बार या तब तक रन करें, जब तक वह पास न हो जाए.atest test-to-run --retry-any-failure - फ़ेल हुआ टेस्ट पास होने या 100वीं बार रन होने पर, उसे रन करना बंद करें.
atest test-to-run --retry-any-failure 100
एवीडी पर टेस्ट रन करना
Atest, नए बनाए गए एवीडी पर टेस्ट रन कर सकता है. एवीडी और बिल्ड आर्टफ़ैक्ट बनाने के लिए, acloud create रन करें. इसके बाद, अपने टेस्ट रन करने के लिए, यहां दिए गए उदाहरणों का इस्तेमाल करें.
एवीडी शुरू करना और उस पर टेस्ट रन करना:
acloud create --local-instance --local-image && atest test-to-run
टेस्ट रन के हिस्से के तौर पर, एवीडी शुरू करना:
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-valueatest GtsPermissionTestCases -- --module-arg GtsPermissionTestCases:ignore-business-logic-failure:true
किसी रनर टाइप या क्लास को विकल्प पास करना:
atest test-to-run -- --test-arg test-class:option-name:option-valueatest CtsVideoTestCases -- --test-arg com.android.tradefed.testtype.JarHosttest:collect-tests-only:true
सिर्फ़ टेस्ट के लिए इस्तेमाल किए जाने वाले विकल्पों के बारे में ज़्यादा जानकारी पाने के लिए, मॉड्यूल को विकल्प पास करना लेख पढ़ें.