نوشتن آزمایش بدون دستگاه در سمت میزبان در TF

این صفحه به شما می‌گوید چگونه آزمایشی در سمت میزبان بنویسید که به دستگاه نیاز نداشته باشد، مثلاً آزمایشی که در نمونه Linux GCE اجرا می‌شود. (برای جزئیات مربوط به نوشتن آزمون میزبان‌محور که به دستگاه نیاز دارد، به نوشتن آزمون میزبان‌محور در Trade Federation مراجعه کنید.)

انواع آزمایش سمت میزبان

می‌توانید چندین نوع آزمایش سمت میزبان را ازطریق Trade Federation (TF) اجرا کنید.

آزمایش‌های بومی (gtest)

برای آزمایش کردن پلاتفرم، آزمون‌های بومی (gtests) ایجاد کنید. اگر آزمایش به دستگاه نیاز ندارد، آن را روی میزبان اجرا کنید؛ آزمایش به این روش خیلی سریع‌تر اجرا خواهد شد. برای پیکربندی چنین آزمایش‌هایی برای اجرا در میزبان آزمایشی، از دونده TF 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 (جاوا)، مانند JUnit، آزمایش‌هایی هستند که نیازی به اجرا در دستگاه ندارند و پوشش کد پروژه جاوا شما را فراهم می‌کنند. چنین آزمایش‌هایی را می‌توان بااستفاده از اجراکننده 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 بدون دستگاه را می‌توان در محیطی مجزا با هزینه عملکردی اندک اجرا کرد. بااین‌حال، قبل‌از انتخاب استفاده از این محیط، باید چند ملاحظه مهم را درنظر بگیرید.

  • این اجراکننده پیش‌فرض برای آزمایش‌های واحد Robolectric و JUnit استفاده می‌شود
  • Tradefed فقط از آزمایش‌های JUnit در محیط ایزوله‌سازی پشتیبانی می‌کند.
  • فقط وابستگی‌های پیوندشده به‌صورت ایستا پشتیبانی می‌شود. هیچ وابستگی‌ای اعلام نشده است که با lib در مسیر کلاس گنجانده شود.
  • دونده جداسازی فقط دونده میان‌گیر و فایل jar آزمایش شما را در مسیر کلاس قرار می‌دهد.
  • برای هر اجرای آزمایشی که با این دونده اجرا می‌شود، مقداری سربار ثابت وجود دارد.

پیکربندی آزمایشی 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

آزمایش‌های Robolectric از همان اجراکننده آزمایش‌های میزبان مجزا با چند گزینه ویژه استفاده می‌کنند.

  • گزینه robolectric-resources چند گزینه خط فرمان Robolectric-specific را فعال می‌کند تا به زیرفرایند منتقل شود و همچنین ساختار درختی android-all را به مسیر کلاس زیرفرایند اضافه می‌کند. درحالی‌که دو گزینه دیگر روال‌های مطلوب هستند، این گزینه برای اجرای موفقیت‌آمیز آزمایش‌های Robolectric الزامی است.
  • گزینه java-folder امکان تغییر زمان اجرای Java را که توسط زیرفرایند استفاده می‌شود فراهم می‌کند. این کار لازم است زیرا Robolectric نسخه‌های خاصی از Java را ترجیح می‌دهد که ممکن است با JVM ترجیحی سیستم میزبان هم‌خوانی نداشته باشد.
  • گزینه exclude-paths به اجراکننده زیرفرایند اجازه می‌دهد از بار کردن واحدهای خاصی به‌طور کامل اجتناب کند که در مواقعی که فایل JAR دارای کلاس‌های اضافی است که می‌توانند باعث خطاهای بار شوند مفید است. ‫java. یک استثنای رایج است، برای جلوگیری از پرتاب استثناهای SecurityException.

پیکربندی نمونه Robolectric

<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 برای تولید خودکار Robolectric

به‌جای ایجاد دستی پیکربندی آزمایشی مانند بالا، 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

اگر منطق آزمایش در Python نوشته شده است، از نوع ساخت 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 بسته‌بندی می‌شود.