खास जानकारी: वाहन संबंधित टेस्ट फ़्रेमवर्क

Spectatio एक ओपन सोर्स टेस्ट फ़्रेमवर्क है. इसे असली और वर्चुअल डिवाइसों पर Android Automotive OS (AAOS) की टेस्टिंग के लिए बनाया गया है. Spectatio, ऑटोमोटिव डिवाइस पर ऐप्लिकेशन की टेस्टिंग के लिए एपीआई उपलब्ध कराता है. यह एक ऐसा समाधान है जिसे बढ़ाया और स्केल किया जा सकता है. इसका इस्तेमाल, AAOS और उसके ऐप्लिकेशन की परफ़ॉर्मेंस और क्षमता की पुष्टि करने के लिए किया जाता है.

हाई-लेवल डिज़ाइन

Spectatio फ़्रेमवर्क को अलग-अलग AAOS यूज़र इंटरफ़ेस (यूआई) के लिए इस्तेमाल किया जा सकता है. साथ ही, इसे बढ़ाया भी जा सकता है. इसका इस्तेमाल, डिवाइस के हार्डवेयर, एम्युलेटर, और वर्चुअलाइज़ किए गए एनवायरमेंट पर AAOS की क्षमता और परफ़ॉर्मेंस की जांच करने के लिए किया जाता है.

इस इमेज में, Spectatio फ़्रेमवर्क के हाई-लेवल डिज़ाइन के बारे में बताया गया है.

Spectatio फ़्रेमवर्क का हाई-लेवल डिज़ाइन

पहली इमेज. Spectatio फ़्रेमवर्क का हाई-लेवल डिज़ाइन.

Spectatio फ़्रेमवर्क, UI Automator पर आधारित है. यह यूज़र इंटरफ़ेस (यूआई) टेस्ट बनाने के लिए एपीआई का एक सेट उपलब्ध कराता है. ये टेस्ट, AAOS पर उपयोगकर्ता और सिस्टम ऐप्लिकेशन के साथ इंटरैक्ट करते हैं. Automotive टेस्ट के लिए, Spectatio फ़्रेमवर्क के उपलब्ध कराए गए एपीआई का इस्तेमाल किया जाता है. इससे ये टेस्ट, टेस्ट किए जा रहे डिवाइस (डीयूटी) से अलग हो जाते हैं. साथ ही, अगर ये एपीआई काम करते हैं, तो अलग-अलग डिवाइसों की जांच करने के लिए इन्हें बढ़ाया जा सकता है.

पहली इमेज में दिखाया गया है कि Spectatio फ़्रेमवर्क को, Dialer, Medicenter, और Settings जैसे रेफ़रंस ऐप्लिकेशन के आधार पर मॉड्यूलर बनाया गया है. इसमें ऐप्लिकेशन के हिसाब से इंटरफ़ेस और हेल्पर का इस्तेमाल किया जाता है. इससे, नए ऐप्लिकेशन के लिए इसे आसानी से बढ़ाया जा सकता है. Spectatio फ़्रेमवर्क, सामान्य स्टैंडर्ड और यूटिलिटी हेल्पर क्लास का फिर से इस्तेमाल करता है. स्टैंडर्ड हेल्पर क्लास, ऐप्लिकेशन के सभी हेल्पर फ़ंक्शन के लिए पैरंट क्लास होती है. यह ऐसे स्टैंडर्ड फ़ंक्शन उपलब्ध कराती है जो डिवाइस के हिसाब से होते हैं या सभी ऐप्लिकेशन पर लागू होते हैं. उपयोगिता हेल्पर क्लास, डिवाइस से फ़ाइलें पढ़ने या लिखने जैसी सुविधाएं उपलब्ध कराती हैं.

भवन निर्माण

Spectatio फ़्रेमवर्क, यूज़र इंटरफ़ेस (यूआई) टेस्ट बनाने के लिए एपीआई का एक सेट उपलब्ध कराता है. इसके लिए, यह ऐप्लिकेशन के हिसाब से इंटरफ़ेस और हेल्पर लागू करता है. साथ ही, मौजूदा स्टैंडर्ड हेल्पर क्लास को बढ़ाता है और यूटिलिटी हेल्पर क्लास इंपोर्ट करता है.

दूसरी इमेज में, Spectatio फ़्रेमवर्क का हाई-लेवल आर्किटेक्चर दिखाया गया है. साथ ही, ऐप्लिकेशन की टेस्टिंग के लिए एपीआई लागू करने में शामिल सभी इकाइयों के बारे में बताया गया है.

Spectatio फ़्रेमवर्क का हाई-लेवल आर्किटेक्चर

दूसरी इमेज. Spectatio फ़्रेमवर्क का हाई-लेवल आर्किटेक्चर.

ऐप्लिकेशन हेल्पर इंटरफ़ेस, ऐप्लिकेशन हेल्पर को लागू करने के लिए ब्लूप्रिंट उपलब्ध कराता है. इसमें कई हेल्पर फ़ंक्शन होते हैं, जो ऐप्लिकेशन की टेस्टिंग के लिए ज़रूरी होते हैं. हर ऐप्लिकेशन का अपना इंटरफ़ेस होता है. जैसे, IAutoSettingHelper और IAutoDialHelper. ज़्यादा जानकारी और इंटरफ़ेस फ़ंक्शन की सूची के लिए, AOSP पर ऐप्लिकेशन हेल्पर इंटरफ़ेस फ़ंक्शन देखें.

स्टैंडर्ड हेल्पर क्लास में स्टैंडर्ड एट्रिब्यूट और फ़ंक्शन होते हैं. ये डिवाइस सेटअप करने के लिए ज़रूरी होते हैं, लेकिन किसी ऐप्लिकेशन के लिए खास नहीं होते. जैसे, pressHome और scroll. स्टैंडर्ड हेल्पर क्लास को AbstractAutoStandardAppHelper.java में तय किया गया है.

फ़्रेमवर्क, यूटिलिटी हेल्पर क्लास का इस्तेमाल करता है. उदाहरण के लिए, AutoJsonUtility.java एक यूटिलिटी क्लास है. यह दी गई डिवाइस JSON कॉन्फ़िगरेशन फ़ाइल को लोड करती है और रनटाइम के दौरान फ़्रेमवर्क कॉन्फ़िगरेशन को अपडेट करती है.

ऐप्लिकेशन हेल्पर को लागू करने वाला मॉड्यूल, Spectatio फ़्रेमवर्क का मुख्य हिस्सा होता है. इसमें ऐप्लिकेशन हेल्पर इंटरफ़ेस में तय किए गए हेल्पर फ़ंक्शन को लागू करने की जानकारी होती है. ये फ़ंक्शन, किसी Automotive डिवाइस पर ऐप्लिकेशन की टेस्टिंग के लिए ज़रूरी होते हैं. हर ऐप्लिकेशन के लिए, लागू करने का तरीका अलग-अलग होता है. जैसे, SettingHelperImpl और DialHelperImpl. इनका इस्तेमाल, ऐप्लिकेशन की जांच करने के लिए Automotive टेस्ट में किया जाता है. ज़्यादा जानकारी और लागू करने के तरीकों की सूची के लिए, AOSP पर ऐप्लिकेशन हेल्पर लागू करने के फ़ंक्शन देखें.

ऑटोमोटिव टेस्ट, ऐप्लिकेशन से जुड़े अलग-अलग ऑपरेशन की जांच करने के लिए, ऐप्लिकेशन हेल्पर के लागू करने से जुड़े फ़ंक्शन का इस्तेमाल करते हैं. ऐप्लिकेशन हेल्पर के लागू करने से जुड़े फ़ंक्शन को ऐक्सेस करने के लिए, HelperAccessor क्लास का इस्तेमाल करें.

यहां दिए गए कोड में, ऑटोमोटिव टेस्ट के सेटअप, क्लीनअप, और एक्ज़ीक्यूशन के बारे में बताया गया है.

@RunWith(AndroidJUnit4.class)
public class AutoApplicationTest {
  static HelperAccessor<IAutoApplicationHelper> autoApplicationHelper =
          new HelperAccessor<>(IAutoApplicationHelper.class);

  public AutoApplicationTest() {
    // constructor
    // Initialize any attributes that are required for the test execution
  }

  @Before
  public void beforeTest() {
    // Initial setup before each test
    // For example - open the app
    autoApplicationHelper.open();
  }

  @After
  public void afterTest() {
    // Cleanup after each test.
    // For example - exit the app
    autoApplicationHelper.exit();
  }

  @Test
  public void testApplicationFeature() {
    // Test
    // For example - Test if app is open
    assertTrue("Application is not open.", autoApplicationHelper.isOpen());
  }
}

पसंद के मुताबिक बनाएं

Spectatio फ़्रेमवर्क, डिवाइस के यूज़र इंटरफ़ेस (यूआई) से अलग होता है. इसलिए, अलग-अलग यूज़र इंटरफ़ेस (यूआई) और हार्डवेयर वाले डिवाइसों की टेस्टिंग के लिए, इसका इस्तेमाल किया जा सकता है. स्केल करने की इस सुविधा को उपलब्ध कराने के लिए, Spectatio रेफ़रंस डिवाइस के आधार पर डिवाइस के डिफ़ॉल्ट कॉन्फ़िगरेशन का इस्तेमाल करता है. नॉन-डिफ़ॉल्ट डिवाइस कॉन्फ़िगरेशन के लिए, फ़्रेमवर्क रनटाइम के दौरान JSON कॉन्फ़िगरेशन फ़ाइल का इस्तेमाल करता है. इससे डिवाइस के लिए यूज़र इंटरफ़ेस (यूआई) में ज़रूरी बदलाव किए जा सकते हैं. JSON कॉन्फ़िगरेशन फ़ाइल में TEXT, DESCRIPTION, और RESOURCE_ID जैसे यूज़र इंटरफ़ेस (यूआई) एलिमेंट के साथ-साथ path सेटिंग भी शामिल होती हैं. इसमें सिर्फ़ डीयूटी के यूज़र इंटरफ़ेस में हुए बदलावों के बारे में जानकारी होनी चाहिए. यूज़र इंटरफ़ेस (यूआई) के बाकी एलिमेंट, फ़्रेमवर्क में दी गई डिफ़ॉल्ट कॉन्फ़िगरेशन वैल्यू का इस्तेमाल करते हैं.

डिवाइस के डिफ़ॉल्ट कॉन्फ़िगरेशन

यहां दी गई JSON कॉन्फ़िगरेशन फ़ाइल के सैंपल में, डिवाइस के उपलब्ध कॉन्फ़िगरेशन और उनकी डिफ़ॉल्ट वैल्यू दिखाई गई हैं.

JSON कॉन्फ़िगरेशन फ़ाइल का सैंपल देखने के लिए, यहां क्लिक करें

    {
        "SETTINGS": {
                "APPLICATION_CONFIG": {
                        "SETTINGS_TITLE_TEXT": "Settings",
                        "SETTINGS_PACKAGE": "com.android.car.settings",
                        "SETTINGS_RRO_PACKAGE": "com.android.car.settings.googlecarui.rro",
                        "OPEN_SETTINGS_COMMAND": "am start -a android.settings.SETTINGS",
                        "OPEN_QUICK_SETTINGS_COMMAND": "am start -n com.android.car.settings/com.android.car.settings.common.CarSettingActivity"
                },
                "QUICK_SETTINGS": {
                        "OPEN_MORE_SETTINGS": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "toolbar_menu_item_1",
                                "PACKAGE": "com.android.car.settings"
                        },
                        "NIGHT_MODE": {
                                "TYPE": "TEXT",
                                "VALUE": "Night mode"
                        }
                },
                "DISPLAY": {
                        "PATH": "Settings > Display",
                        "OPTIONS": [
                                "Brightness level"
                        ],
                        "BRIGHTNESS_LEVEL": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "seekbar",
                                "PACKAGE": "com.android.car.settings"
                        }
                },
                "SOUND": {
                        "PATH": "Settings > Sound",
                        "OPTIONS": [
                                "Media volume",
                                "Alarm volume"
                        ]
                },
                "NETWORK_AND_INTERNET": {
                        "PATH": "Settings > Network & internet",
                        "OPTIONS": [
                        ],
                        "TOGGLE_WIFI": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "master_switch",
                                "PACKAGE": "com.android.car.settings"
                        }
                },
                "BLUETOOTH": {
                        "PATH": "Settings > Bluetooth",
                        "OPTIONS": [
                        ],
                        "TOGGLE_BLUETOOTH": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "car_ui_toolbar_menu_item_switch",
                                "PACKAGE": "com.android.car.settings"
                        }
                },
                "APPS_AND_NOTIFICATIONS": {
                        "PATH": "Settings > Apps & notifications",
                        "OPTIONS": [
                        ],
                        "SHOW_ALL_APPS": {
                                "TYPE": "TEXT",
                                "VALUE": "Show all apps"
                        },
                        "ENABLE_DISABLE_BUTTON": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "car_ui_toolbar_menu_item_text",
                                "PACKAGE": "com.android.car.settings"
                        },
                        "DISABLE_BUTTON_TEXT": {
                                "TYPE": "TEXT",
                                "VALUE": "Disable"
                        },
                        "ENABLE_BUTTON_TEXT": {
                                "TYPE": "TEXT",
                                "VALUE": "Enable"
                        },
                        "DISABLE_APP_BUTTON": {
                                "TYPE": "TEXT",
                                "VALUE": "DISABLE APP"
                        },
                        "FORCE_STOP_BUTTON": {
                                "TYPE": "TEXT",
                                "VALUE": "Force stop"
                        },
                        "OK_BUTTON": {
                                "TYPE": "TEXT",
                                "VALUE": "OK"
                        },
                        "PERMISSIONS_MENU": {
                                "TYPE": "TEXT",
                                "VALUE": "Permissions"
                        },
                        "ALLOW_BUTTON": {
                                "TYPE": "TEXT",
                                "VALUE": "Allow"
                        },
                        "DENY_BUTTON": {
                                "TYPE": "TEXT",
                                "VALUE": "Deny"
                        },
                        "DENY_ANYWAY_BUTTON": {
                                "TYPE": "TEXT",
                                "VALUE": "Deny anyway"
                        }
                },
                "DATE_AND_TIME": {
                        "PATH": "Settings > Date & time",
                        "OPTIONS": [
                                "Automatic date & time",
                "Automatic time zone"
                        ],
                        "AUTOMATIC_DATE_AND_TIME": {
                                "TYPE": "TEXT",
                                "VALUE": "Automatic date & time"
                        },
                        "AUTOMATIC_TIME_ZONE": {
                                "TYPE": "TEXT",
                                "VALUE": "Automatic time zone"
                        },
                        "SET_DATE": {
                                "TYPE": "TEXT",
                                "VALUE": "Set date"
                        },
                        "SET_TIME": {
                                "TYPE": "TEXT",
                                "VALUE": "Set time"
                        },
                        "SELECT_TIME_ZONE": {
                                "TYPE": "TEXT",
                                "VALUE": "Select time zone"
                        },
                        "USE_24_HOUR_FORMAT": {
                                "TYPE": "TEXT",
                                "VALUE": "Use 24-hour format"
                        },
                        "OK_BUTTON": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "toolbar_menu_item_0",
                                "PACKAGE": "com.android.car.settings"
                        },
                        "NUMBER_PICKER_WIDGET": {
                                "TYPE": "CLASS",
                                "VALUE": "android.widget.NumberPicker"
                        },
                        "EDIT_TEXT_WIDGET": {
                                "TYPE": "CLASS",
                                "VALUE": "android.widget.EditText"
                        }
                },
                "USERS": {
                        "PATH": "Settings > Users",
                        "OPTIONS": [
                                "Guest"
                        ]
                },
                "ACCOUNTS": {
                        "PATH": "Settings > Accounts",
                        "OPTIONS": [
                                "Automatically sync data"
                        ],
                        "ADD_ACCOUNT": {
                                "TYPE": "TEXT",
                                "VALUE": "ADD ACCOUNT"
                        },
                        "ADD_GOOGLE_ACCOUNT": {
                                "TYPE": "TEXT",
                                "VALUE": "Google"
                        },
                        "SIGN_IN_ON_CAR_SCREEN": {
                                "TYPE": "TEXT",
                                "VALUE": "Sign in on car screen"
                        },
                        "GOOGLE_SIGN_IN_SCREEN": {
                                "TYPE": "TEXT",
                                "VALUE": "Sign in to your Google Account"
                        },
                        "ENTER_EMAIL": {
                                "TYPE": "CLASS",
                                "VALUE": "android.widget.EditText"
                        },
                        "ENTER_PASSWORD": {
                                "TYPE": "CLASS",
                                "VALUE": "android.widget.EditText"
                        },
                        "NEXT_BUTTON": {
                                "TYPE": "TEXT",
                                "VALUE": "Next"
                        },
                        "DONE_BUTTON": {
                                "TYPE": "TEXT",
                                "VALUE": "Done"
                        },
                        "REMOVE_BUTTON": {
                                "TYPE": "TEXT",
                                "VALUE": "Remove"
                        },
                        "REMOVE_ACCOUNT_BUTTON": {
                                "TYPE": "TEXT",
                                "VALUE": "Remove Account"
                        }
                },
                "SYSTEM": {
                        "PATH": "Settings > System",
                        "OPTIONS": [
                                "About", "Legal information"
                        ],
                        "ABOUT_MENU": {
                                "TYPE": "TEXT",
                                "VALUE": "About"
                        },
                        "RESET_OPTIONS_MENU": {
                                "TYPE": "TEXT",
                                "VALUE": "Reset options"
                        },
                        "LANGUAGES_AND_INPUT_MENU": {
                                "TYPE": "TEXT",
                                "VALUE": "Languages & input"
                        },
                        "DEVICE_MODEL": {
                                "TYPE": "TEXT",
                                "VALUE": "Model"
                        },
                        "ANDROID_VERSION": {
                                "TYPE": "TEXT",
                                "VALUE": "Android version"
                        },
                        "ANDROID_SECURITY_PATCH_LEVEL": {
                                "TYPE": "TEXT",
                                "VALUE": "Android security patch level"
                        },
                        "KERNEL_VERSION": {
                                "TYPE": "TEXT",
                                "VALUE": "Kernel version"
                        },
                        "BUILD_NUMBER": {
                                "TYPE": "TEXT",
                                "VALUE": "Build number"
                        },
                        "RECYCLER_VIEW_WIDGET": {
                                "TYPE": "CLASS",
                                "VALUE": "androidx.recyclerview.widget.RecyclerView"
                        },
                        "RESET_NETWORK": {
                                "TYPE": "TEXT",
                                "VALUE": "Reset network"
                        },
                        "RESET_SETTINGS": {
                                "TYPE": "TEXT",
                                "VALUE": "RESET SETTINGS"
                        },
                        "RESET_APP_PREFERENCES": {
                                "TYPE": "TEXT",
                                "VALUE": "Reset app preferences"
                        },
                        "RESET_APPS": {
                                "TYPE": "TEXT",
                                "VALUE": "RESET APPS"
                        },
                        "LANGUAGES_MENU": {
                                "TYPE": "TEXT",
                                "VALUE": "Languages"
                        },
                        "LANGUAGES_MENU_IN_SELECTED_LANGUAGE": {
                                "TYPE": "TEXT",
                                "VALUE": "Idiomas"
                        }
                },
                "SECURITY": {
                        "PATH": "Settings > Security",
                        "OPTIONS": [
                        ],
                        "TITLE": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "car_ui_toolbar_title",
                                "PACKAGE": "com.android.car.settings.googlecarui.rro"
                        },
                        "CHOOSE_LOCK_TYPE": {
                                "TYPE": "TEXT",
                                "VALUE": "Choose a lock type"
                        },
                        "LOCK_TYPE_PASSWORD": {
                                "TYPE": "TEXT",
                                "VALUE": "Password"
                        },
                        "LOCK_TYPE_PIN": {
                                "TYPE": "TEXT",
                                "VALUE": "PIN"
                        },
                        "LOCK_TYPE_NONE": {
                                "TYPE": "TEXT",
                                "VALUE": "None"
                        },
                        "CONTINUE_BUTTON": {
                                "TYPE": "TEXT",
                                "VALUE": "Continue"
                        },
                        "CONFIRM_BUTTON": {
                                "TYPE": "TEXT",
                                "VALUE": "Confirm"
                        },
                        "ENTER_PASSWORD": {
                                "TYPE": "CLASS",
                                "VALUE": "android.widget.EditText"
                        },
                        "PIN_PAD": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "pin_pad",
                                "PACKAGE": "com.android.car.settings"
                        },
                        "ENTER_PIN_BUTTON": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "key_enter",
                                "PACKAGE": "com.android.car.settings"
                        },
                        "REMOVE_BUTTON": {
                                "TYPE": "TEXT",
                                "VALUE": "Remove"
                        }
                }
        },
        "PHONE": {
                "APPLICATION_CONFIG": {
                        "DIAL_PACKAGE": "com.android.car.dialer",
                        "PHONE_ACTIVITY": "com.android.car.dialer/.ui.TelecomActivity",
                        "OPEN_DIAL_PAD_COMMAND": "am start -a android.intent.action.DIAL"
                },
                "IN_CALL_VIEW": {
                        "DIALED_CONTACT_TITLE": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "user_profile_title",
                                "PACKAGE": "com.android.car.dialer"
                        },
                        "DIALED_CONTACT_NUMBER": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "user_profile_phone_number",
                                "PACKAGE": "com.android.car.dialer"
                        },
                        "END_CALL": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "end_call_button",
                                "PACKAGE": "com.android.car.dialer"
                        },
                        "MUTE_CALL": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "mute_button",
                                "PACKAGE": "com.android.car.dialer"
                        },
                        "SWITCH_TO_DIAL_PAD": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "toggle_dialpad_button",
                                "PACKAGE": "com.android.car.dialer"
                        },
                        "CHANGE_VOICE_CHANNEL": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "voice_channel_view",
                                "PACKAGE": "com.android.car.dialer"
                        },
                        "VOICE_CHANNEL_CAR": {
                                "TYPE": "TEXT",
                                "VALUE": "Car speakers"
                        },
                        "VOICE_CHANNEL_PHONE": {
                                "TYPE": "TEXT",
                                "VALUE": "Phone"
                        }
                },
                "DIAL_PAD_VIEW": {
                        "DIAL_PAD_MENU": {
                                "TYPE": "TEXT",
                                "VALUE": "Dial Pad"
                        },
                        "DIAL_PAD_FRAGMENT": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "dialpad_fragment",
                                "PACKAGE": "com.android.car.dialer"
                        },
                        "DIALED_NUMBER": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "title",
                                "PACKAGE": "com.android.car.dialer"
                        },
                        "MAKE_CALL": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "call_button",
                                "PACKAGE": "com.android.car.dialer"
                        },
                        "DELETE_NUMBER": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "delete_button",
                                "PACKAGE": "com.android.car.dialer"
                        }
                },
                "CONTACTS_VIEW": {
                        "CONTACTS_MENU": {
                                "TYPE": "TEXT",
                                "VALUE": "Contacts"
                        },
                        "CONTACT_INFO": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "call_action_id",
                                "PACKAGE": "com.android.car.dialer"
                        },
                        "CONTACT_NAME": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "title",
                                "PACKAGE": "com.android.car.dialer"
                        },
                        "CONTACT_DETAIL": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "show_contact_detail_id",
                                "PACKAGE": "com.android.car.dialer"
                        },
                        "ADD_CONTACT_TO_FAVORITE": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "contact_details_favorite_button",
                                "PACKAGE": "com.android.car.dialer"
                        },
                        "SEARCH_CONTACT": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "menu_item_search",
                                "PACKAGE": "com.android.car.dialer"
                        },
                        "CONTACT_SEARCH_BAR": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "car_ui_toolbar_search_bar",
                                "PACKAGE": "com.android.car.dialer"
                        },
                        "SEARCH_RESULT": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "contact_name",
                                "PACKAGE": "com.android.car.dialer"
                        },
                        "CONTACT_SETTINGS": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "menu_item_setting",
                                "PACKAGE": "com.android.car.dialer"
                        },
                        "CONTACT_ORDER": {
                                "TYPE": "TEXT",
                                "VALUE": "Contact order"
                        },
                        "SORT_BY_FIRST_NAME": {
                                "TYPE": "TEXT",
                                "VALUE": "First name"
                        },
                        "SORT_BY_LAST_NAME": {
                                "TYPE": "TEXT",
                                "VALUE": "Last Name"
                        },
                        "CONTACT_TYPE_WORK": {
                                "TYPE": "TEXT",
                                "VALUE": "Work"
                        },
                        "CONTACT_TYPE_MOBILE": {
                                "TYPE": "TEXT",
                                "VALUE": "Mobile"
                        },
                        "CONTACT_TYPE_HOME": {
                                "TYPE": "TEXT",
                                "VALUE": "Home"
                        }
                },
                "CALL_HISTORY_VIEW": {
                        "CALL_HISTORY_MENU": {
                                "TYPE": "TEXT",
                                "VALUE": "Recents"
                        },
                        "CALL_HISTORY_INFO": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "call_action_id",
                                "PACKAGE": "com.android.car.dialer"
                        }
                },
                "FAVORITES_VIEW": {
                        "FAVORITES_MENU": {
                                "TYPE": "TEXT",
                                "VALUE": "Favorites"
                        }
                }
        },
        "NOTIFICATIONS": {
                "APPLICATION_CONFIG": {
                        "OPEN_NOTIFICATIONS_COMMAND": "service call statusbar 1"
                },
                "EXPANDED_NOTIFICATIONS_SCREEN": {
                        "NOTIFICATION_VIEW": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "notification_view",
                                "PACKAGE": "com.android.systemui"
                        },
                        "CLEAR_ALL_BUTTON": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "clear_all_button",
                                "PACKAGE": "com.android.systemui"
                        },
                        "STATUS_BAR": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "car_top_navigation_bar_container",
                                "PACKAGE": "com.android.systemui"
                        },
                        "APP_ICON": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "app_icon",
                                "PACKAGE": "com.android.systemui"
                        },
                        "APP_NAME": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "header_text",
                                "PACKAGE": "com.android.systemui"
                        },
                        "NOTIFICATION_TITLE": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "notification_body_title",
                                "PACKAGE": "com.android.systemui"
                        },
                        "NOTIFICATION_BODY": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "notification_body_content",
                                "PACKAGE": "com.android.systemui"
                        },
                        "CARD_VIEW": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "card_view",
                                "PACKAGE": "com.android.systemui"
                        }
                }
        },
        "MEDIA_CENTER": {
                "APPLICATION_CONFIG": {
                        "MEDIA_CENTER_PACKAGE": "com.android.car.media",
                        "MEDIA_ACTIVITY": "com.android.bluetooth/com.android.bluetooth.avrcpcontroller.BluetoothMediaBrowserService"
                },
                "MEDIA_CENTER_SCREEN": {
                        "PLAY_PAUSE_BUTTON": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "play_pause_stop",
                                "PACKAGE": "com.android.car.media"
                        },
                        "NEXT_BUTTON": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "skip_next",
                                "PACKAGE": "com.android.car.media"
                        },
                        "PREVIOUS_BUTTON": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "skip_prev",
                                "PACKAGE": "com.android.car.media"
                        },
                        "SHUFFLE_BUTTON": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "overflow_on",
                                "PACKAGE": "com.android.car.media"
                        },
                        "PLAY_QUEUE_BUTTON": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "play_queue",
                                "PACKAGE": "com.android.car.media"
                        },
                        "MINIMIZED_MEDIA_CONTROLS": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "minimized_playback_controls",
                                "PACKAGE": "com.android.car.media"
                        },
                        "TRACK_NAME": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "title",
                                "PACKAGE": "com.android.car.media"
                        },
                        "TRACK_NAME_MINIMIZED_CONTROL": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "minimized_control_bar_title",
                                "PACKAGE": "com.android.car.media"
                        },
                        "BACK_BUTTON": {
                                "TYPE": "DESCRIPTION",
                                "VALUE": "Back"
                        }
                },
                "MEDIA_CENTER_ON_HOME_SCREEN": {
                        "PLAY_PAUSE_BUTTON": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "play_pause_stop",
                                "PACKAGE": "com.android.car.carlauncher"
                        },
                        "NEXT_BUTTON": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "skip_next",
                                "PACKAGE": "com.android.car.carlauncher"
                        },
                        "PREVIOUS_BUTTON": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "skip_prev",
                                "PACKAGE": "com.android.car.carlauncher"
                        },
                        "TRACK_NAME": {
                                "TYPE": "RESOURCE_ID",
                                "VALUE": "title",
                                "PACKAGE": "com.android.car.carlauncher"
                        }
                }
        }
}
  

डिवाइस के अन्य कॉन्फ़िगरेशन

यहां दिए गए कोड के सैंपल में, JSON कॉन्फ़िगरेशन फ़ाइल का उदाहरण दिखाया गया है. इसमें, डिफ़ॉल्ट सेटिंग को DUT पर मौजूद सेटिंग से बदला गया है. इस उदाहरण में:

  • रेफ़रंस डिवाइसों पर इंटरनेट सेटिंग का नाम नेटवर्क और इंटरनेट है. वहीं, DUT पर इसका नाम कनेक्टिविटी है.

  • तारीख और समय की सेटिंग, रेफ़रंस डिवाइसों के लिए सेटिंग > तारीख और समय पर और DUT के लिए सेटिंग > सिस्टम > तारीख और समय पर उपलब्ध हैं.

// Default configuration file
{
    ....
    "SECURITY_SETTINGS_SCROLL_ELEMENT": {
      "TYPE": "RESOURCE_ID",
      "VALUE": "fragment_container",
    },
    ....
}

// JSON configuration file for non-reference device
{
    ....
    "SECURITY_SETTINGS_SCROLL_ELEMENT": {
      "TYPE": "RESOURCE_ID",
      "VALUE": "car_ui_recycler_view"
    },
    ....
}

JSON कॉन्फ़िगरेशन फ़ाइल तैयार होने के बाद, इसे रनटाइम के दौरान उपलब्ध कराया जाता है. इसे यहां दिए गए कोड ब्लॉक में दिखाया गया है:

# Push The JSON configuration file to the device
adb -s DEVICE-SERIAL push PATH-OF-JSON-FILE /data/local/tmp/runtimeSpectatioConfig.json

इस कमांड में:

  • DEVICE-SERIAL: DUT का सीरियल आईडी. अगर होस्ट से सिर्फ़ एक डिवाइस कनेक्ट है, तो इस पैरामीटर की ज़रूरत नहीं होती.

  • PATH-TO-JSON-FILE: होस्ट मशीन पर JSON फ़ाइल का पाथ.

कॉन्फ़िगरेशन का फ़ॉर्मैट

कॉन्फ़िगरेशन में पांच टॉप-लेवल ऑब्जेक्ट हैं. इनकी कुंजियां और वैल्यू यहां दी गई हैं:

ऑब्जेक्ट ब्यौरा
PACKAGES यह ऑब्जेक्ट, अलग-अलग ऐप्लिकेशन के मुख्य पैकेज के बारे में बताता है. इनका इस्तेमाल यह तय करने के लिए किया जाता है कि ऐप्लिकेशन फ़ोरग्राउंड में कब है.
ACTIONS यह ऑब्जेक्ट, अलग-अलग कार्रवाइयों के लिए ऐक्शन टाइप और पैरामीटर दिखाता है. उदाहरण के लिए, स्क्रोल करने के लिए बटन या हाथ के जेस्चर का इस्तेमाल करना है या नहीं.
COMMANDS यह एक ऐसा ऑब्जेक्ट होता है जो अलग-अलग कार्रवाइयां करने वाली कमांड के बारे में बताता है.
UI_ELEMENTS इस ऑब्जेक्ट का इस्तेमाल, यूज़र इंटरफ़ेस (यूआई) ऑटोमेटर `BySelectors` बनाने के लिए किया जाता है. ये यूज़र इंटरफ़ेस (यूआई) एलिमेंट चुनते हैं. इनके बारे में यहां ज़्यादा जानकारी दी गई है.
WORKFLOWS कार्रवाइयों का ऐसा क्रम जिससे बड़े टास्क पूरे किए जा सकते हैं. इनके बारे में यहां ज़्यादा जानकारी दी गई है.

यूज़र इंटरफ़ेस (यूआई) एलिमेंट

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

टेक्स्ट

यह सबसे आसान यूज़र इंटरफ़ेस (यूआई) एलिमेंट टाइप है. यूज़र इंटरफ़ेस (यूआई) एलिमेंट की पहचान उसके टेक्स्ट से की जाती है. इसके लिए, टेक्स्ट का पूरी तरह से मेल खाना ज़रूरी है.

    "CALL_HISTORY_MENU": {
      "TYPE": "TEXT",
      "VALUE": "Recents"
    }

TEXT_CONTAINS

यह TEXT के जैसा ही है. हालांकि, इसमें मैच किए जाने वाले एलिमेंट के टेक्स्ट में, तय किया गया VALUE कहीं भी दिख सकता है.

    "PRIVACY_CALENDAR": {
      "TYPE": "TEXT_CONTAINS",
      "VALUE": "Calendar"
    }

जानकारी

कॉन्टेंट के ब्यौरे वाले एट्रिब्यूट के हिसाब से एलिमेंट की पहचान करें. इसके लिए, सटीक मिलान ज़रूरी है.

    "APP_GRID_SCROLL_BACKWARD_BUTTON": {
      "TYPE": "DESCRIPTION",
      "VALUE": "Scroll up"
    }

RESOURCE_ID

संसाधन आईडी के हिसाब से एलिमेंट की पहचान करें. इसके अलावा, आईडी के पैकेज कॉम्पोनेंट की भी जांच की जा सकती है. PACKAGE कुंजी का इस्तेमाल करना ज़रूरी नहीं है. अगर इसे शामिल नहीं किया जाता है, तो कोई भी पैकेज मैच हो जाएगा. साथ ही, सिर्फ़ :id/ के बाद वाले आईडी के हिस्से को माना जाएगा.

    "APP_LIST_SCROLL_ELEMENT": {
      "TYPE": "RESOURCE_ID",
      "VALUE": "apps_grid",
      "PACKAGE": "com.android.car.carlauncher"
    }

क्लिक किया जा सकने वाला, स्क्रोल किया जा सकने वाला

यह पहचान करें कि एलिमेंट पर क्लिक किया जा सकता है या नहीं या उसे स्क्रोल किया जा सकता है या नहीं. ये एलिमेंट टाइप बहुत बड़े होते हैं. इसलिए, इनका इस्तेमाल आम तौर पर सिर्फ़ MULTIPLE में किया जाना चाहिए, ताकि किसी दूसरे एलिमेंट टाइप को कम किया जा सके. FLAG कुंजी ज़रूरी नहीं है. इसकी डिफ़ॉल्ट वैल्यू true होती है.

    "SAMPLE_ELEMENT": {
      "TYPE": "CLICKABLE",
      "FLAG": false
    }

CLASS

क्लास के आधार पर एलिमेंट की पहचान करता है.

    "SECURITY_SETTINGS_ENTER_PASSWORD": {
      "TYPE": "CLASS",
      "VALUE": "android.widget.EditText"
    }

HAS_ANCESTOR

इसके लिए, विजेट के पैरंट एलिमेंट की हैरारकी देखें. ANCESTOR कुंजी में एक ऐसा ऑब्जेक्ट होता है जिससे पूर्वज की पहचान होती है. DEPTH कुंजी यह तय करती है कि क्रम के हिसाब से देखने के लिए, कितने लेवल ऊपर तक जाना है. DEPTH एक वैकल्पिक प्रॉपर्टी है. इसकी डिफ़ॉल्ट वैल्यू 1 होती है.

      "SAMPLE_ELEMENT": {
      "TYPE": "HAS_ANCESTOR",
      "DEPTH": 2,
      "ANCESTOR": {
        "TYPE": "CLASS",
        "VALUE": "android.view.ViewGroup"
      }
    }

HAS_DESCENDANT

इसके चाइल्ड एलिमेंट की हैरारकी देखकर, एलिमेंट की पहचान करें. DESCENDANT कुंजी में एक ऐसा ऑब्जेक्ट होता है जो यह तय करता है कि किस चाइल्ड को खोजना है. DEPTH कुंजी से यह तय होता है कि हैरारकी में कितनी ऊपर तक देखना है. DEPTH एक वैकल्पिक पैरामीटर है और इसकी डिफ़ॉल्ट वैल्यू 1 है.

      "SAMPLE_ELEMENT": {
      "TYPE": "HAS_DESCENDANT",
      "DEPTH": 2,
      "DESCENDANT": {
        "TYPE": "CLASS",
        "VALUE": "android.view.ViewGroup"
      }
    }

MULTIPLE

एक साथ कई शर्तों के आधार पर एलिमेंट की पहचान करना. इन सभी शर्तों का पूरा होना ज़रूरी है.

      "APP_INFO_SETTINGS_PERMISSION_MANAGER": {
      "TYPE": "MULTIPLE",
      "SPECIFIERS": [
        {
          "TYPE": "CLASS",
          "VALUE": "android.widget.RelativeLayout"
        },
        {
          "TYPE": "HAS_DESCENDANT",
          "MAX_DEPTH": 2,
          "DESCENDANT": {
            "TYPE": "TEXT",
            "VALUE": "Permission manager"
          }
        }
      ]
    }

इस उदाहरण में, कॉन्फ़िगरेशन ऐसे RelativeLayout की पहचान करता है जिसका डिसेंडेंट 2 डेप्थ पर है और जिसमें Permission manager टेक्स्ट है.

Workflows

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

    "WORKFLOWS": {
    "OPEN_SOUND_SETTINGS_WORKFLOW": [
      {
        "NAME": "Go to Home",
        "TYPE": "PRESS",
        "CONFIG": {
          "TEXT": "HOME"
        }
      },
      {
        "NAME": "Open Settings",
        "TYPE": "COMMAND",
        "CONFIG": {
          "TEXT": "am start -a android.settings.SETTINGS"
        }
      },
      {
        "NAME": "Open Sound Settings",
        "TYPE": "SCROLL_TO_FIND_AND_CLICK",
        "CONFIG": {
          "UI_ELEMENT": {
            "TYPE": "TEXT",
            "VALUE": "Sound"
          }
        },
        "SCROLL_CONFIG": {
          "SCROLL_ACTION": "USE_GESTURE",
          "SCROLL_DIRECTION": "VERTICAL",
          "SCROLL_ELEMENT": {
            "TYPE": "RESOURCE_ID",
            "VALUE": "car_ui_recycler_view"
          }
        }
      }
    ]
  }

हर वर्कफ़्लो एक की-वैल्यू पेयर होता है. इसमें की, वर्कफ़्लो का नाम होती है और वैल्यू, की जाने वाली कार्रवाइयों का ऐरे होती है. हर कार्रवाई में NAME, TYPE, (आम तौर पर) CONFIG, और (कभी-कभी) SWIPE_CONFIG या SCROLL_CONFIG होता है. ज़्यादातर TYPE के लिए, CONFIG एक ऐसा ऑब्जेक्ट होता है जिसमें UI_ELEMENT कुंजी होती है. इसकी वैल्यू, यूज़र इंटरफ़ेस (यूआई) एलिमेंट की एंट्री (ऊपर देखें) के जैसी होती है. ये टाइप हैं:

PRESS
LONG_PRESS
CLICK
LONG_CLICK
CLICK_IF_EXIST
HAS_UI_ELEMENT_IN_FOREGROUND
SCROLL_TO_FIND_AND_CLICK
SCROLL_TO_FIND_AND_CLICK_IF_EXIST
SWIPE_TO_FIND_AND_CLICK
SWIPE_TO_FIND_AND_CLICK_IF_EXIST

अन्य TYPE के लिए, कॉन्फ़िगरेशन की जानकारी यह है:

ऑब्जेक्ट ब्यौरा
COMMAND यह एक ऐसा ऑब्जेक्ट है जिसकी TEXT वैल्यू में, एक्ज़ीक्यूट करने का निर्देश होता है.
HAS_PACKAGE_IN_FOREGROUND TEXT वैल्यू वाला एक ऑब्जेक्ट, जिसमें पैकेज शामिल है.
SWIPE SWIPE कार्रवाई के लिए, CONFIG key को शामिल न करें. यह सिर्फ़ SWIPE_CONFIG का इस्तेमाल करता है
WAIT_MS यह एक ऐसा ऑब्जेक्ट है जिसकी TEXT वैल्यू में इंतज़ार करने के लिए मिलीसेकंड की संख्या शामिल होती है.

स्क्रोल करने और स्वाइप करने से जुड़ी कार्रवाइयों के लिए, यहां दिए गए तरीके से अतिरिक्त कॉन्फ़िगरेशन की ज़रूरत होती है:

SCROLL_CONFIG

ऑब्जेक्ट ब्यौरा
SCROLL_ACTION USE_GESTURE या USE_BUTTON
SCROLL_DIRECTION HORIZONTAL या VERTICAL
SCROLL_ELEMENT यह एक ऐसा ऑब्जेक्ट है जो स्क्रोल करने के लिए कंटेनर के बारे में बताता है. यह यूज़र इंटरफ़ेस (यूआई) एलिमेंट कॉन्फ़िगरेशन (ऊपर देखें) के तौर पर ही काम करता है.
SCROLL_FORWARD, SCROLL_BACKWARD आगे और पीछे की ओर स्क्रोल करने वाले बटन (जब SCROLL_ACTION USE_BUTTON हो, तब ज़रूरी है).
SCROLL_MARGIN अगर SCROLL_ACTION USE_GESTURE है, तो कंटेनर के किनारे से ड्रैग शुरू और बंद करने की दूरी. इसका इस्तेमाल स्क्रोल करने के लिए किया जाएगा (ज़रूरी नहीं, डिफ़ॉल्ट = 10).
SCROLL_WAIT_TIME अगर SCROLL_ACTION USE_GESTURE है, तो क्लिक करने के लिए किसी ऑब्जेक्ट को खोजते समय, स्क्रोल करने के जेस्चर के बीच इंतज़ार करने का समय (मिलीसेकंड में). (ज़रूरी नहीं, डिफ़ॉल्ट = 1).

SWIPE_CONFIG

ऑब्जेक्ट ब्यौरा
SWIPE_DIRECTION TOP_TO_BOTTOM, BOTTOM_TO_TOP, LEFT_TO_RIGHT या RIGHT_TO_LEFT में से कोई एक
SWIPE_FRACTION

इनमें से कोई एक:

  • FULL: स्क्रीन के एक किनारे से दूसरे किनारे तक स्वाइप करें

    या,
  • DEFAULT: स्क्रीन के एक किनारे से दूसरे किनारे तक, दोनों ओर पांच (5) पिक्सल का बफ़र.

    या,
  • THREE_QUARTER, HALF या QUARTER: स्वाइप जेस्चर, स्क्रीन के किनारे से पांच (5) पिक्सल की दूरी पर खत्म होता है. साथ ही, यह उस पॉइंट से शुरू होता है जो स्क्रीन की बताई गई दूरी को कवर करता है.
NUMBER_OF_STEPS स्वाइप करने के लिए इस्तेमाल किए जाने वाले चरणों की संख्या. segmentSteps देखें.

बनाना और लागू करना

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

नीचे दिए गए कोड सैंपल में, टेस्ट APK को बनाने, इंस्टॉल करने, और चलाने का तरीका बताया गया है.

# Build Test APK
make TEST-APK-NAME
# Install Test APK
adb -s DEVICE-SERIAL install -r PATH-FOR-BUILT-TEST-APK
# Execute Test with the JSON file
adb -s DEVICE-SERIAL shell am instrument -w -r -e debug false -e config-file-path /data/local/tmp/jsonFile.json -e class TEST-PACKAGE.TEST-CLASSNAME TEST-PACKAGE/androidx.test.runner.AndroidJUnitRunner

इन निर्देशों में:

  • TEST-APK-NAME: जांच किए जाने वाले ऐप्लिकेशन का नाम. उदाहरण के लिए, Android.bp फ़ाइल में बताई गई वाई-फ़ाई सेटिंग की जांच करने के लिए, TEST-APK-NAME को AndroidAutomotiveSettingsTests पर सेट करें. APK का नाम, ऑटोमोटिव टेस्ट के लिए Android.bp फ़ाइल में देखा जा सकता है.

  • DEVICE-SERIAL: DUT का सीरियल आईडी. अगर होस्ट से सिर्फ़ एक डिवाइस कनेक्ट है, तो इस पैरामीटर की ज़रूरत नहीं होती.

  • config-file-path: यह एक ज़रूरी पैरामीटर है. इसका इस्तेमाल सिर्फ़ डिवाइस के यूज़र इंटरफ़ेस (यूआई) के नॉनडिफ़ॉल्ट कॉन्फ़िगरेशन देने के लिए किया जाता है. ये कॉन्फ़िगरेशन, JSON कॉन्फ़िगरेशन फ़ाइल में दिए गए होते हैं. अगर यह जानकारी नहीं दी जाती है, तो फ़्रेमवर्क, टेस्ट को लागू करने के लिए डिफ़ॉल्ट वैल्यू का इस्तेमाल करता है.

  • PATH-FOR-BUILT-TEST-APK: यह वह पाथ है जहां make कमांड के चालू होने पर, टेस्ट APK बनाया जाता है.

  • TEST-PACKAGE: टेस्ट पैकेज का नाम.

  • TEST-CLASSNAME: टेस्ट क्लास का नाम. उदाहरण के लिए, वाई-फ़ाई सेटिंग की जांच के लिए, टेस्ट पैकेज android.platform.tests है और टेस्ट क्लास का नाम WifiSettingTest है.

ऑटोमोटिव स्निपेट लाइब्रेरी

Automotive Snippet Library, Android Test लाइब्रेरी का एक सेट है. इसे Android Open Source Project (AOSP) के लिए बनाया गया है. इसका इस्तेमाल, Automotive ऐप्लिकेशन और सेवाओं के साथ इंटरैक्ट करने के लिए किया जाता है. यह Spectatio का इस्तेमाल करता है. इसमें होस्ट (टेस्ट) मशीन से Android डिवाइस पर रिमोट प्रोसीज़र कॉल (आरपीसी) को एक्ज़ीक्यूट करने के लिए, एक आसान तरीका उपलब्ध होता है.

शुरू करें

शुरू करने से पहले, इन सेक्शन को देखें.

ज़रूरी शर्तें

  • होस्ट मशीन पर Python 3.x इंस्टॉल हो.
  • ज़रूरी बिल्ड टूल के साथ AOSP एनवायरमेंट सेटअप किया गया हो.
  • adb ऐक्सेस वाला Android Automotive डिवाइस (इम्यूलेटर या फ़िज़िकल डिवाइस).

कंपाइलेशन

ऑटोमोटिव स्निपेट लाइब्रेरी में दिए गए अलग-अलग स्निपेट को कंपाइल करने के लिए, दी गई android.bp फ़ाइल का इस्तेमाल किया जा सकता है. पिछले सेक्शन में दिए गए इन निर्देशों का पालन करके, APK को कंपाइल करें.

डिप्लॉयमेंट

स्निपेट लाइब्रेरी को कंपाइल करने के बाद, पिछले सेक्शन में बताई गई adb install कमांड का इस्तेमाल करके, टारगेट डिवाइस पर नतीजे के तौर पर मिले APK डिप्लॉय करें.

टेस्ट चलाना

स्निपेट लाइब्रेरी, ऑटोमोटिव सिस्टम के साथ इंटरैक्ट करने के लिए कई आरपीसी तरीके उपलब्ध कराती हैं. इन तरीकों को होस्ट मशीन से Mobly फ़्रेमवर्क के ज़रिए लागू किया जा सकता है. मान लें कि आपने Mobly टेस्ट एनवायरमेंट सेट अप कर लिया है. ऐसे में, इंटरैक्टिव Python शेल खोलने के लिए, snippet_shell.py स्क्रिप्ट का इस्तेमाल किया जा सकता है. यहां डिवाइस पर आरपीसी के तरीकों को मैन्युअल तरीके से लागू किया जा सकता है. फ़ंक्शन को कॉल करने का उदाहरण:

python3 snippet_shell.py com.google.android.mobly.snippet.bundled -s <serial>

<serial> को डिवाइस के सीरियल नंबर से बदलें. अगर एक से ज़्यादा डिवाइस कनेक्ट हैं, तो adb devices की मदद से सीरियल नंबर पाया जा सकता है.

शामिल की गई लाइब्रेरी

Automotive Snippet Library में ये स्निपेट लाइब्रेरी और हेल्पर शामिल हैं:

  • AutomotiveSnippet: यह वाहन के ऑपरेशन से जुड़े एपीआई उपलब्ध कराता है. जैसे, डायल करना, वॉल्यूम कंट्रोल करना, वाहन के हार्ड की, और मीडिया सेंटर के साथ इंटरैक्ट करना.

  • PhoneSnippet: यह टेलीफ़ोनी से जुड़े एपीआई उपलब्ध कराता है. इनमें कॉल हैंडलिंग, संपर्क ब्राउज़ करना, और एसएमएस से जुड़ी कार्रवाइयां शामिल हैं.

ऑटोमोटिव स्निपेट और फ़ोन स्निपेट में कुछ लॉजिक एक जैसे होते हैं. खास तौर पर, ब्लूटूथ से जुड़े आरसीपी कॉल में दख़ल दिया जा सकता है, ताकि कार और फ़ोन को कनेक्ट किया जा सके. इस bt_discovery_test में इसका तरीका बताया गया है.