स्पेक्ट्रम: ऑटोमोटिव टेस्ट फ्रेमवर्क

स्पेक्टेटियो एक खुला स्रोत परीक्षण ढांचा है जिसे वास्तविक और आभासी उपकरणों पर एंड्रॉइड ऑटोमोटिव ओएस (एएओएस) के परीक्षण के लिए विकसित किया गया है। स्पेक्टेटियो ऑटोमोटिव डिवाइस पर ऐप्स के परीक्षण के लिए एपीआई प्रदान करता है और यह एक विस्तार योग्य और स्केलेबल समाधान है जिसका उपयोग एएओएस और उसके ऐप्स की कार्यक्षमता और प्रदर्शन को सत्यापित करने के लिए किया जाता है।

उच्च स्तरीय डिज़ाइन

स्पेक्टेटियो फ्रेमवर्क विभिन्न एएओएस यूआई कार्यान्वयन के लिए अनुकूलनीय और विस्तार योग्य है। इसका उपयोग डिवाइस हार्डवेयर, एमुलेटर और वर्चुअलाइज्ड वातावरण पर AAOS की कार्यक्षमता और प्रदर्शन का परीक्षण करने के लिए किया जाता है।

निम्नलिखित चित्र स्पेक्टेटियो ढांचे के उच्च-स्तरीय डिज़ाइन की व्याख्या करता है।

spectatio-design

चित्र 1. स्पेक्टेटियो फ्रेमवर्क उच्च स्तरीय डिज़ाइन

यूआई ऑटोमेटर के शीर्ष पर निर्मित, स्पेक्टेटियो फ्रेमवर्क यूआई परीक्षण बनाने के लिए एपीआई का एक सेट प्रदान करता है जो एएओएस पर उपयोगकर्ता और सिस्टम ऐप्स के साथ इंटरैक्ट करता है। ऑटोमोटिव परीक्षण परीक्षण के लिए स्पेक्टेटियो फ्रेमवर्क द्वारा प्रदान किए गए एपीआई का उपयोग करते हैं, जो इन परीक्षणों को परीक्षण के तहत डिवाइस (डीयूटी) से स्वतंत्र बनाता है और समर्थित होने पर विभिन्न उपकरणों का परीक्षण करने के लिए स्केलेबल बनाता है।

चित्र 1 से पता चलता है कि स्पेक्टेटियो फ्रेमवर्क को ऐप-विशिष्ट इंटरफेस और सहायकों का उपयोग करके डायलर, मेडिसेंटर और सेटिंग्स जैसे संदर्भ ऐप्स के आधार पर मॉड्यूलर किया गया है, जिससे इसे नए ऐप्स के लिए आसानी से विस्तार योग्य बनाया जा सकता है। स्पेक्टेटियो फ्रेमवर्क सामान्य मानक और उपयोगिता सहायक वर्गों का पुन: उपयोग करता है। मानक सहायक वर्ग सभी एप्लिकेशन सहायक कार्यों के लिए मूल वर्ग है और मानक कार्य प्रदान करता है जो डिवाइस विशिष्ट हैं या सभी ऐप्स पर लागू होते हैं। उपयोगिता सहायक वर्ग डिवाइस से फ़ाइलें पढ़ने या लिखने जैसी उपयोगिताएँ प्रदान करते हैं।

वास्तुकला

यूआई परीक्षण बनाने के लिए एपीआई का एक सेट प्रदान करने के लिए, स्पेक्टेटियो फ्रेमवर्क मौजूदा मानक सहायक वर्ग का विस्तार करते हुए और उपयोगिता सहायक वर्गों को आयात करते हुए ऐप-विशिष्ट इंटरफेस और सहायकों को लागू करता है।

निम्नलिखित आंकड़ा स्पेक्टेटियो फ्रेमवर्क की उच्च-स्तरीय वास्तुकला और एक ऐप के परीक्षण के लिए एपीआई को लागू करने में शामिल सभी संस्थाओं की व्याख्या करता है।

spectatio-arch

चित्र 2. स्पेक्टेटियो फ्रेमवर्क उच्च स्तरीय वास्तुकला

एप्लिकेशन हेल्पर इंटरफ़ेस एप्लिकेशन हेल्पर के कार्यान्वयन के लिए एक खाका प्रदान करता है। इसमें विभिन्न सहायक कार्य शामिल हैं जो ऐप्स का परीक्षण करने के लिए आवश्यक हैं। प्रत्येक ऐप का अपना इंटरफ़ेस होता है, जैसे IAutoSettingHelper और IAutoDialHelper । अधिक जानकारी और इंटरफ़ेस फ़ंक्शंस की सूची के लिए, AOSP पर एप्लिकेशन हेल्पर इंटरफ़ेस फ़ंक्शंस देखें।

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

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

एप्लिकेशन हेल्पर कार्यान्वयन मॉड्यूल स्पेक्टेटियो फ्रेमवर्क का मूल है। इसमें एप्लिकेशन हेल्पर इंटरफ़ेस में परिभाषित सहायक कार्यों के लिए कार्यान्वयन शामिल है, जो ऑटोमोटिव डिवाइस पर ऐप्स का परीक्षण करने के लिए आवश्यक हैं। प्रत्येक ऐप का अपना कार्यान्वयन होता है, जैसे SettingHelperImpl और DialHelperImpl , जिसका उपयोग ऑटोमोटिव परीक्षणों द्वारा ऐप्स के परीक्षण के लिए किया जाता है। अधिक जानकारी और कार्यान्वयन की सूची के लिए, 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 application
    autoApplicationHelper.open();
  }

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

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

अनुकूलन

स्पेक्टेटियो फ्रेमवर्क डिवाइस यूआई से स्वतंत्र है, इसलिए यह विभिन्न यूआई और हार्डवेयर वाले उपकरणों के परीक्षण के लिए स्केलेबल है। इस स्केलेबिलिटी को प्राप्त करने के लिए, स्पेक्टेटियो संदर्भ डिवाइस के आधार पर डिफ़ॉल्ट डिवाइस कॉन्फ़िगरेशन का उपयोग करता है। नॉनडिफॉल्ट डिवाइस कॉन्फ़िगरेशन का समर्थन करने के लिए, फ्रेमवर्क डिवाइस के लिए वांछित यूआई परिवर्तन सेट करने के लिए रनटाइम पर JSON कॉन्फ़िगरेशन फ़ाइल का उपयोग करता है। एक JSON कॉन्फ़िगरेशन फ़ाइल path सेटिंग्स के साथ TEXT , DESCRIPTION , और RESOURCE_ID जैसे UI तत्वों का समर्थन करती है और इसमें केवल DUT के लिए UI परिवर्तनों के बारे में जानकारी होनी चाहिए। बाकी यूआई तत्व फ्रेमवर्क में दिए गए डिफ़ॉल्ट कॉन्फ़िगरेशन मानों का उपयोग करते हैं।

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

निम्नलिखित नमूना 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 पर सेटिंग्स द्वारा ओवरराइड किया जाता है। इस उदाहरण में:

  • इंटरनेट सेटिंग्स को संदर्भ उपकरणों पर Network & internet और DUT पर Connectivity नाम दिया गया है।
  • दिनांक और समय सेटिंग्स संदर्भ उपकरणों के लिए Settings > Date and time पर और DUT के लिए Settings > System > Date and time पर उपलब्ध हैं।
# JSON configuration file for Reference Device
{
       ....
        "NETWORK_AND_INTERNET_SETTINGS": {
             "path": "Settings > Network & internet"
        },
        "DATE_AND_TIME_SETTINGS": {
             "path": "Settings > Date and time"
        },
       ....
}

# JSON configuration file for non-reference device
{
       ....
        "NETWORK_AND_INTERNET_SETTINGS": {
             "path": "Settings > Connectivity"
        },
        "DATE_AND_TIME_SETTINGS": {
             "path": "Settings > System > Date and time"
        },
       ....
}

जब JSON कॉन्फ़िगरेशन फ़ाइल तैयार हो जाती है, तो इसे रनटाइम पर प्रदान किया जाता है जैसा कि निम्नलिखित कोड ब्लॉक में दिखाया गया है।

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

इन आदेशों में:

  • PATH-TO-JSON-FILE : होस्ट मशीन पर JSON फ़ाइल का पथ।
  • DEVICE-SERIAL : DUT की सीरियल आईडी। यदि केवल एक डिवाइस होस्ट से जुड़ा है तो इस पैरामीटर की आवश्यकता नहीं है।

निर्माण एवं क्रियान्वयन

स्पेक्टेटियो फ्रेमवर्क स्वचालित रूप से परीक्षण एपीके के हिस्से के रूप में बनाया गया है। परीक्षण एपीके बनाने के लिए, एओएसपी कोडबेस को स्थानीय वर्कस्टेशन पर रहना चाहिए। परीक्षण एपीके बनने के बाद, उपयोगकर्ता को डिवाइस पर एपीके इंस्टॉल करना होगा और परीक्षण निष्पादित करना होगा।

निम्नलिखित कोड नमूना एक परीक्षण एपीके के निर्माण, स्थापना और निष्पादन को दर्शाता है।

# 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 पर सेट करें। एपीके का नाम ऑटोमोटिव परीक्षण के लिए संबंधित Android.bp फ़ाइल में पाया जा सकता है।

  • DEVICE-SERIAL : DUT की सीरियल आईडी। यदि केवल एक डिवाइस होस्ट से जुड़ा है तो इस पैरामीटर की आवश्यकता नहीं है।

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

  • PATH-FOR-BUILT-TEST-APK : वह पथ जहां make कमांड निष्पादित होने पर टेस्ट एपीके बनाया जाता है।

  • TEST-PACKAGE : परीक्षण पैकेज का नाम.

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