חבילה ב-Trended מתייחסת להגדרה שבה מריצים כמה בדיקות במסגרת תוכנית הרצה נפוצה שגורמת לביצוע הכולל.
ב-Tradefed, חבילות מופעלות באמצעות הכיתה ITestSuite
, שמאפשרת להוסיף ולהסיר בדיקות ללא קשר לאופן שבו הן מופעלות.
הגדרות
- חבילה: קבוצה של מודולי בדיקה שהוגדרו לפעול בהגדרה דומה ברמה העליונה כדי לדווח על התוצאות שלהם בהפעלה אחת.
- הגדרה ברמה העליונה: ההגדרה חלה על המכשירים לפני שמפעילים את המודולים של הבדיקה.
- ההגדרה הראשית: קובץ ה-XML של Tradefed ברמת החבילה שמתאר אילו מודולים צריך להריץ ואילו הגדרות ברמה העליונה צריך להשתמש בהן.
- הגדרה ברמת המודול: ההגדרה חלה על המכשירים מיד לפני הפעלת המודול. הן נקראות גם הגדרות ספציפיות למודול.
- הגדרת מודול: מתייחסת להגדרת ה-XML של
AndroidTest.xml
Tradefed שמתארת את המודולים ואת ההגדרה ברמת המודול שצריך לבצע. - מודול: יחידת בדיקה שמורכבת משלב הגדרה (הגדרה ברמת המודול), שלב ביצוע בדיקה ושלב של ניתוח.
- ניסיון חוזר בתוך המודול: ניסיון חוזר אוטומטי שמתבצע על ידי רתמת הבדיקה בתוך המודול.
- ניסיון חוזר לחבילת: הרצה מחדש מלאה של הבדיקות שבוצעו בעבר בחבילה.
המבנה של ITestSuite
ITestSuite
ב-Trendified הוא מחלקה בסיסית נפוצה שמובילה לביצוע של חבילה. הוא משותף לכל חבילות הבדיקות העיקריות, ובמיוחד את הכלי לבדיקת תאימות של Android (CTS) ו-Android Vendor Test Suite (VTS), ומבטיח חוויית ביצוע עקבית בכל הסוויטות.
לפעמים אנחנו מתייחסים ל-ITestSuite בתור מפעיל הסוויטות.
הכלי להרצת המארז פועל לפי השלבים הבאים:
- טוענים את ההגדרות של המודול ומחליטים איזו קבוצה צריך להריץ.
מריצים כל מודול:
- הרצת הגדרה ברמת המודול.
- להריץ בדיקות מודול.
- מריצים ניתוח ברמת המודול.
מדווחים על התוצאות.
הגדרה ברמה העליונה
מנקודת המבט של Tradefed, ITestSuite
הוא רק עוד בדיקה. הוא מורכב, אבל הוא עדיין בדיקה כמו כל IRemoteTest
אחר. לכן, כשמציינים את חבילת ה-ריצה ב-Docker בהגדרה של Trapaid, הנתונים ב-Trendified פועלים לפי התבנית הרגילה של ההגדרות: 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
הקוד שלמעלה ירוץ את כל המודולים עם מסגרת כמטא-נתונים של רכיב.
דוגמה מלאה ל-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
הבסיסי.