اكتب اختبارًا بدون أجهزة من جانب المضيف في TF

تخبرك هذه الصفحة بكيفية كتابة اختبار من جانب المضيف لا يتطلب جهازًا، مثل الاختبار الذي يتم تشغيله على مثيل Linux GCE. (للحصول على تفاصيل حول كتابة اختبار يستند إلى المضيف ويتطلب جهازًا، راجع كتابة اختبار يحركه المضيف في الاتحاد التجاري .)

أنواع الاختبارات من جانب المضيف

يمكنك إجراء عدة أنواع من الاختبارات من جانب المضيف من خلال الاتحاد التجاري (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 في مسار الفصل.
  • يضع عداء العزل فقط عداء الرقائق وجرة الاختبار الخاصة بك على مسار الفصل الدراسي.
  • هناك مقدار معين من الحمل الثابت لكل تشغيل اختباري يتم تنفيذه باستخدام هذا العداء.

عينة من تكوين اختبار 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 إلى مسار فئة العملية الفرعية. في حين أن الخيارين الآخرين هما أفضل الممارسات، فإن هذا الخيار إلزامي لتشغيل اختبارات Robolectric بأي نجاح.
  • يسمح خيار java-folder بتغيير وقت تشغيل جافا الذي تستخدمه العملية الفرعية. يعد هذا ضروريًا نظرًا لتفضيل 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_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 .