आसान बिल्ड कॉन्फ़िगरेशन

हर नए टेस्ट मॉड्यूल में एक कॉन्फ़िगरेशन फ़ाइल होनी चाहिए. इससे बिल्ड सिस्टम को मॉड्यूल के मेटाडेटा, कंपाइल-टाइम डिपेंडेंसी, और पैकेजिंग के निर्देशों के बारे में पता चलता है. Android अब Soong बिल्ड सिस्टम का इस्तेमाल करता है, ताकि टेस्ट कॉन्फ़िगरेशन को आसान बनाया जा सके.

Soong, Blueprint या .bp फ़ाइलों का इस्तेमाल करता है. ये JSON जैसी फ़ाइलें होती हैं. इनमें मॉड्यूल बनाने के लिए, आसान डिक्लेरेटिव ब्यौरे होते हैं. यह फ़ॉर्मैट, पिछली रिलीज़ में इस्तेमाल किए गए Make-based सिस्टम की जगह लेता है. पूरी जानकारी के लिए, Continuous Integration Dashboard पर Soong की रेफ़रंस फ़ाइलें देखें.

कस्टम टेस्टिंग करने या Android Compatibility Test Suite (CTS) का इस्तेमाल करने के लिए, जटिल टेस्ट कॉन्फ़िगरेशन का पालन करें.

उदाहरण

नीचे दी गई एंट्री, इस उदाहरण की ब्लूप्रिंट कॉन्फ़िगरेशन फ़ाइल से ली गई हैं: /platform_testing/tests/example/instrumentation/Android.bp

आपकी सुविधा के लिए, यहां एक स्नैपशॉट शामिल किया गया है:

android_test {
    name: "HelloWorldTests",
    srcs: ["src/**/*.java"],
    sdk_version: "current",
    static_libs: ["androidx.test.runner"],
    certificate: "platform",
    test_suites: ["device-tests"],
}

ध्यान दें कि शुरुआत में android_test एलान से पता चलता है कि यह एक टेस्ट है. android_app को शामिल करने से, यह पता चलेगा कि यह एक बिल्ड पैकेज है.

सेटिंग

इन सेटिंग के बारे में यहां बताया गया है:

    name: "HelloWorldTests",

name सेटिंग तब ज़रूरी होती है, जब android_test मॉड्यूल टाइप तय किया गया हो (ब्लॉक की शुरुआत में). इससे आपके मॉड्यूल को नाम मिलता है.साथ ही, इससे बनने वाले APK का नाम भी यही होता है और इसमें .apk सफ़िक्स जोड़ा जाता है. उदाहरण के लिए, इस मामले में, टेस्ट APK का नाम HelloWorldTests.apk है. इसके अलावा, यह आपके मॉड्यूल के लिए मेक टारगेट का नाम भी तय करता है, ताकि आप अपने टेस्ट मॉड्यूल और उसकी सभी डिपेंडेंसी बनाने के लिए make [options] <HelloWorldTests> का इस्तेमाल कर सकें.

    static_libs: ["androidx.test.runner"],

static_libs सेटिंग, बिल्ड सिस्टम को यह निर्देश देती है कि वह नाम वाले मॉड्यूल के कॉन्टेंट को मौजूदा मॉड्यूल के नतीजे वाले APK में शामिल करे. इसका मतलब है कि नाम वाले हर मॉड्यूल से .jar फ़ाइल जनरेट होने की उम्मीद की जाती है. साथ ही, इसके कॉन्टेंट का इस्तेमाल, कंपाइल टाइम के दौरान क्लासपाथ के रेफ़रंस को हल करने के लिए किया जाएगा. इसके अलावा, इसे नतीजे के तौर पर मिले APK में भी शामिल किया जाएगा.

androidx.test.runner मॉड्यूल, AndroidX Test Runner लाइब्रेरी के लिए पहले से बनाया गया है. इसमें टेस्ट रनर AndroidJUnitRunner शामिल है. AndroidJUnitRunner, JUnit4 टेस्टिंग फ़्रेमवर्क के साथ काम करता है. साथ ही, इसने Android 10 में InstrumentationTestRunner की जगह ले ली है. Android पर ऐप्लिकेशन टेस्ट करना लेख में, Android ऐप्लिकेशन की टेस्टिंग के बारे में ज़्यादा पढ़ें.

अगर आपको नया इंस्ट्रूमेंटेशन मॉड्यूल बनाना है, तो आपको हमेशा androidx.test.runner लाइब्रेरी से शुरुआत करनी चाहिए. प्लैटफ़ॉर्म सोर्स ट्री में, ub-uiautomator, mockito-target, easymock जैसे अन्य काम के टेस्टिंग फ़्रेमवर्क भी शामिल हैं.

    certificate: "platform",

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

अगर आपको सिस्टम सर्वर के बाहर मौजूद अपने कॉम्पोनेंट के लिए इंस्ट्रुमेंटेशन लिखना है, तो उसे ज़्यादातर सामान्य ऐप्लिकेशन APK की तरह पैकेज किया जाता है. हालांकि, इसे सिस्टम इमेज में बनाया जाता है और यह एक खास ऐप्लिकेशन हो सकता है. ऐसे में, हो सकता है कि आपका इंस्ट्रुमेंटेशन, आपके कॉम्पोनेंट के ऐप्लिकेशन पैकेज (मेनिफ़ेस्ट के बारे में नीचे दिया गया सेक्शन देखें) को टारगेट करे. इस मामले में, आपके ऐप्लिकेशन के मेकफ़ाइल में अपनी certificate सेटिंग हो सकती है. साथ ही, आपके इंस्ट्रुमेंटेशन मॉड्यूल को वही सेटिंग बनाए रखनी चाहिए. ऐसा इसलिए है, क्योंकि टेस्ट किए जा रहे ऐप्लिकेशन पर इंस्ट्रुमेंटेशन को टारगेट करने के लिए, आपके टेस्ट APK और ऐप्लिकेशन APK पर एक ही सर्टिफ़िकेट से हस्ताक्षर किए जाने चाहिए.

अन्य मामलों में, आपको इस सेटिंग की ज़रूरत नहीं होती: बिल्ड सिस्टम, बिल्ड वैरिएंट के आधार पर, इसे डिफ़ॉल्ट रूप से शामिल किए गए सर्टिफ़िकेट से साइन करेगा. आम तौर पर, इसे dev-keys कहा जाता है.

    test_suites: ["device-tests"],

test_suites सेटिंग की मदद से, Trade Federation टेस्ट हार्नेस को टेस्ट आसानी से मिल जाता है. यहां अन्य सुइट जोड़े जा सकते हैं, जैसे कि सीटीएस, ताकि इस टेस्ट को शेयर किया जा सके.

${ANDROID_PRODUCT_OUT}/testcases/HelloWorldTests/HelloWorldTests.apk

वैकल्पिक सेटिंग

यहां दी गई सेटिंग के बारे में जानकारी दी गई है. हालांकि, इनका इस्तेमाल करना ज़रूरी नहीं है:

    test_config: "path/to/hello_world_test.xml"

test_config सेटिंग, बिल्ड सिस्टम को यह निर्देश देती है कि आपके टेस्ट टारगेट को किसी खास कॉन्फ़िगरेशन की ज़रूरत है. डिफ़ॉल्ट रूप से, Android.bp के बगल में मौजूद AndroidTest.xml, कॉन्फ़िगरेशन से जुड़ा होता है.

    auto_gen_config: true

auto_gen_config सेटिंग से पता चलता है कि टेस्ट कॉन्फ़िगरेशन अपने-आप बनाना है या नहीं. अगर Android.bp के बगल में AndroidTest.xml मौजूद नहीं है, तो इस एट्रिब्यूट को'सही है' पर सेट करने की ज़रूरत नहीं है.

    require_root: true

require_root सेटिंग, बिल्ड सिस्टम को यह निर्देश देती है कि वह अपने-आप जनरेट होने वाले टेस्ट कॉन्फ़िगरेशन में RootTargetPreparer जोड़े. इससे यह गारंटी मिलती है कि टेस्ट, रूट अनुमतियों के साथ चलेगा.

    test_min_api_level: 29

test_min_api_level सेटिंग, बिल्ड सिस्टम को यह निर्देश देती है कि वह अपने-आप जनरेट होने वाले टेस्ट कॉन्फ़िगरेशन में MinApiLevelModuleController को जोड़े. जब Trade Federation, टेस्ट कॉन्फ़िगरेशन को चलाता है, तो अगर डिवाइस प्रॉपर्टी ro.product.first_api_level < test_min_api_level है, तो टेस्ट को स्किप कर दिया जाएगा.