הגדרת חבילות

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

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

הגדרות

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

המבנה של ITestSuite

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

לפעמים אנחנו מתייחסים ל-ITestSuite בתור מפעיל הסוויטות.

הפקודה 'חבילה' פועלת לפי השלבים הבאים במהלך ביצועה:

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

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

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

מנקודת המבט של Tradefed, ITestSuite הוא רק עוד בדיקה. זו בדיקה מורכבת, אבל היא עדיין בדיקה כמו כל IRemoteTest אחר. לכן, כשמציינים את הכלי להרצת המארז בתצורה של Tradefed, Tradefed פועל לפי התבנית הרגילה של התצורה: הרצת build_provider, ‏ target_preparer,‏ test (המארז שלנו במקרה הזה) ו-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

הקוד שלמעלה ירוץ את כל המודולים עם מסגרת כמטא-נתונים של רכיב.

דוגמה מלאה של 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, ולכל אחד מהם יש טיפול משויך ב-ModuleParametersHelper שמאפשר לשנות את הגדרת המודול כך שיפעל במצב הספציפי.

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

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

--enable-parameterized-modules

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

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

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

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