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

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

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

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

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

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

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

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

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

স্থাপত্য

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

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

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

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

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

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

ইউটিলিটি হেল্পার ক্লাস ফ্রেমওয়ার্ক দ্বারা ব্যবহৃত হয়। উদাহরণস্বরূপ, AutoJsonUtility.java হল একটি ইউটিলিটি ক্লাস যা প্রদত্ত ডিভাইস 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 app
    autoApplicationHelper.open();
  }

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

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

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

Spectatio ফ্রেমওয়ার্ক ডিভাইস 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 এর সেটিংস দ্বারা ওভাররাইড করা হয়। এই উদাহরণে:

  • ইন্টারনেট সেটিংসের নাম দেওয়া হয়েছে নেটওয়ার্ক এবং রেফারেন্স ডিভাইসে ইন্টারনেট এবং DUT-তে সংযোগ

  • তারিখ এবং সময় সেটিংস রেফারেন্স ডিভাইসের জন্য সেটিংস > তারিখ এবং সময় এবং সেটিংস > সিস্টেম > DUT-এর জন্য তারিখ ও সময় পাওয়া যায়।

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

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

JSON কনফিগারেশন ফাইলটি প্রস্তুত হলে, এটি নিম্নলিখিত কোড ব্লকে দেখানো হিসাবে রানটাইমে প্রদান করা হয়:

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

এই আদেশে:

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

  • PATH-TO-JSON-FILE : হোস্ট মেশিনে JSON ফাইলের পাথ।

কনফিগারেশন বিন্যাস

নিম্নলিখিত কী এবং মান সহ কনফিগারেশনে পাঁচটি শীর্ষ-স্তরের বস্তু রয়েছে:

অবজেক্ট বর্ণনা
PACKAGES বিভিন্ন অ্যাপের প্রধান প্যাকেজ বর্ণনা করে এমন একটি বস্তু, যা সেই অ্যাপটি কখন অগ্রভাগে থাকে তা নির্ধারণ করতে ব্যবহৃত হয়।
ACTIONS বিভিন্ন ক্রিয়াকলাপের ধরন এবং পরামিতি নির্দেশ করে এমন একটি বস্তু। উদাহরণস্বরূপ, স্ক্রোল করার জন্য বোতাম বা অঙ্গভঙ্গি ব্যবহার করবেন কিনা।
COMMANDS একটি বস্তু নির্দেশ করে যা বিভিন্ন ক্রিয়া সম্পাদন করে।
UI_ELEMENTS UI অটোমেটর `BySelectors` নির্মাণ করতে ব্যবহৃত একটি বস্তু যা UI উপাদান নির্বাচন করে (নীচে বিস্তারিত বর্ণনা করা হয়েছে)।
WORKFLOWS কর্মের ক্রম যা উচ্চ-স্তরের কাজগুলি সম্পন্ন করে (নীচে বিশদে বর্ণনা করা হয়েছে)।

UI উপাদান

প্রতিটি UI উপাদানের একটি TYPE থাকে যা নির্দিষ্ট করে যে UI অটোমেটর উপাদানটি সনাক্ত করতে কী সন্ধান করবে (যেমন রিসোর্স আইডি, পাঠ্য এবং বিবরণ) এবং সেই ধরণের সাথে সম্পর্কিত কনফিগারেশন মানগুলি। সাধারণভাবে, যখনই একজন সাহায্যকারী এই কনফিগারেশনটি ব্যবহার করে স্ক্রিনে একটি উপাদান সনাক্ত করে, তখন এটি ঠিক একটি উপাদান পায়। যদি একাধিক উপাদান কনফিগারেশনের সাথে মেলে তবে পরীক্ষায় একটি নির্বিচারে ব্যবহার করা হয়। অতএব, কনফিগারেশনটি (সাধারণত) বিশেষভাবে যথেষ্ট পরিমাণে লেখা উচিত যাতে এটি প্রাসঙ্গিক প্রসঙ্গে একটি উপাদানে সংকুচিত হয়।

টেক্সট

এটি হল সবচেয়ে সহজ UI উপাদানের ধরন। UI উপাদানটি এর পাঠ্য দ্বারা চিহ্নিত করা হয় এবং একটি সঠিক মিল প্রয়োজন৷

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

TEXT_CONTAINS

TEXT এর মতোই, শুধুমাত্র নির্দিষ্ট VALUE উপাদানটির পাঠ্যের সাথে মিলিত হওয়ার জন্য কোথাও উপস্থিত হওয়া প্রয়োজন।

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

বর্ণনা

উপাদানটিকে এর বিষয়বস্তু বর্ণনা বৈশিষ্ট্য দ্বারা চিহ্নিত করুন, একটি সঠিক মিল প্রয়োজন।

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

RESOURCE_ID

উপাদানটিকে তার রিসোর্স আইডি দ্বারা চিহ্নিত করুন, ঐচ্ছিকভাবে সেই আইডির প্যাকেজ উপাদানটিও পরীক্ষা করে। PACKAGE কী ঐচ্ছিক; যদি বাদ দেওয়া হয়, যে কোনো প্যাকেজ মিলবে, এবং শুধুমাত্র নিম্নলিখিত আইডির অংশ :id/ বিবেচনা করা হবে।

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

ক্লিকযোগ্য, স্ক্রলযোগ্য

এটি ক্লিকযোগ্য বা স্ক্রোলযোগ্য কিনা তার উপর ভিত্তি করে উপাদানটি সনাক্ত করুন। এগুলি খুবই বিস্তৃত উপাদানের ধরন, এবং সাধারণত অন্য উপাদানের ধরনকে সংকুচিত করতে সাহায্য করার জন্য শুধুমাত্র একটি MULTIPLE ব্যবহার করা উচিত। FLAG কী ঐচ্ছিক, এবং ডিফল্ট থেকে true

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

ক্লাস

এর ক্লাসের উপর ভিত্তি করে উপাদানটি সনাক্ত করুন।

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

HAS_ANCESTOR

এর পূর্বপুরুষদের উইজেট অনুক্রমটি দেখে উপাদানটিকে সনাক্ত করুন। ANCESTOR কী একটি বস্তু ধারণ করে যা পূর্বপুরুষকে সনাক্ত করে। DEPTH কী নির্দেশ করে যে অনুক্রমটি কতটা উপরে দেখতে হবে। DEPTH ঐচ্ছিক এবং একটি ডিফল্ট মান 1

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

HAS_DESCENDANT

উপাদানটিকে তার সন্তানদের অনুক্রমটি নিচে দেখে শনাক্ত করুন। DESCENDANT কী এমন একটি বস্তু ধারণ করে যা শিশুর সন্ধান করতে নির্দিষ্ট করে। DEPTH কী নির্দেশ করে যে অনুক্রমটি কতটা উপরে দেখতে হবে। DEPTH ঐচ্ছিক এবং একটি ডিফল্ট মান 1

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

একাধিক

একাধিক যুগপত অবস্থার উপর ভিত্তি করে উপাদানটি সনাক্ত করুন, যার সবকটি অবশ্যই পূরণ করতে হবে।

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

এই উদাহরণে, কনফিগারেশনটি একটি RelativeLayout চিহ্নিত করে যেটির depth 2 এ একটি বংশধর রয়েছে, যার পাঠ্য Permission manager রয়েছে।

কর্মপ্রবাহ

একটি ওয়ার্কফ্লো একটি নির্দিষ্ট কাজ সম্পন্ন করতে ব্যবহৃত ক্রিয়াগুলির একটি ক্রম প্রতিনিধিত্ব করে, যা ডিভাইসের প্রকার থেকে ডিভাইসের প্রকারে যথেষ্ট আলাদা হতে পারে এবং কোডের তুলনায় কনফিগারেশনে উপস্থাপন করার জন্য আরও নমনীয়।

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

প্রতিটি ওয়ার্কফ্লো হল একটি কী-মান পেয়ার যেখানে কী হল ওয়ার্কফ্লোয়ের নাম এবং মান হল কর্ম সম্পাদনের একটি অ্যারে৷ প্রতিটি কর্মের একটি NAME , একটি TYPE , (সাধারণত) একটি CONFIG এবং (কখনও কখনও) একটি SWIPE_CONFIG বা SCROLL_CONFIG থাকে। বেশিরভাগ TYPE-এর জন্য, CONFIG হল একটি UI_ELEMENT কী সহ একটি বস্তু যার মান একটি UI এলিমেন্ট এন্ট্রির মতো একই রূপ নেয় (উপরে দেখুন)। এই প্রকারগুলি হল:

প্রেস করুন
দীর্ঘ চাপ
ক্লিক
LONG_CLICK
CLICK_IF_EXIST
HAS_UI_ELEMENT_IN_FOREGROUND
SCROLL_TO_FIND_AND_CLICK করুন
SCROLL_TO_FIND_AND_CLICK_IF_EXIST
SWIPE_TO_FIND_AND_CLICK
SWIPE_TO_FIND_AND_CLICK_IF_EXIST

অন্যান্য প্রকারের জন্য, কনফিগারেশনের বিবরণ হল:

অবজেক্ট বর্ণনা
COMMAND একটি TEXT মান সহ একটি অবজেক্ট যাতে এক্সিকিউট করার কমান্ড থাকে।
HAS_PACKAGE_IN_FOREGROUND প্যাকেজ ধারণকারী একটি TEXT মান সহ একটি বস্তু৷
SWIPE একটি SWIPE অ্যাকশনের জন্য CONFIG key বাদ দিন। এটি শুধুমাত্র SWIPE_CONFIG ব্যবহার করে
WAIT_MS অপেক্ষা করার জন্য মিলিসেকেন্ডের সংখ্যা ধারণকারী একটি TEXT মান সহ একটি বস্তু৷

স্ক্রোল- এবং সোয়াইপ-সম্পর্কিত ক্রিয়াগুলির জন্য অতিরিক্ত কনফিগারেশন প্রয়োজন, নিম্নরূপ:

SCROLL_CONFIG

অবজেক্ট বর্ণনা
SCROLL_ACTION হয় USE_GESTURE বা USE_BUTTON
SCROLL_DIRECTION হয় HORIZONTAL বা VERTICAL
SCROLL_ELEMENT UI এলিমেন্ট কনফিগারেশনের মতো একই ফর্ম ব্যবহার করে স্ক্রোল করার জন্য কন্টেইনারকে নির্দেশ করে এমন একটি বস্তু (উপরে দেখুন)।
SCROLL_FORWARD , SCROLL_BACKWARD ফরোয়ার্ড এবং ব্যাকওয়ার্ড স্ক্রোল বোতাম ( SCROLL_ACTION USE_BUTTON হলে প্রয়োজনীয়)।
SCROLL_MARGIN যদি SCROLL_ACTION হয় USE_GESTURE , ড্র্যাগটি শুরু এবং বন্ধ করার জন্য কন্টেইনারের প্রান্ত থেকে দূরত্ব যা স্ক্রোলটি সম্পাদন করতে ব্যবহৃত হবে ( ঐচ্ছিক, ডিফল্ট = 10)।
SCROLL_WAIT_TIME যদি SCROLL_ACTION হয় USE_GESTURE , ক্লিক করার জন্য একটি বস্তু অনুসন্ধান করার সময় স্ক্রোল অঙ্গভঙ্গির মধ্যে অপেক্ষা করার সময় মিলিসেকেন্ডে। ( ঐচ্ছিক, ডিফল্ট = 1)।

SWIPE_CONFIG

অবজেক্ট বর্ণনা
SWIPE_DIRECTION হয় TOP_TO_BOTTOM , BOTTOM_TO_TOP , LEFT_TO_RIGHT , অথবা RIGHT_TO_LEFT
SWIPE_FRACTION

নিম্নলিখিত এক :

  • FULL : স্ক্রীন এজ থেকে স্ক্রীন এজ পর্যন্ত সোয়াইপ জেসচার

    বা,
  • DEFAULT : স্ক্রীন প্রান্ত থেকে স্ক্রীন প্রান্ত, প্রতিটি পাশে একটি পাঁচ (5) পিক্সেল বাফার সহ।

    বা,
  • THREE_QUARTER , HALF , or QUARTER : সোয়াইপ অঙ্গভঙ্গি স্ক্রিনের প্রান্ত থেকে পাঁচ (5) পিক্সেল শেষ করে, এবং এমনভাবে শুরু হয় যাতে এটি স্ক্রিনের নির্দেশিত দূরত্বকে কভার করে।
NUMBER_OF_STEPS সোয়াইপ করার জন্য ব্যবহৃত ধাপের সংখ্যা। segmentSteps দেখুন।

নির্মাণ এবং কার্যকর

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

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

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

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

  • TEST-APK-NAME : যে অ্যাপটি পরীক্ষা করা হবে তার নাম। উদাহরণস্বরূপ, Android.bp ফাইলে উল্লিখিত 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

অটোমোটিভ স্নিপেট লাইব্রেরি

অটোমোটিভ স্নিপেট লাইব্রেরি হল Android ওপেন সোর্স প্রজেক্ট (AOSP) এর জন্য Android টেস্ট লাইব্রেরির একটি সেট যা স্বয়ংচালিত অ্যাপ এবং পরিষেবাগুলির সাথে ইন্টারঅ্যাক্ট করার জন্য ডিজাইন করা হয়েছে। এটি একটি হোস্ট (পরীক্ষা) মেশিন থেকে একটি অ্যান্ড্রয়েড-চালিত ডিভাইসে দূরবর্তী পদ্ধতি কল (RPCs) চালানোর জন্য একটি সুবিধাজনক প্রক্রিয়া সহ Spectatio ব্যবহার করে।

এবার শুরু করা যাক

আপনি শুরু করার আগে, এই বিভাগগুলি পর্যালোচনা করুন।

পূর্বশর্ত

  • পাইথন 3.x হোস্ট মেশিনে ইনস্টল করা আছে।
  • প্রয়োজনীয় বিল্ড সরঞ্জাম সহ AOSP পরিবেশ সেটআপ।
  • অ্যাডবি অ্যাক্সেস সহ একটি অ্যান্ড্রয়েড অটোমোটিভ ডিভাইস (এমুলেটর বা শারীরিক ডিভাইস)।

সংকলন

অটোমোটিভ স্নিপেট লাইব্রেরি প্রদত্ত বিভিন্ন স্নিপেট কম্পাইল করতে, আপনি প্রদত্ত android.bp ফাইলটি ব্যবহার করতে পারেন। APK কম্পাইল করার জন্য পূর্ববর্তী বিভাগে নিম্নলিখিত কমান্ডগুলি।

স্থাপনা

স্নিপেট লাইব্রেরিগুলি সফলভাবে কম্পাইল করার পরে, পূর্ববর্তী বিভাগে উল্লিখিত adb install কমান্ড ব্যবহার করে লক্ষ্য ডিভাইসে ফলিত APKগুলি স্থাপন করুন।

পরীক্ষা চালান

স্নিপেট লাইব্রেরিগুলি স্বয়ংচালিত সিস্টেমের সাথে ইন্টারঅ্যাক্ট করার জন্য বেশ কয়েকটি RPC পদ্ধতি প্রকাশ করে। এই পদ্ধতিগুলি হোস্ট মেশিন থেকে মোবলি ফ্রেমওয়ার্কের মাধ্যমে আহ্বান করা যেতে পারে। আপনি Mobly পরীক্ষার পরিবেশ সেট আপ করেছেন বলে ধরে নিন, আপনি একটি ইন্টারেক্টিভ পাইথন শেল খুলতে snippet_shell.py স্ক্রিপ্ট ব্যবহার করতে পারেন, যেখানে আপনি ডিভাইসে ম্যানুয়ালি RPC পদ্ধতি ব্যবহার করতে পারেন। আমন্ত্রণের উদাহরণ:

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

<serial> ডিভাইসের সিরিয়াল নম্বর দিয়ে প্রতিস্থাপন করুন, যেটি আপনি adb ডিভাইসের মাধ্যমে পেতে পারেন যদি একাধিক ডিভাইস সংযুক্ত থাকে।

লাইব্রেরি অন্তর্ভুক্ত

অটোমোটিভ স্নিপেট লাইব্রেরিতে নিম্নলিখিত স্নিপেট লাইব্রেরি এবং সাহায্যকারী অন্তর্ভুক্ত রয়েছে:

  • অটোমোটিভ স্নিপেট: যানবাহন ক্রিয়াকলাপের সাথে সম্পর্কিত API প্রদান করে, যেমন ডায়ালিং, ভলিউম নিয়ন্ত্রণ, গাড়ির হার্ড কী, এবং মিডিয়া সেন্টার ইন্টারঅ্যাকশন।

  • PhoneSnippet: কল হ্যান্ডলিং, পরিচিতি ব্রাউজিং এবং SMS অপারেশন সহ টেলিফোনি-সম্পর্কিত API প্রদান করে।

অটোমোটিভ স্নিপেট এবং ফোনস্নিপেট কিছু সাধারণ যুক্তি শেয়ার করে। বিশেষত, আপনি একটি স্বয়ংচালিত এবং একটি ফোন ডিভাইস যুক্ত করতে ব্লুটুথ-সম্পর্কিত RCP কলগুলিকে আক্রমণ করতে পারেন। এই bt_discovery_test দেখায় কিভাবে।