כתוב מבחן ללא מכשירים בצד המארח ב-TF

דף זה אומר לך כיצד לכתוב בדיקה בצד המארח שאינה דורשת מכשיר, כגון בדיקה שפועלת על מופע של Linux GCE. (לפרטים על כתיבת מבחן מונע מארח הדורש התקן, עיין בכתובת מבחן מונע מארח בפדרציה של סחר ).

סוגי בדיקות בצד המארח

אתה יכול להריץ כמה סוגים של בדיקות בצד המארח באמצעות Trade Federation (TF).

בדיקות מקוריות (gtest).

צור בדיקות מקוריות (gtests) כדי לבדוק פלטפורמה. אם הבדיקה אינה דורשת התקן, הפעל אותה על מארח; הבדיקה תרוץ הרבה יותר מהר ככה. כדי להגדיר בדיקות כאלה לרוץ על מארח בדיקה, השתמש ב-TF runner HostGTest .

זוהי תצורת בדיקה לדוגמה של TradeFed:

<configuration description="Runs hello_world_test.">
    <option name="null-device" value="true" />
    <test class="com.android.tradefed.testtype.HostGTest" >
        <option name="module-name" value="hello_world_test" />
    </test>
</configuration>

תצורת הבדיקה מריצה בדיקת gtest ( hello_world_test ) על מארח. ניתן ליצור אוטומטית את תצורת הבדיקה לדוגמה. אלא אם הבדיקה שלך זקוקה להגדרה או ניקוי מיוחדים, אתה יכול להסתמך על יצירת תצורת בדיקה אוטומטית כדי ליצור תצורות בדיקת TF מתאימות.

כדי להגדיר Gtest בצד המארח ולאפשר יצירת תצורת בדיקה אוטומטית, הגדר את host_supported ל- true ב- Android.bp , כמו ב- hello_world_test .

למידע נוסף על כתיבת מבחן יליד, ראה הוספת דוגמה חדשה למבחן ילידים .

בדיקות מארח JAR

בדיקות מארח JAR (Java) , כגון JUnit, הן בדיקות שאינן צריכות לפעול במכשיר, ומספקות כיסוי קוד של פרויקט ה-Java שלך. ניתן להגדיר בדיקות כאלה לרוץ על מארח בדיקה באמצעות הרץ HostTest .

דוגמה לתצורת בדיקה של TradeFed

<configuration description="Executes HelloWorldHostTest">
    <test class="com.android.tradefed.testtype.HostTest" >
        <option name="jar" value="HelloWorldHostTest.jar" />
    </test>
</configuration>

תצורת הבדיקה מריצה מבחן JUnit בצד המארח של HelloWorldHostTest . שימו לב שניתן ליצור אוטומטית את תצורת הבדיקה לעיל. אלא אם הבדיקה שלך זקוקה להגדרה או ניקוי מיוחדים, הסתמכו על יצירת תצורת הבדיקה האוטומטית כדי ליצור תצורת בדיקה נכונה של TradeFed.

לפרטים נוספים על איך לכתוב מבחן מארח JAR, עיין בדף בדיקות מארח JAR (Java) .

בדיקות מארח Java מבודדות

ניתן להריץ בדיקות Java ללא התקן בסביבת בידוד עם עלות ביצועים קלה. עם זאת, יש כמה שיקולים עיקריים שיש לעשות לפני שבוחרים להשתמש בסביבה זו.

  • זהו רץ ברירת המחדל המשמש עבור בדיקות Robolectric ו-JUnit
  • Tradefed תומך רק בבדיקות JUnit בסביבת הבידוד.
  • רק תלות מקושרות סטטית נתמכות. אין תלות שהוכרזה עם lib כלולה בנתיב הכיתה.
  • רץ הבידוד שם רק את רץ ה-shim ואת צנצנת הבדיקה שלך על המסלול.
  • יש כמות מסוימת של תקורה קבועה לכל ריצת בדיקה המבוצעת עם הרץ הזה.

תצורת בדיקה לדוגמא Tradefed (מבודד)

<configuration description="Executes HelloWorldHostTest">
    <test class="com.android.tradefed.testtype.IsolatedHostTest" >
        <option name="jar" value="HelloWorldHostTest.jar" />
    </test>
</configuration>

תצורת Soong לדוגמה להפקה אוטומטית

במקום ליצור באופן ידני את תצורת הבדיקה כמו לעיל , Soong יכול ליצור אוטומטית את התצורה על ידי שימוש בהצהרה כמו הדוגמה הזו.

java_test_host {
    name: "HelloWorldHostTest",

    test_options: {
        unit_test: true,
    },

    test_suites: ["general-tests"],

    srcs: ["test/**/*.java"],

    static_libs: [
        "junit",
    ],
}

בדיקות רובולקטריות

בדיקות רובולקטריות משתמשות באותו רץ כמו בדיקות המארח המבודדות, עם כמה אפשרויות מיוחדות.

  • האפשרות robolectric-resources מאפשרת להעביר כמה אפשרויות של שורת פקודה ספציפית ל-Robolectric לתוך תת-התהליך וכן מוסיפה את בניית העץ של android-all ל-classpath של תת-התהליך. בעוד שהשניים האחרים הם שיטות עבודה מומלצות, אפשרות זו היא חובה להפעלת בדיקות Robolectric בכל הצלחה.
  • אפשרות ה- java-folder מאפשרת לשנות את זמן הריצה של Java המשמש את תת-התהליך. זה הכרחי בגלל ש-Robolectric מעדיף גרסאות Java מסוימות שעשויות שלא להתיישר עם ה-JVM המועדף של המערכת המארחת.
  • האפשרות exclude-paths מאפשרת לרץ המשנה להימנע מטעינת מודולים מסוימים, דבר שימושי כאשר JAR מגיע עם מחלקות מיותרות שעלולות לגרום לשגיאות טעינה. java. היא אי הכללה נפוצה, כדי להימנע מהשלכת חריגים SecurityException .

תצורה רובולקטרית לדוגמה

<configuration description="Executes a Sample Robolectric Test">
    <option name="java-folder" value="prebuilts/jdk/jdk9/linux-x86/" />
    <option name="exclude-paths" value="java" />
    <option name="use-robolectric-resources" value="true" />
    <test class="com.android.tradefed.testtype.IsolatedHostTest">
        <option name="jar" value="RobolectricExampleTest.jar" />
    </test>
</configuration>

תצורת Soong לדוגמה עבור ייצור אוטומטי של רובולקטרי

במקום ליצור באופן ידני את תצורת הבדיקה כמו לעיל , Soong יכול ליצור אוטומטית את התצורה על ידי שימוש בהצהרה כמו הדוגמה הזו.

android_robolectric_test {
    name: "HelloWorldRoboTest",
    srcs: [
        "src/**/*.java",
    ],

    // Include the testing libraries
    static_libs: [
        "mockito-robolectric-prebuilt",
        "platform-test-annotations",
        "testng",
        "truth-prebuilt",
    ],

    instrumentation_for: "HelloWorldApp",
}

מבחן פייתון

אם לוגיקת הבדיקה כתובה ב-Python, השתמש בסוג build python_test_host כדי ליצור קובץ par שניתן להפעיל על ידי TF PythonBinaryHostTest .

דוגמה לתצורת בדיקה של TradeFed

<configuration description="Config to run atest unittests">
    <test class="com.android.tradefed.testtype.python.PythonBinaryHostTest" >
        <option name="par-file-name" value="atest_unittests" />
        <option name="test-timeout" value="2m" />
    </test>
</configuration>

הגדרת חבילת בדיקה

כדי שהמבחן בצד המארח יהיה נגיש על ידי TF עבור מבנה נתון, הגדר את הגדרת מודול הבדיקה `test_suites` ל- `general-tests` :

test_suites: ["general-tests"],

עם הגדרה זו, הבדיקה נארזת ל- general-tests.zip ביעד test_suites .