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

توضِّح هذه الصفحة كيفية كتابة اختبار من جهة المضيف لا يتطلّب جهازًا، مثل اختبار يتم تشغيله على آلة افتراضية على Linux في Google Compute Engine. (لمعرفة تفاصيل حول كتابة اختبار من جهة المضيف يتطلّب جهازًا، يُرجى الرجوع إلى مقالة كتابة اختبار من جهة المضيف في 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 (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) Host Tests صفحة.

اختبارات المضيف Java المعزولة

يمكن تشغيل اختبارات Java بدون جهاز في بيئة معزولة مع تكلفة أداء طفيفة. ومع ذلك، هناك بعض الاعتبارات الرئيسية التي يجب أخذها في الحسبان قبل اختيار استخدام هذه البيئة.

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