הגדרת חבילות

חבילה ב-Tradefed מתייחסת להגדרה שבה כמה בדיקות מופעלות באמצעות כלי משותף להרצת בדיקות שמניע את ההרצה הכוללת.

ב-Tradefed, חבילות מופעלות דרך המחלקה ITestSuite, שמאפשרת להוסיף ולהסיר בדיקות בלי קשר לאופן ההפעלה שלהן.

הגדרות

  • חבילה: קבוצה של מודולי בדיקה שהוגדרו להפעלה במסגרת הגדרה דומה ברמה העליונה כדי לדווח על התוצאות שלהם בהפעלה אחת.
  • הגדרה ברמה העליונה: הגדרה שמוחלת על המכשירים לפני שמריצים את אחד ממודולי הבדיקה.
  • ההגדרה הראשית: הגדרת XML של Tradefed ברמת החבילה שמתארת אילו מודולים צריכים לפעול ואיזו הגדרה ברמה העליונה צריכה לשמש.
  • הגדרה ברמת המודול: ההגדרה מוחלת על המכשירים ממש לפני הפעלת המודול. הן נקראות גם הגדרות ספציפיות למודול.
  • הגדרת מודול: מתייחסת להגדרת ה-XML של AndroidTest.xml Tradefed שמתארת את המודולים ואת ההגדרה ברמת המודול שצריך לבצע.
  • מודול: יחידת בדיקה שמורכבת משלב הגדרה (הגדרה ברמת המודול), שלב של הפעלת הבדיקה ושלב של ניקוי.
  • ניסיון חוזר בתוך המודול: ניסיון חוזר אוטומטי שמתבצע על ידי ה-harness בתוך המודול.
  • ניסיון חוזר של חבילת הבדיקות: הפעלה מחדש מלאה של הבדיקות הקודמות בחבילה שנכשלו.

מבנה ITestSuite

ITestSuite ב-Tradefed מתייחס למחלקת הבסיס הנפוצה שמפעילה את חבילת הבדיקות. הוא משותף לכל חבילות הבדיקה העיקריות, במיוחד ל-Android Compatibility Test Suite (CTS) ול-Android Vendor Test Suite (VTS), ומבטיח חוויית ביצוע עקבית בכל החבילות.

לפעמים אנחנו מתייחסים אל ITestSuite כאל suite runner.

הכלי להרצת חבילות הבדיקה פועל לפי השלבים הבאים:

  1. טוענים את ההגדרה של המודול וקובעים איזו קבוצה תופעל.
  2. מריצים כל מודול:

    1. מריצים את ההגדרה ברמת המודול.
    2. מריצים בדיקות מודולים.
    3. מריצים פירוק ברמת המודול.
  3. מדווחים על התוצאות.

הגדרה ברמה העליונה

מנקודת המבט של Tradefed, ‏ ITestSuite היא פשוט עוד בדיקה. היא מורכבת, אבל היא עדיין רק בדיקה כמו כל בדיקה אחרת IRemoteTest. לכן, כשמציינים את כלי ההרצה של חבילת הבדיקות בהגדרת Tradefed, ‏ Tradefed פועל לפי התבנית הרגילה של ההגדרה: הרצת build_provider, ‏ target_preparer, בדיקה (חבילת הבדיקות שלנו במקרה הזה) ו-target_cleaner.

הרצף הזה בהגדרות של Tradefed שמכיל את ITestSuite הוא ההגדרה ברמה העליונה.

דוגמה:

<configuration description="Common config for Compatibility suites">

    <build_provider class="com.android.compatibility.common.tradefed.build.CompatibilityBuildProvider" />
    <!-- Setup applied before the suite: so everything running in the suite will
    have this setup beforehand -->
    <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
        <option name="run-command" value="settings put global package_verifier_enable 0" />
        <option name="teardown-command" value="settings put global package_verifier_enable 1"/>
    </target_preparer>

    <!-- Our ITestSuite implementation -->
    <test class="com.android.compatibility.common.tradefed.testtype.suite.CompatibilityTestSuite" />

    <result_reporter class="com.android.compatibility.common.tradefed.result.ConsoleReporter" />
</configuration>

מטא-נתונים של מודול

מטא נתונים של מודול הם מידע נוסף שמצוין במודול הבדיקה AndroidTest.xml. המטא נתונים האלה מאפשרים לציין מידע נוסף על המודול, ואפשר לסנן מודולים באמצעות המטא נתונים.

מטא-נתונים לדוגמה:

<option name="config-descriptor:metadata" key="component" value="framework" />
<option name="config-descriptor:metadata" key="parameter" value="instant_app" />

דוגמה למסנן במטא-נתונים:

--module-metadata-include-filter component=framework

הפקודה שלמעלה תפעיל את כל המודולים עם framework כמטא-נתונים של component.

דוגמה מלאה של AndroidTest.xml:

<configuration description="Config for CTS Gesture test cases">
    <option name="test-suite-tag" value="cts" />
    <!-- Metadata -->
    <option name="config-descriptor:metadata" key="component" value="framework" />
    <option name="config-descriptor:metadata" key="parameter" value="instant_app" />
    <!-- End: metadata -->
    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
        <option name="cleanup-apks" value="true" />
        <option name="test-file-name" value="CtsGestureTestCases.apk" />
    </target_preparer>
    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
        <option name="package" value="android.gesture.cts" />
        <option name="runtime-hint" value="10m50s" />
    </test>
</configuration>

מודול עם פרמטרים

סוג מיוחד של מטא-נתונים הוא parameter.

<option name="config-descriptor:metadata" key="parameter" value="instant_app" />

המטא-נתונים האלה מציינים שהמודול צריך לפעול במצב אחר, למשל כאפליקציה מיידית, במקום במצב אפליקציה רגיל.

כל המצבים או הפרמטרים האפשריים מתוארים ב-ModuleParameters ויש להם handler משויך ב-ModuleParametersHelper שמאפשר לשנות את הגדרת המודול כך שיפעל במצב מסוים.

לדוגמה, מצב האפליקציה ללא התקנה מאלץ את התקנת ה-APK כמצב ללא התקנה.

כדי שהפרמטרים יועברו, צריך להפעיל אותם בשורת הפקודה באמצעות:

--enable-parameterized-modules

אפשר גם להפעיל מצב נתון יחיד באמצעות הפקודה:

--enable-parameterized-modules --module-parameter <Mode>

--enable-parameterized-modules --module-parameter INSTANT_APP

כשמריצים גרסה עם פרמטרים של מודול, התוצאות מדווחות תחת שם מודול עם פרמטרים, לדוגמה CtsGestureTestCases[instant] לעומת בסיס CtsGestureTestCases.