TF में होस्ट-साइड डिवाइसलेस टेस्ट लिखें

इस पेज पर, होस्ट-साइड टेस्ट लिखने का तरीका बताया गया है. इसके लिए, जैसे कि Linux GCE इंस्टेंस पर चलने वाला टेस्ट. (इसके बारे में जानकारी पाने के लिए एक ऐसा होस्ट-आधारित परीक्षण लिखना, जिसके लिए उपकरण की आवश्यकता हो, यहां देखें ट्रेड फ़ेडरेशन में होस्ट-ड्रिवन टेस्ट लिखें.

होस्ट-साइड टेस्ट के टाइप

ट्रेड फ़ेडरेशन के ज़रिए, कई तरह के होस्ट-साइड टेस्ट चलाए जा सकते हैं (टीएफ़).

नेटिव (gtest) टेस्ट

नेटिव टेस्ट बनाना (gtests) का इस्तेमाल करें. अगर टेस्ट के लिए किसी डिवाइस की ज़रूरत नहीं है, तो इसे किसी host; इस तरीके से टेस्ट ज़्यादा तेज़ी से चलेगा. इस तरह के टेस्ट को कॉन्फ़िगर करने के लिए, ताकि चालू किए जा सकें अगर टेस्ट होस्ट है, तो TF रनर HostGTest का इस्तेमाल करें.

यह ट्रेडFed टेस्ट कॉन्फ़िगरेशन का सैंपल है:

<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 (Java) होस्ट टेस्ट, जैसे JUnit को ऐसे टेस्ट दिए जाते हैं जिन्हें किसी डिवाइस पर चलाने की ज़रूरत नहीं होती है. ये टेस्ट कोड देते हैं आपके Java प्रोजेक्ट का कवरेज मिलता है. ऐसे टेस्ट को टेस्ट पर चलाने के लिए कॉन्फ़िगर किया जा सकता है रनर का इस्तेमाल करके होस्ट करें HostTest.

ट्रेडFed के टेस्ट कॉन्फ़िगरेशन का सैंपल

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

टेस्ट कॉन्फ़िगरेशन, HeyWorldHostTest के लिए होस्ट-साइड JUnit टेस्ट करता है. ध्यान दें कि ऊपर दिया गया टेस्ट कॉन्फ़िगरेशन अपने-आप जनरेट हो सकता है. जब तक आपके टेस्ट को खास सेटअप या क्लीनअप की ज़रूरत न हो, तब तक इन पर भरोसा करें सही ट्रेडFed टेस्ट बनाने के लिए, ऑटो टेस्ट-कॉन्फ़िगरेशन जनरेशन कॉन्फ़िगरेशन.

JAR होस्ट टेस्ट लिखने का तरीका जानने के लिए, यहां जाएं: JAR (Java) होस्ट टेस्ट पेज.

आइसोलेटेड Java होस्ट टेस्ट

बिना डिवाइस के Java की जांच करने के लिए, आपको कम परफ़ॉर्मेंस लागत पर अलग से, बिना डिवाइस के जांच की जा सकती है. हालांकि, इसे चुनने से पहले कुछ प्रमुख बातों का ध्यान रखना होगा पर्यावरण को ध्यान में रखते हुए काम करना.

  • यह Robolectric और JUnit यूनिट टेस्ट के लिए डिफ़ॉल्ट रनर है
  • ट्रेडफ़ेड, आइसोलेशन एनवायरमेंट में सिर्फ़ JUnit टेस्ट के साथ काम करता है.
  • सिर्फ़ स्टैटिक तरीके से लिंक की गई डिपेंडेंसी ही काम करती हैं. किसी डिपेंडेंसी का एलान नहीं किया गया साथ ही, lib को क्लासपाथ पर शामिल किया जाता है.
  • आइसोलेशन रनर, क्लासपाथ पर सिर्फ़ शिम रनर और आपके टेस्ट जार को डालता है.
  • इस रनर के साथ हर टेस्ट रन करने पर, कुछ ओवरहेड तय होता है.

ट्रेडेड टेस्ट कॉन्फ़िगरेशन का सैंपल (अलग-अलग)

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

अपने-आप जनरेट होने की सुविधा के लिए, सूंग कॉन्फ़िगरेशन का सैंपल

ऊपर दिए गए टेस्ट कॉन्फ़िगरेशन को मैन्युअल तरीके से बनाने के बजाय, सूंग इनका इस्तेमाल करके अपने-आप कॉन्फ़िगरेशन जनरेट कर सकता है यहां दिया गया उदाहरण देखें.

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 का ट्री बिल्ड सबप्रोसेस क्लासपाथ का इस्तेमाल करता है. हालांकि, अन्य दो सबसे सही तरीके हैं, लेकिन यह विकल्प इन कामों के लिए ज़रूरी है रोबोलेक्ट्रिक टेस्ट करने से सफलता मिली.
  • java-folder विकल्प, सबप्रोसेस में इस्तेमाल किए जाने वाले Java रनटाइम को बदलने की अनुमति देता है. यह है क्योंकि Robolectric खास Java वर्शन को प्राथमिकता देता है, जो होस्ट सिस्टम का पसंदीदा JVM.
  • exclude-paths विकल्प की मदद से, सबप्रोसेस रनर किसी खास मॉड्यूल को लोड होने से रोक पाता है बिलकुल भी इस्तेमाल किया जा सकता है. यह तब फ़ायदेमंद होता है, जब JAR में ऐसी क्लास हों जिनसे बाहरी क्लास आती हों. इससे, लोड होने में गड़बड़ियां हो सकती हैं. SecurityException अपवादों को छोड़ने से बचने के लिए, java. एक सामान्य एक्सक्लूज़न है.

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>

Robolectric ऑटोजनरेशन के लिए सूंग कॉन्फ़िगरेशन का सैंपल

मैन्युअल तौर पर, ऊपर दिए गए कॉन्फ़िगरेशन की तरह टेस्ट कॉन्फ़िगरेशन बनाने के बजाय, सूंग इस उदाहरण में दिए गए एलान का इस्तेमाल करके, कॉन्फ़िगरेशन को अपने-आप जनरेट कर सकता है.

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 का इस्तेमाल करके ऐसी पार फ़ाइल बनाएं जो TF PythonBinaryHostTest ने चलाया.

ट्रेडFed के टेस्ट कॉन्फ़िगरेशन का सैंपल

<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>

टेस्ट सुइट की सेटिंग

किसी दिए गए बिल्ड के लिए होस्ट-साइड टेस्ट को टीएफ़ से ऐक्सेस करने के लिए, टेस्ट मॉड्यूल `test_suites` की सेटिंग इस पर सेट की गई `general-tests`:

test_suites: ["general-tests"],

इस सेटिंग को चुनने पर, टेस्ट को general-tests.zip में पैकेज कर दिया जाता है. test_suites के टारगेट के साथ.