স্পেকটিও: স্বয়ংচালিত পরীক্ষার কাঠামো

Spectatio হল একটি ওপেন সোর্স টেস্ট ফ্রেমওয়ার্ক যা বাস্তব এবং ভার্চুয়াল ডিভাইসে Android Automotive OS (AAOS) পরীক্ষা করার জন্য তৈরি করা হয়েছে। Spectatio একটি স্বয়ংচালিত ডিভাইসে অ্যাপ্লিকেশন পরীক্ষা করার জন্য API প্রদান করে এবং এটি AAOS এবং এর অ্যাপ্লিকেশনগুলির কার্যকারিতা এবং কার্যকারিতা যাচাই করার জন্য ব্যবহৃত একটি প্রসারিত এবং মাপযোগ্য সমাধান।

উচ্চ-স্তরের নকশা

Spectatio ফ্রেমওয়ার্ক বিভিন্ন AAOS UI বাস্তবায়নের জন্য অভিযোজিত এবং প্রসারণযোগ্য। এটি ডিভাইস হার্ডওয়্যার, এমুলেটর এবং ভার্চুয়ালাইজড পরিবেশে AAOS এর কার্যকারিতা এবং কার্যকারিতা পরীক্ষা করার জন্য ব্যবহৃত হয়।

নিচের চিত্রটি স্পেকট্যাটিও ফ্রেমওয়ার্কের উচ্চ-স্তরের নকশা ব্যাখ্যা করে।

spectatio-design

চিত্র 1. স্পেক্টেটিও ফ্রেমওয়ার্ক উচ্চ-স্তরের নকশা

UI অটোমেটরের উপরে নির্মিত, Spectatio ফ্রেমওয়ার্ক UI পরীক্ষা তৈরি করতে API-এর একটি সেট সরবরাহ করে যা AAOS-এ ব্যবহারকারী এবং সিস্টেম অ্যাপগুলির সাথে ইন্টারঅ্যাক্ট করে। স্বয়ংচালিত পরীক্ষাগুলি পরীক্ষার জন্য Spectatio ফ্রেমওয়ার্ক দ্বারা প্রদত্ত API ব্যবহার করে, যা এই পরীক্ষাগুলিকে পরীক্ষার (DUT) অধীনে ডিভাইস থেকে স্বাধীন করে এবং সমর্থিত হলে বিভিন্ন ডিভাইস পরীক্ষা করার জন্য মাপযোগ্য করে তোলে।

চিত্র 1 দেখায় যে Spectatio ফ্রেমওয়ার্কটি রেফারেন্স অ্যাপগুলির উপর ভিত্তি করে মডুলারাইজ করা হয়েছে যেমন ডায়ালার, মেডিসেন্টার, এবং অ্যাপ-নির্দিষ্ট ইন্টারফেস এবং সাহায্যকারী ব্যবহার করে সেটিংস, এটি নতুন অ্যাপগুলির জন্য সহজেই প্রসারিত করে। Spectatio ফ্রেমওয়ার্ক সাধারণ স্ট্যান্ডার্ড এবং ইউটিলিটি হেল্পার ক্লাস পুনরায় ব্যবহার করে। স্ট্যান্ডার্ড হেল্পার ক্লাস হল সমস্ত অ্যাপ্লিকেশান হেল্পার ফাংশনগুলির জন্য প্যারেন্ট ক্লাস এবং ডিভাইস নির্দিষ্ট বা অ্যাপ্লিকেশানগুলিতে প্রযোজ্য স্ট্যান্ডার্ড ফাংশনগুলি প্রদান করে৷ ইউটিলিটি হেল্পার ক্লাসগুলি ডিভাইস থেকে ফাইল পড়া বা লেখার মতো ইউটিলিটি প্রদান করে।

স্থাপত্য

UI পরীক্ষা তৈরির জন্য API-এর একটি সেট প্রদান করার জন্য, Spectatio ফ্রেমওয়ার্ক অ্যাপ-নির্দিষ্ট ইন্টারফেস এবং সাহায্যকারী প্রয়োগ করে যখন বিদ্যমান স্ট্যান্ডার্ড হেল্পার ক্লাস প্রসারিত করে এবং ইউটিলিটি হেল্পার ক্লাস আমদানি করে।

নিচের চিত্রটি স্পেকট্যাটিও ফ্রেমওয়ার্কের উচ্চ-স্তরের আর্কিটেকচার এবং একটি অ্যাপ পরীক্ষা করার জন্য এপিআই বাস্তবায়নে জড়িত সমস্ত সত্তা ব্যাখ্যা করে।

spectatio-arch

চিত্র 2. স্পেকট্যাটিও ফ্রেমওয়ার্ক উচ্চ-স্তরের আর্কিটেকচার

অ্যাপ্লিকেশন সাহায্যকারী ইন্টারফেস একটি অ্যাপ্লিকেশন সাহায্যকারী বাস্তবায়নের জন্য একটি ব্লুপ্রিন্ট প্রদান করে। এটি বিভিন্ন সহায়ক ফাংশন নিয়ে গঠিত যা অ্যাপ পরীক্ষা করার জন্য প্রয়োজন। প্রতিটি অ্যাপের নিজস্ব ইন্টারফেস আছে, যেমন IAutoSettingHelper এবং IAutoDialHelper । আরও তথ্য এবং ইন্টারফেস ফাংশনগুলির একটি তালিকার জন্য, AOSP-এ অ্যাপ্লিকেশন হেল্পার ইন্টারফেস ফাংশনগুলি দেখুন৷

স্ট্যান্ডার্ড হেল্পার ক্লাসে স্ট্যান্ডার্ড অ্যাট্রিবিউট এবং ফাংশন থাকে যা ডিভাইস সেটআপের জন্য প্রয়োজন কিন্তু কোনো অ্যাপের জন্য নির্দিষ্ট নয়, যেমন pressHome এবং scroll । স্ট্যান্ডার্ড হেল্পার ক্লাস AbstractAutoStandardAppHelper.java এ সংজ্ঞায়িত করা হয়েছে।

ইউটিলিটি হেল্পার ক্লাস ফ্রেমওয়ার্ক দ্বারা ব্যবহৃত হয়। উদাহরণস্বরূপ, AutoJsonUtility.java হল a
ইউটিলিটি ক্লাস যা প্রদত্ত ডিভাইস JSON কনফিগারেশন ফাইল লোড করে এবং রানটাইমে ফ্রেমওয়ার্ক কনফিগারেশন আপডেট করে।

অ্যাপ্লিকেশন সাহায্যকারী বাস্তবায়ন মডিউল হল Spectatio কাঠামোর মূল। এটি অ্যাপ্লিকেশান হেল্পার ইন্টারফেসে সংজ্ঞায়িত হেল্পার ফাংশনগুলির বাস্তবায়ন ধারণ করে, যা একটি স্বয়ংচালিত ডিভাইসে অ্যাপ্লিকেশানগুলি পরীক্ষা করার জন্য প্রয়োজনীয়৷ প্রতিটি অ্যাপের নিজস্ব প্রয়োগ রয়েছে, যেমন 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());
  }
}

কাস্টমাইজেশন

Spectatio ফ্রেমওয়ার্ক ডিভাইস UI থেকে স্বাধীন, তাই এটি বিভিন্ন UI এবং হার্ডওয়্যার সহ ডিভাইসগুলি পরীক্ষা করার জন্য স্কেলযোগ্য। এই পরিমাপযোগ্যতা অর্জন করতে, রেফারেন্স ডিভাইসের উপর ভিত্তি করে 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 এবং DUT-তে 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 : DUT-এর সিরিয়াল আইডি। শুধুমাত্র একটি ডিভাইস হোস্টের সাথে সংযুক্ত থাকলে এই প্যারামিটারের প্রয়োজন হয় না।

বিল্ডিং এবং নির্বাহ

Spectatio ফ্রেমওয়ার্ক স্বয়ংক্রিয়ভাবে পরীক্ষার APK এর অংশ হিসাবে তৈরি করা হয়েছে। পরীক্ষার APK তৈরি করতে, AOSP কোডবেস অবশ্যই স্থানীয় ওয়ার্কস্টেশনে থাকতে হবে। পরীক্ষার APK তৈরি হওয়ার পরে, ব্যবহারকারীকে অবশ্যই ডিভাইসে APK ইনস্টল করতে হবে এবং পরীক্ষাটি চালাতে হবে।

নিম্নলিখিত কোড নমুনা একটি পরীক্ষা APK এর বিল্ডিং, ইনস্টলেশন এবং সম্পাদন দেখায়।

# Build Test APK
make TEST-APK-NAME

# Install Test APK
adb -s DEVICE-SERIAL install -r PATH-FOR-BUILT-TEST-APK


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

এই আদেশগুলিতে:

  • TEST-APK-NAME : যে অ্যাপটি পরীক্ষা করা হবে তার নাম। উদাহরণস্বরূপ, Android.bp ফাইলে উল্লিখিত Wi-Fi সেটিংস পরীক্ষা করতে TEST-APK-NAME AndroidAutomotiveSettingsTests এ সেট করুন৷ স্বয়ংচালিত পরীক্ষার জন্য APK-এর নাম সংশ্লিষ্ট Android.bp ফাইলে পাওয়া যাবে।

  • DEVICE-SERIAL : DUT-এর সিরিয়াল আইডি। শুধুমাত্র একটি ডিভাইস হোস্টের সাথে সংযুক্ত থাকলে এই প্যারামিটারের প্রয়োজন হয় না।

  • config-file-path : ঐচ্ছিক পরামিতি যা শুধুমাত্র JSON কনফিগারেশন ফাইলে উল্লেখিত ননডিফল্ট ডিভাইস UI কনফিগারেশন প্রদানের জন্য প্রয়োজন। প্রদান না করা হলে, ফ্রেমওয়ার্ক পরীক্ষা চালানোর জন্য ডিফল্ট মান ব্যবহার করে।

  • PATH-FOR-BUILT-TEST-APK : make কমান্ডটি কার্যকর করার সময় যে পাথটি পরীক্ষা APK তৈরি করা হয়।

  • TEST-PACKAGE : টেস্ট প্যাকেজের নাম।

  • TEST-CLASSNAME : পরীক্ষার ক্লাসের নাম। উদাহরণস্বরূপ, ওয়াইফাই সেটিংস পরীক্ষার জন্য, পরীক্ষার প্যাকেজটি হল android.platform.tests এবং পরীক্ষার ক্লাসের নাম হল WifiSettingTest