Spectatio एक खुला स्रोत परीक्षण ढांचा है जिसे वास्तविक और आभासी उपकरणों पर Android Automotive OS (AAOS) के परीक्षण के लिए विकसित किया गया है। स्पेक्टैटियो ऑटोमोटिव डिवाइस पर ऐप्स के परीक्षण के लिए एपीआई प्रदान करता है और एएओएस और उसके ऐप्स की कार्यक्षमता और प्रदर्शन को सत्यापित करने के लिए उपयोग किया जाने वाला एक विस्तार योग्य और स्केलेबल समाधान है।
उच्च स्तरीय डिजाइन
स्पेक्टेटियो ढांचा विभिन्न एएओएस यूआई कार्यान्वयन के लिए अनुकूलनीय और विस्तार योग्य है। इसका उपयोग डिवाइस हार्डवेयर, एमुलेटर और वर्चुअलाइज्ड वातावरण पर AAOS की कार्यक्षमता और प्रदर्शन के परीक्षण के लिए किया जाता है।
निम्नलिखित आंकड़ा स्पेक्टेटियो ढांचे के उच्च-स्तरीय डिज़ाइन की व्याख्या करता है।
चित्रा 1. स्पेक्टेटो ढांचा उच्च स्तरीय डिजाइन
UI Automator के शीर्ष पर निर्मित, Spectatio ढांचा UI परीक्षण बनाने के लिए API का एक सेट प्रदान करता है जो AAOS पर उपयोगकर्ता और सिस्टम ऐप्स के साथ इंटरैक्ट करता है। ऑटोमोटिव परीक्षण परीक्षण के लिए स्पेक्टेटियो ढांचे द्वारा प्रदान किए गए एपीआई का उपयोग करते हैं, जो इन परीक्षणों को परीक्षण के तहत डिवाइस (डीयूटी) से स्वतंत्र बनाता है और समर्थित होने पर विभिन्न उपकरणों का परीक्षण करने के लिए स्केलेबल बनाता है।
चित्र 1 से पता चलता है कि स्पेक्टेटियो फ्रेमवर्क को ऐप-विशिष्ट इंटरफेस और हेल्पर्स का उपयोग करके डायलर, मेडिसेंटर और सेटिंग्स जैसे संदर्भ ऐप के आधार पर मॉड्यूलर किया गया है, जिससे इसे नए ऐप के लिए आसानी से बढ़ाया जा सकता है। स्पेक्टेटियो फ्रेमवर्क सामान्य मानक और उपयोगिता सहायक वर्गों का पुन: उपयोग करता है। मानक सहायक वर्ग सभी एप्लिकेशन सहायक कार्यों के लिए मूल वर्ग है और मानक कार्य प्रदान करता है जो डिवाइस विशिष्ट या ऐप्स पर लागू होते हैं। उपयोगिता सहायक वर्ग डिवाइस से फ़ाइलों को पढ़ने या लिखने जैसी सुविधाएं प्रदान करते हैं।
आर्किटेक्चर
यूआई परीक्षणों के निर्माण के लिए एपीआई का एक सेट प्रदान करने के लिए, स्पेक्टैटियो फ्रेमवर्क मौजूदा मानक सहायक वर्ग का विस्तार करते हुए और उपयोगिता सहायक वर्गों को आयात करते हुए ऐप-विशिष्ट इंटरफेस और हेल्पर्स को लागू करता है।
निम्नलिखित आंकड़ा स्पेक्टेटियो ढांचे के उच्च-स्तरीय आर्किटेक्चर और ऐप के परीक्षण के लिए एपीआई को लागू करने में शामिल सभी संस्थाओं की व्याख्या करता है।
चित्रा 2. स्पेक्टेटो ढांचा उच्च स्तरीय वास्तुकला
एप्लिकेशन हेल्पर इंटरफ़ेस एप्लिकेशन हेल्पर के कार्यान्वयन के लिए एक ब्लूप्रिंट प्रदान करता है। इसमें विभिन्न सहायक कार्य होते हैं जो ऐप्स के परीक्षण के लिए आवश्यक होते हैं। प्रत्येक ऐप का अपना इंटरफ़ेस होता है, जैसे IAutoSettingHelper
और IAutoDialHelper
। अधिक जानकारी और इंटरफ़ेस फ़ंक्शंस की सूची के लिए, AOSP पर एप्लिकेशन हेल्पर इंटरफ़ेस फ़ंक्शन देखें।
मानक सहायक वर्ग में मानक विशेषताएँ और कार्य होते हैं जो डिवाइस सेटअप के लिए आवश्यक होते हैं लेकिन किसी भी ऐप के लिए विशिष्ट नहीं होते हैं, जैसे कि pressHome
और scroll
। मानक सहायक वर्ग को AbstractAutoStandardAppHelper.java
में परिभाषित किया गया है।
उपयोगिता सहायक वर्गों का उपयोग ढांचे द्वारा किया जाता है। उदाहरण के लिए, AutoJsonUtility.java
एक है
उपयोगिता वर्ग जो दिए गए डिवाइस JSON कॉन्फ़िगरेशन फ़ाइल को लोड करता है और रनटाइम पर फ्रेमवर्क कॉन्फ़िगरेशन को अपडेट करता है।
एप्लिकेशन हेल्पर इम्प्लीमेंटेशन मॉड्यूल स्पेक्टेटियो फ्रेमवर्क का मूल है। इसमें एप्लिकेशन हेल्पर इंटरफ़ेस में परिभाषित सहायक कार्यों के लिए कार्यान्वयन शामिल है, जो ऑटोमोटिव डिवाइस पर ऐप्स के परीक्षण के लिए आवश्यक हैं। प्रत्येक ऐप का अपना कार्यान्वयन होता है, जैसे कि SettingHelperImpl
और DialHelperImpl
, जिसका उपयोग ऐप्स के परीक्षण के लिए ऑटोमोटिव परीक्षणों द्वारा किया जाता है। अधिक जानकारी और कार्यान्वयन की सूची के लिए, एओएसपी पर एप्लिकेशन सहायक कार्यान्वयन कार्य देखें।
ऑटोमोटिव टेस्ट ऐप से संबंधित विभिन्न कार्यों का परीक्षण करने के लिए एप्लिकेशन हेल्पर कार्यान्वयन कार्यों का उपयोग करते हैं। एप्लिकेशन सहायक कार्यान्वयन कार्यों तक पहुंच प्राप्त करने के लिए हेल्पर 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());
}
}
अनुकूलन
स्पेक्टैटियो फ्रेमवर्क डिवाइस यूआई से स्वतंत्र है, इसलिए यह विभिन्न यूआई और हार्डवेयर वाले उपकरणों के परीक्षण के लिए स्केलेबल है। इस मापनीयता को प्राप्त करने के लिए, Spectatio संदर्भ डिवाइस के आधार पर डिफ़ॉल्ट डिवाइस कॉन्फ़िगरेशन का उपयोग करता है। नॉन-डिफॉल्ट डिवाइस कॉन्फ़िगरेशन का समर्थन करने के लिए, फ्रेमवर्क डिवाइस के लिए वांछित UI परिवर्तन सेट करने के लिए रनटाइम पर JSON कॉन्फ़िगरेशन फ़ाइल का उपयोग करता है। JSON कॉन्फ़िगरेशन फ़ाइल path
सेटिंग्स के साथ-साथ TEXT
, DESCRIPTION
और RESOURCE_ID
जैसे UI तत्वों का समर्थन करती है और इसमें केवल DUT के लिए UI परिवर्तनों के बारे में जानकारी होनी चाहिए। शेष 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
और डीयूटी परConnectivity
नाम दिया गया है। - दिनांक और समय सेटिंग्स
Settings > Date and time
और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 : डीयूटी की सीरियल आईडी। यदि केवल एक डिवाइस होस्ट से कनेक्टेड है तो इस पैरामीटर की आवश्यकता नहीं है।
निर्माण और निष्पादन
स्पेक्टेटियो फ्रेमवर्क स्वचालित रूप से परीक्षण एपीके के हिस्से के रूप में बनाया गया है। परीक्षण एपीके बनाने के लिए, एओएसपी कोडबेस स्थानीय वर्कस्टेशन पर होना चाहिए। परीक्षण एपीके बनने के बाद, उपयोगकर्ता को डिवाइस पर एपीके इंस्टॉल करना होगा और परीक्षण निष्पादित करना होगा।
निम्नलिखित कोड नमूना एक परीक्षण एपीके के निर्माण, स्थापना और निष्पादन को दर्शाता है।
# 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 : डीयूटी की सीरियल आईडी। यदि केवल एक डिवाइस होस्ट से कनेक्टेड है तो इस पैरामीटर की आवश्यकता नहीं है।
config-file-path
: वैकल्पिक पैरामीटर जो केवल गैर-डिफ़ॉल्ट डिवाइस UI कॉन्फ़िगरेशन प्रदान करने के लिए आवश्यक है जैसा कि JSON कॉन्फ़िगरेशन फ़ाइल में निर्दिष्ट है। यदि प्रदान नहीं किया गया है, तो फ्रेमवर्क परीक्षण निष्पादित करने के लिए डिफ़ॉल्ट मानों का उपयोग करता है।PATH-FOR-BUILT-TEST-APK : वह पथ जहां
make
कमांड निष्पादित होने पर टेस्ट एपीके बनाया जाता है।TEST-PACKAGE : टेस्ट पैकेज का नाम।
TEST-CLASSNAME : टेस्ट क्लास का नाम। उदाहरण के लिए, Wifi सेटिंग्स परीक्षण के लिए, परीक्षण पैकेज
android.platform.tests
है और परीक्षण वर्ग का नामWifiSettingTest
है।