הגדרת חבילות

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

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

הגדרות

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

מבנה ITestSuite

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

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

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

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

    1. מריצים את ההגדרה ברמת המודול.
    2. מריצים בדיקות מודול.
    3. מריצים את ה-tear down ברמת המודול.
  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.