Özellik: Otomotiv test çerçevesi

Spectatio, Android'i test etmek için geliştirilmiş açık kaynaklı bir test çerçevesidir Gerçek ve sanal cihazlarda Automotive OS (AAOS) Spectatio, şunlar için API'ler sağlar: bir otomotiv cihazında uygulamaları test etme, genişletilebilir ve ölçeklenebilir bir çözümdür. AAOS ile uygulamalarının özelliklerini ve performansını doğrulamak için kullanılır.

Üst düzey tasarım

Spectatio çerçevesi, çeşitli AAOS kullanıcı arayüzüne uyarlanabilir ve genişletilebilirdir hakkında bilgi edindiniz. AAOS'nin özelliklerini ve performansını test etmek için kullanılır cihaz donanımı, emülatörler ve sanallaştırılmış ortamlar için geçerlidir.

Aşağıdaki şekilde, Spectatio çerçevesinin üst düzey tasarımı açıklanmaktadır.

Spectatio çerçevesinin üst düzey tasarımı

Şekil 1. Spectatio çerçevesinin üst düzey tasarımı.

Kullanıcı Arayüzü Otomatikleştirici'nin üzerine geliştirilen Spectatio çerçevesi, bir dizi API sağlar. . Otomotiv testler, test için Spectatio çerçevesi tarafından sağlanan API'leri kullanır; bu testler, test edilen cihazdan (DUT) bağımsızdır ve test edilebilir çeşitli cihazlarda kullanabilirsiniz.

Şekil 1'de, Spectatio çerçevesinin referansa dayalı olarak modüler hale geldiği gösterilmektedir Uygulamaya özel kullanan Çevirici, Medicenter ve Ayarlar gibi uygulamalar yeni uygulamalar için kolayca genişletilebilir hale getiren yeni arayüzler ve yardımcılar. Spectatio çerçeve, yaygın standart ve yardımcı program yardımcı sınıflarını yeniden kullanır. Standart yardımcı sınıfı tüm uygulama yardımcı işlevleri için üst sınıftır ve cihaza özel veya uygulamalar genelinde geçerli olan standart işlevler İlgili içeriği oluşturmak için kullanılan yardımcı sınıfları, şunlar gibi yardımcı programlar sunar: cihazdan dosya okuma veya yazma ile ilgili bir sorun yoktur.

Mimari

Spectatio çerçevesi, kullanıcı arayüzü testleri oluşturma amacıyla bir dizi API sağlamak için uygulamaya özel arayüzler ve yardımcılar bulunurken mevcut standart yardımcı yardımcı sınıfını içe aktarmanızı sağlar.

Şekil 2'de Spectatio çerçevesinin üst düzey mimarisi gösterilmiştir ve bir uygulamayı test etmek için API'lerin uygulanmasıyla ilişkili tüm varlıklar.

Spectatio çerçevesi üst düzey mimari

Şekil 2. Spectatio çerçevesinin üst düzey mimarisi.

Uygulama yardımcı arayüzü, yardımcı olabilir. Gereken çeşitli yardımcı işlevlerden izin modudur. Her uygulamanın kendi arayüzü vardır. Örneğin, IAutoSettingHelper ve IAutoDialHelper. Daha fazla bilgi ve arayüz işlevlerinin listesi için AOSP'deki uygulama yardımcı arayüzü işlevleri konusuna bakın.

Standart yardımcı sınıf, şu standart özelliklerden ve işlevlerden oluşur: Cihaz kurulumu için gereklidir ancak pressHome gibi herhangi bir uygulamaya özel değil ve scroll. Standart yardımcı sınıf AbstractAutoStandardAppHelper.java içinde tanımlanmıştır.

Yardımcı program yardımcı sınıfları çerçeve tarafından kullanılır. Örneğin, Örneğin AutoJsonUtility.java, bir belirtilen cihaz JSON yapılandırma dosyasını ve güncellemeleri yükleyen yardımcı program sınıfı birçok farklı yolu vardır.

Uygulama yardımcısı uygulama modülü, Spectatio'nun temelini oluşturur. bahsedeceğim. Şurada tanımlanan yardımcı işlevlerin uygulamasını içerir: Google Play'de uygulamaları test etmek için gerekli olan araba cihazıdır. Her uygulamanın kendi uygulaması vardır. Örneğin, SettingHelperImpl ve DialHelperImpl, kullanan Automotive testlerini gözden geçireceğiz. Daha fazla bilgi edinmek ve daha fazla bilgi için uygulama yardımcısı uygulama işlevlerine "AOSP'de.

Otomotiv Testleri Çeşitli işlemleri test etmek için uygulama yardımcısı uygulama işlevlerini kullanma olduğunu görebilirsiniz. HelperAccessor sınıfını kullanma uygulama yardımcı uygulama işlevlerine erişim elde etmek için.

Aşağıdaki kod bir örneğin kurulumunu, temizlemesini ve yürütülmesini gösterir otomotiv testi.

@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());
  }
}

Özelleştirme

Spectatio çerçevesi, cihazın kullanıcı arayüzünden bağımsızdır. Bu nedenle, çeşitli kullanıcı arayüzlerine ve donanımlara sahip test cihazları. Bu ölçeklenebilirliği sağlamak için Spectatio, referans cihaza bağlı olarak varsayılan cihaz yapılandırmalarını kullanır. Alıcı: varsayılan olmayan cihaz yapılandırmalarını desteklediğinden çerçeve, JSON kullanır yapılandırma dosyasını kullanın. CEVAP JSON yapılandırma dosyası TEXT, DESCRIPTION ve RESOURCE_ID, path ayarlarıyla birlikte. Yalnızca şu bilgileri içermelidir: hakkında daha fazla bilgi edinin. Diğer kullanıcı arayüzü öğeleri varsayılan olarak yapılandırma değerleridir.

Varsayılan cihaz yapılandırmaları

Aşağıdaki örnek JSON yapılandırma dosyası, kullanılabilir cihazı gösterir yapılandırmaları ve varsayılan değerleridir.

Örnek JSON görüntülemek için burayı tıklayın yapılandırma dosyası

    {
        "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"
                        }
                }
        }
}
  

Alternatif cihaz yapılandırmaları

Aşağıdaki kod örneğinde, aşağıdaki gibi olan bir JSON yapılandırma dosyası örneği gösterilmektedir: Varsayılan ayarlar, DUT üzerindeki ayarlar tarafından geçersiz kılınır. Bu örnekte:

  • İnternet ayarları Ağ ve referans cihazlarda internet DUT'de bağlantı.

  • Tarih ve saat ayarlarına şuradan ulaşabilirsiniz: Ayarlar > Şu tarih ve saat: referans cihazlar bölümünde ve Ayarlar > Sistem > DUT'nin tarih ve saati.

// 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 yapılandırma dosyası hazır olduğunda, gösterildiği gibi çalışma zamanında sağlanır. şu kod bloğunu içerir:

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

Bu komutta:

  • DEVICE-SERIAL: DUT'nin seri kimliği. Bu parametre ana makineye yalnızca tek bir cihaz bağlıysa gereklidir.

  • PATH-TO-JSON-FILE: Ana makinedeki JSON dosyasının yolu.

ziyaret edin.

Yapılandırma biçimi

Yapılandırmada aşağıdaki anahtarlara sahip beş üst düzey nesne bulunur: ve değerler:

Nesne Açıklama
PACKAGES Çeşitli uygulamaların ana paketini açıklayan; o uygulamanın ön planda olduğunu belirleyebilirsiniz.
ACTIONS Çeşitli işlemler için işlem türlerini ve parametrelerini gösteren bir nesne. Örneğin, kaydırmak için düğmelerin mi yoksa bir hareketin mi kullanılacağı.
COMMANDS Çeşitli işlemleri gerçekleştiren komutları belirten bir nesne.
UI_ELEMENTS Kullanıcı arayüzünü seçen Kullanıcı Arayüzü Otomasyonu "BySelectors"ı oluşturmak için kullanılan bir nesne Öğeler (aşağıda ayrıntılı olarak açıklanmıştır).
WORKFLOWS Üst düzey görevleri tamamlayan işlem dizileri (bkz. ayrıntıları aşağıda bulabilirsiniz).

kullanıcı arayüzü öğeleri

Her kullanıcı arayüzü öğesinin, yeni bir arayüz oluşturmak için hangi UI Automator'ı arayacağını belirten bir TYPE öğeyi tanımlayın (kaynak kimliği, metin ve açıklama gibi) ve yapılandırma değerleridir. Genellikle, bir yardımcının ekranda bir öğeyi bu yapılandırmayı kullanarak tanımlarsa tam olarak bir öğedir. Birden fazla öğe yapılandırmayla eşleşirse rastgele bir öğe nasıl yapıldığını göstereceğim. Bu nedenle, yapılandırma (genellikle) ilgili bağlamda tek bir öğeyle sınırlı olmasını sağlayacak kadar spesifiktir.

METİN

Bu, en basit kullanıcı arayüzü öğesi türüdür. Kullanıcı arayüzü öğesi, metniyle tanımlanır, Tam eşleme gerektirir.

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

TEXT_CONTAINS

TEXT ile aynıdır, ancak belirtilen VALUE yalnızca eşleştirilecek öğenin metnidir.

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

AÇIKLAMA

Öğeyi, içerik açıklaması özelliğine göre tanımlayın (tam eşleşmesini sağlar.

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

KAYNAK_KİMLİĞİ

Öğeyi kaynak kimliğine göre tanımlayın ve isteğe bağlı olarak paketi kontrol edin. bileşenini ayarlayabilirsiniz. PACKAGE anahtarı isteğe bağlıdır; atlanırsa, eşleşir ve :id/ kimliğinden sonra gelen kimliğin yalnızca bir kısmı dikkate alınır.

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

TIKLANABİLİR, KAYDIRILABİLİR

Öğeyi, tıklanabilir veya kaydırılabilir olup olmadığına göre tanımlayın. Bunlar çok geniş öğe türleridir ve genellikle yalnızca MULTIPLE ile diğer öğe türlerini daraltın. FLAG anahtarı isteğe bağlıdır. ve varsayılan olarak true değerine ayarlanır.

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

SINIF

Öğeyi sınıfına göre tanımlayın.

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

HAS_ANCESTOR

Üst öğelerindeki widget hiyerarşisini arayarak öğeyi tanımlayın. İlgili içeriği oluşturmak için kullanılan ANCESTOR anahtarı, üst öğeyi tanımlayan bir nesneyi barındırır. DEPTH anahtarı hiyerarşide ne kadar yukarıya bakılacağını belirtir. DEPTH isteğe bağlıdır ve varsayılan değere (1) sahip.

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

HAS_DESCENDANT

Hiyerarşide alt öğelere bakarak öğeyi tanımlayın. İlgili içeriği oluşturmak için kullanılan DESCENDANT anahtarı, aranacak alt öğeyi belirten bir nesneyi barındırır. İlgili içeriği oluşturmak için kullanılan DEPTH anahtarı, hiyerarşide ne kadar ileri doğru görüneceğini belirtir. DEPTH isteğe bağlıdır ve 1 şeklinde bir varsayılan değere sahip.

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

BİRDEN FAZLA

Eşzamanlı birden çok koşulu temel alarak elementi tanımlayın. Tüm bu koşullar karşılanmalıdır.

      "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"
          }
        }
      ]
    }

Bu örnekte yapılandırma, RelativeLayout Permission manager metnini içeren 2 derinliğinde alt öğe.

İş akışları

İş akışı, belirli bir görevi yerine getirmek için kullanılan bir dizi işlemi temsil eder cihaz türüne göre yeterince farklılık gösterebilecek ve daha ilgili olan kod yerine yapılandırmada daha esnek davranır.

    "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"
          }
        }
      }
    ]
  }

Her iş akışı bir anahtar/değer çiftidir. Anahtar/değer çifti, iş akışının adı ve değer, gerçekleştirilecek işlemlerden oluşan bir dizidir. Her işlem bir NAME, bir TYPE, (genellikle) CONFIG ve (bazen) SWIPE_CONFIG veya SCROLL_CONFIG. Örneğin, çoğu TYPE türündeki CONFIG, değeri 20 dakikada bir UI_ELEMENT anahtarı olan kullanıcı arayüzü öğesi girişiyle aynı biçimdedir (yukarıya bakın). Bu TYPE'ler şunlardır:

BASIN
LONG_PRESS
TIKLAMA
UZUN_TIKLAMA
TIKLAMA_IF_EXIST
HAS_UI_ELEMENT_IN_FOREGROUND
SCROLL_TO_FIND_AND_TIKLAMA
SCROLL_TO_FIND_AND_TIKLAYIN_EĞER_VAR
SWIPE_TO_BUL_VE_TIKLAMA
KAYDIR

Diğer TYPE'lar için yapılandırma ayrıntıları şunlardır:

Nesne Açıklama
COMMAND Yürütülecek komutu içeren TEXT değerine sahip nesne.
HAS_PACKAGE_IN_FOREGROUND Paketi içeren TEXT değerine sahip bir nesne.
SWIPE SWIPE işlemi için CONFIG key değerini atlayın. Bu yalnızca SWIPE_CONFIG kullanır
WAIT_MS Aşağıdaki sayıyı içeren TEXT değerine sahip nesne milisaniye cinsinden eder.

Kaydırma ve kaydırma ile ilgili işlemler, aşağıdaki gibi ek yapılandırma gerektirir:

SCROLL_YAPILANDIRMA

Nesne Açıklama
SCROLL_ACTION USE_GESTURE veya USE_BUTTON
SCROLL_DIRECTION HORIZONTAL veya VERTICAL
SCROLL_ELEMENT Kullanıcı arayüzüyle aynı biçimi kullanarak kapsayıcının kaydırmasını gösteren bir nesne Öğe yapılandırması (yukarıya bakın).
SCROLL_FORWARD, SCROLL_BACKWARD İleri ve geri kaydırma düğmeleri ( SCROLL_ACTION: USE_BUTTON).
SCROLL_MARGIN SCROLL_ACTION USE_GESTURE ise mesafe kullanılacak sürüklemeyi başlatmak ve durdurmak için kapsayıcının kenarından tıklayın (İsteğe bağlı, varsayılan = 10).
SCROLL_WAIT_TIME SCROLL_ACTION USE_GESTURE ise saat için bir nesne ararken kaydırma hareketleri arasında beklenecek milisaniye tıklayın. (İsteğe bağlı, varsayılan = 1).

KAYDIRMA_YAPILANDIRMASI

Nesne Açıklama
SWIPE_DIRECTION TOP_TO_BOTTOM, BOTTOM_TO_TOP, LEFT_TO_RIGHT veya RIGHT_TO_LEFT
SWIPE_FRACTION

Şunlardan biri:

  • FULL: Ekran kenarından ekran kenarına kaydırma hareketi

    VEYA
  • DEFAULT: Ekran kenarından ekran kenarına, beş (5) ile birlikte piksel arabelleğine ekleyin.

    VEYA
  • THREE_QUARTER, HALF veya QUARTER: Kaydırma hareketi şu noktadan beş (5) piksel sürer: bir çerçeveden başlar ve ekranın kenarını kaplayacak şekilde belirtilen mesafeyi gösterir.
NUMBER_OF_STEPS Kaydırma işlemini gerçekleştirmek için kullanılacak adım sayısı. segmentSteps bakın.

Geliştirme ve yürütme

Spectatio çerçevesi, test APK'sının parçası olarak otomatik şekilde oluşturulur. Bina oluşturmak için AOSP kod tabanı yerel iş istasyonunda bulunmalıdır. test APK'sı oluşturulduğunda, kullanıcının APK'yı cihaza yüklemesi ve testi.

Aşağıdaki kod örneğinde bir test APK'sı.

# 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

Bu komutlarda:

  • TEST-APK-NAME: Test edilecek uygulamanın adı. Örneğin, Kablosuz ağ ayarlarını test etmek için TEST-APK-NAME - AndroidAutomotiveSettingsTests belirtildiği şekilde Android.bp dosyası olarak kaydedebilirsiniz. APK'nın adı, uygulamanın ilgili Android.bp dosyasında bulunabilir. Otomotiv testi.

  • DEVICE-SERIAL: DUT'nin seri kimliği. Bu parametre ana makineye yalnızca tek bir cihaz bağlıysa gereklidir.

  • config-file-path: Yalnızca JSON yapılandırmasında belirtilen varsayılan olmayan cihaz kullanıcı arayüzü yapılandırmaları dosyası olduğundan emin olun. Sağlanmamışsa çerçevesi, testleri yürütmek için varsayılan değerleri kullanır.

  • PATH-FOR-BUILT-TEST-APK: Test APK'sının oluşturulduğu yol make komutu yürütüldüğünde alınır.

  • TEST-PACKAGE: Test paketinin adı.

  • TEST-CLASSNAME: Test sınıfının adı. Örneğin, Wifi Settings (Kablosuz Ayarları) testi, test paketi android.platform.tests ve test sınıfının adı: WifiSettingTest.

Otomotiv Snippet Kitaplığı

Automotive Snippet Kitaplığı, Otomotiv ile etkileşime girmek üzere tasarlanmış Android Açık Kaynak Projesi (AOSP) uygulamalar ve hizmetler. Spectatio'dan yararlandığı pratik mekanizmalar bir ana makine (test) makinesinden farklı bir sunucuya Android destekli bir cihaz.

Başlayın

Başlamadan önce bu bölümleri inceleyin.

Ön koşullar

  • Ana makinede Python 3.x yüklü.
  • Gerekli derleme araçlarıyla AOSP ortamı kurulumu.
  • Adb erişimi olan bir Android automotive cihazı (emülatör veya fiziksel cihaz).

Derleme

Automotive Snippet Kitaplığı tarafından sağlanan çeşitli snippet'leri derlemek için sağlanan android.bp dosyasını kullanabilir. Önceki komutlarda verilen bölümünü kullanarak APK'yı derlemeyi deneyin.

Dağıtım

Snippet kitaplıklarını başarıyla derledikten sonra, elde edilen APK'ları şuraya dağıtın: önceki bölümde bahsedilen adb install komutunu kullanan hedef cihaz bölümüne bakın.

Testler yapın

Snippet kitaplıkları, otomotivle etkileşimde bulunmak için çeşitli RPC yöntemleri sunar bahsedeceğim. Bu yöntemler, ana makinedeki Mobly çerçevesiyle çağrılabilir üretiliyor. Mobly test ortamının ayarlandığını varsayarsak snippet_shell.py komut dosyasını kullanarak etkileşimli bir Python kabuğu açın. cihazda RPC yöntemlerini manuel olarak çağırın. Örnek çağrı:

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

<serial> numarasını, cihazın seri numarasıyla değiştirin. Bu numarayı şuradan edinebilirsiniz: adb cihazları bağlanır.

Dahil edilen kitaplıklar

Automotive Snippet Kitaplığı aşağıdaki snippet kitaplıklarını ve yardımcılar:

  • AutomotiveSnippet: Araç işlemleriyle ilgili API'ler sağlar. Örneğin: çevirme, ses kontrolü, araç sabit tuşları ve medya merkezi etkileşimi.

  • Telefon Snippet'i: Arama işleme, kişilere göz atma ve SMS işlemleriyle ilgili veriler içerir.

Automotive snippet'i ve PhoneSnippet'te bazı ortak açıklamalar vardır. Daha açık belirtmek gerekirse, bir otomobili eşlemek için Bluetooth ile ilgili RCP çağrılarını istila edebilirsiniz. bir de telefon cihazı var. Bu bt_discovery_test, bunu nasıl yapacağınızı gösterir.