SDV Test Framework लाइब्रेरी

इस पेज पर, SDV टेस्ट फ़्रेमवर्क लाइब्रेरी के बारे में खास जानकारी दी गई है. साथ ही, टेस्ट सेट अप करने, कॉन्फ़िगर करने, और उन्हें चलाने का तरीका बताया गया है. शुरू से आखिर तक पूरी जांच करने के लिए, SDV टेस्ट फ़्रेमवर्क का इस्तेमाल करें. यह टूल, Mobly पर आधारित है. इसमें Python में टेस्ट लिखे जाते हैं.

टेस्ट करने का तरीका चुनना

टेस्ट लिखने से पहले, पुष्टि करने के दायरे से मैच करने वाला टेस्ट रनर चुनें:

टेस्ट का दायरा Soong मॉड्यूल टाइप एक्ज़ीक्यूशन टूल कब इस्तेमाल करें
सर्विस बंडल यूनिट टेस्ट rust_test, rust_test_host या cc_test atest होस्ट या किसी Cuttlefish वर्चुअल मशीन (वीएम) पर, Rust या C++ के अलग-अलग कारोबारी नियम, डेटा ट्रांसफ़ॉर्मेशन या हेल्पर क्रेट की पुष्टि करें.
शुरू से आखिर तक और मल्टी-वीएम सिस्टम से जुड़ी जांच python_test_host (SDV Test Framework) atest या CATBox एक से तीन वीएम में, सर्विस बंडल लाइफ़साइकल ऑर्केस्ट्रेशन, इंटर-वीएम कम्यूनिकेशन, SOME/IP ब्रिजिंग या हार्डवेयर टारगेट की पुष्टि करें.

एनवायरमेंट सेट अप करना

इस पेज पर यह माना गया है कि आपने एसडीवी के लिए अपना वर्कस्टेशन पहले ही सेट अप कर लिया है. फ़्रेमवर्क टेस्ट चलाने के लिए, virtualenv इंस्टॉल करें.

Python डिपेंडेंसी

Android में डिपेंडेंसी मैनेज करने के लिए, हमारा सुझाव है कि बिल्ड कॉन्फ़िगरेशन का इस्तेमाल करके, टेस्ट, Python, और उनकी डिपेंडेंसी को एक्ज़ीक्यूटेबल के तौर पर पैकेज करें. आपको एसडीवी टेस्टिंग रिपॉज़िटरी में इस तरीके का पालन करना होगा.

SDV Test Framework लाइब्रेरी, डिफ़ॉल्ट रूप से ये डिपेंडेंसी उपलब्ध कराती है:

  • mobly
  • absl-py टेस्ट में पैरामीटर का इस्तेमाल करने के लिए ज़रूरी है.
  • pexpect इंटरैक्टिव कमांड की सुविधा के लिए ज़रूरी है.
  • ptyprocess इंटरैक्टिव कमांड की सुविधा के लिए ज़रूरी है.

अगर आपको टेस्ट के लिए खास डिपेंडेंसी की ज़रूरत है, तो उन्हें टेस्ट की Android.bp फ़ाइल में शामिल करें:

python_test_host {
    …
    libs: [
        "<DEPENDENCY1>",
        "<DEPENDENCY2>",
        …
    ],
    …
}

सिस्टम से जुड़ी जांच के टाइप

SDV टेस्ट फ़्रेमवर्क का इस्तेमाल करके, सिस्टम टेस्ट बनाए जाते हैं. यह फ़्रेमवर्क, इन टाइप के बीच अंतर करता है. जांच को सही तरीके से कैटगरी में बांटें:

  • सैंपल टेस्ट: एसडीवी की सैंपल सेवाओं को चलाएं और पुष्टि करें कि नतीजा, उम्मीद के मुताबिक आउटपुट से मेल खाता हो.
  • E2E टेस्ट: SDV की सैंपल सेवाओं का इस्तेमाल न करें.
  • लंबे समय तक चलने वाले टेस्ट: इन्हें लंबे समय तक चलने वाले टेस्ट के लिए डिज़ाइन किया गया है.
  • परफ़ॉर्मेंस टेस्ट: perfetto लाइब्रेरी का इस्तेमाल करें.
  • हार्डवेयर टेस्ट: इन्हें सिर्फ़ फ़िज़िकल डिवाइस पर चलाया जा सकता है, न कि Cuttlefish (CF) पर.

टेस्ट बनाना

फ़्रेमवर्क का इस्तेमाल करके लिखे गए सभी टेस्ट, टेस्टिंग रिपॉज़िटरी में होने चाहिए. जांच की सटीक जगह, उसके टाइप पर निर्भर करती है. डायरेक्ट्री पाथ, Python टेस्ट क्लास टेंप्लेट, Android.bp नियमों, और Mobly कोडिंग के दिशा-निर्देशों के लिए, एसडीवी सिस्टम से जुड़ी जांच बनाना देखें.

टेस्ट कॉन्फ़िगर करना

सभी टेस्ट को atest और CATBox, दोनों का इस्तेमाल करके चलाने के लिए कॉन्फ़िगर करें.

atest को कॉन्फ़िगर करना

इस फ़्रेमवर्क में एक, दो, और तीन वीएम टेस्ट के लिए टेंप्लेट उपलब्ध हैं. अपनी Android.bp फ़ाइल में ये चीज़ें जोड़ें:

  • एक वीएम:

    python_test_host {
      ...
      test_config_template: ":sdv_one_device",
    }
    
  • दो वीएम:

    python_test_host {
      ...
      test_config_template: ":sdv_two_devices",
    }
    
  • तीन वीएम:

    python_test_host {
      ...
      test_config_template: ":sdv_three_devices",
    }
    

ज़्यादातर टेस्ट के लिए, डिफ़ॉल्ट टेंप्लेट काफ़ी होता है. जब तक कोई ज़रूरी वजह न हो, तब तक कस्टम कॉन्फ़िगरेशन बनाने से बचें.

डिफ़ॉल्ट टाइम आउट अपडेट करना

लोकल लेवल पर टेस्ट चलाने के लिए, डिफ़ॉल्ट टाइम आउट काफ़ी होना चाहिए.

अगर टाइम आउट होने की वजह से, आपके डिवाइस पर टेस्ट पूरा नहीं हो पाता है, तो उसे अलग-अलग टेस्ट में बांटें. कई टेस्ट केस वाले बहुत लंबे टेस्ट, टेस्ट को पूरा करने में रुकावट पैदा कर सकते हैं.

अगर आपको डिफ़ॉल्ट टाइम आउट से ज़्यादा समय सेट करना है, तो पढ़ना जारी रखें.

टाइम आउट की डिफ़ॉल्ट सेटिंग को बदलना

फ़्रेमवर्क में, atest को लागू करने के लिए टेंप्लेट को बढ़ाने की सुविधा नहीं है. इसलिए, दिए गए उन टेंप्लेट का इस्तेमाल करें जिनमें टाइम आउट की अवधि ज़्यादा होती है.

  • एक वीएम पर लंबे समय तक चलने वाला टेस्ट:

    python_test_host {
      ...
      test_config_template: ":sdv_one_device_long_test",
    }
    
  • दो वीएम के बीच लंबे समय तक चलने वाला टेस्ट:

    python_test_host {
      ...
      test_config_template: ":sdv_two_devices_long_test",
    }
    

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

किसी डिवाइस पर फ़ाइलें पुश करना

यहां दिए गए तरीके से, atest कॉन्फ़िगरेशन के लिए किसी डिवाइस पर फ़ाइलें पुश की जा सकती हैं.

किसी डिवाइस पर फ़ाइलें पुश करना

फ़्रेमवर्क में, atest को लागू करने के लिए टेंप्लेट को बढ़ाने की सुविधा नहीं है. इसलिए, आपको एक ऐसी AndroidTest.xml फ़ाइल बनानी होगी जो डिफ़ॉल्ट टेंप्लेट को पूरी तरह से बदल दे. साथ ही, उसमें डिवाइसों के लिए, target_preparer के विकल्प शामिल हों.

  1. टेंप्लेट का कॉन्टेंट कॉपी करें:

    • sdv-one-device.xml
    • sdv-two-devices.xml
    • sdv-three-devices.xml
  2. {MODULE} को अपने टेस्ट के मॉड्यूल के नाम से अपडेट करें.

  3. हर डिवाइस में com.android.tradefed.targetprep.PushFilePreparer की प्रोफ़ाइल जोड़ें.

<device name="device1">
  <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
    <option name="cleanup" value="true" />
    <option name="push-file" key="<FILE_NAME>" value="<REMOTE_FILE_PATH>" />
  </target_preparer>
</device>

CATBox को कॉन्फ़िगर करना

टेस्ट को सुइट के तौर पर चलाने के लिए, CATBox कॉन्फ़िगरेशन ज़रूरी है.

  1. libraries/sdv/sdv_catbox/res/config/ में एक नई कॉन्फ़िगरेशन फ़ाइल बनाएं और नाम रखने के लिए इन नियमों का पालन करें:

    • सैंपल टेस्ट: sdv-sample-<NAME>-test.xml
    • E2E टेस्ट: sdv-e2e-<NAME>-test.xml
    • लंबे समय तक चलने वाला टेस्ट: sdv-long-running-<NAME>-test.xml
    • परफ़ॉर्मेंस टेस्ट: sdv-performance-<NAME>-test.xml
    • हार्डवेयर की जांच: sdv-hw-<NAME>-test.xml
  2. टेस्ट के टाइप के हिसाब से, उससे जुड़ी जानकारी जोड़ें:

  • एक वीएम टेस्ट कॉन्फ़िगरेशन:

    <configuration description="SDV <NAME> Test">
        <!-- Template for Device Configuration -->
        <template-include name="device-config" default="sdv-device-config/one-device" />
    
        <!-- Plan. Use the same name as the file name -->
        <option name="plan" value="<CONFIG_FILE_NAME>"/>
    
        <!-- Test: mobly-par-file-name should match the module name -->
        <option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
    </configuration>
    
  • दो वीएम के लिए टेस्ट कॉन्फ़िगरेशन:

    <configuration description="SDV <NAME> Test">
        <!-- Template for Device Configuration -->
        <template-include name="device-config" default="sdv-device-config/two-devices" />
    
        <!-- Plan. Use the same name as the file name -->
        <option name="plan" value="<CONFIG_FILE_NAME>"/>
    
        <!-- Test: mobly-par-file-name should match the module name -->
        <option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
    </configuration>
    
  • तीन वीएम टेस्ट कॉन्फ़िगरेशन:

    <configuration description="SDV <NAME> Test">
        <!-- Template for Device Configuration -->
        <template-include name="device-config" default="sdv-device-config/three-devices" />
    
        <!-- Plan. Use the same name as the file name -->
        <option name="plan" value="<CONFIG_FILE_NAME>"/>
    
        <!-- Test: mobly-par-file-name should match the module name -->
        <option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
    </configuration>
    

ज़्यादातर टेस्ट के लिए, डिफ़ॉल्ट टेंप्लेट काफ़ी होता है. जब तक कोई ज़रूरी वजह न हो, तब तक कस्टम कॉन्फ़िगरेशन बनाने से बचें.

डिफ़ॉल्ट टाइम आउट अपडेट करना

अगर आपके टेस्ट के लिए डिफ़ॉल्ट टाइम आउट काफ़ी नहीं है, तो इसे बदला जा सकता है.

टाइम आउट की डिफ़ॉल्ट सेटिंग को बदलना

टाइम आउट की डिफ़ॉल्ट सेटिंग को बदलने के लिए, अपनी कॉन्फ़िगरेशन फ़ाइल के आखिर में यह जोड़ें. लंबे टेस्ट के लिए, टाइम आउट की अवधि ज़्यादा से ज़्यादा 10 मिनट होनी चाहिए.

  <!-- Long Test - 10 minutes timeout: <REASON> -->
  <option name="mobly-host:mobly-test-timeout" value="600000" />

किसी डिवाइस पर फ़ाइलें पुश करना

यहां दिए गए सेक्शन में, CATBox को कॉन्फ़िगर करते समय किसी डिवाइस पर फ़ाइलें पुश करने का तरीका बताया गया है.

किसी डिवाइस पर फ़ाइलें पुश करना

संबंधित डिवाइस पर फ़ाइलें पुश करने के लिए, plan विकल्प के बाद यह कॉन्फ़िगरेशन जोड़ें:

<!-- Automatically pushes config file to device-->
<device name="device1">
  <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
    <option name="cleanup" value="true" />
    <option name="push-file"
      key="<FILE_NAME>"
      value="<REMOTE_FILE_PATH>"
    />
  </target_preparer>
</device>

अगर आपको हर डिवाइस पर फ़ाइलें चाहिए, तो हर डिवाइस के लिए कॉन्फ़िगरेशन जोड़ें. उदाहरण के लिए, name=device1, name=device2.

जांच करना

इन निर्देशों को लागू करने से पहले, यह ज़रूरी है कि आपने SDV एनवायरमेंट को सेट अप कर लिया हो.

एनवायरमेंट सेट अप करना

फ़्रेमवर्क, क्लाउड वर्चुअल डिवाइस (सीवीडी) इंस्टेंस शुरू नहीं करता. इसलिए, टेस्ट चलाने से पहले आपको उन्हें शुरू करना होगा.

  1. एनवायरमेंट सेट अप करें और एसडीवी टारगेट लॉन्च करें:

    . build/envsetup.sh
    lunch <TARGET>
    
  2. पहला सीवीडी इंस्टेंस शुरू करें:

    cvd create --config=sdv_core_instance1
    
  3. दूसरा सीवीडी इंस्टेंस शुरू करें (मल्टी-वीएम टेस्ट के लिए):

    cvd create --config=sdv_core_instance2
    
  4. तीसरा सीवीडी इंस्टेंस शुरू करें (मल्टी-वीएम टेस्ट के लिए):

    cvd create --config=sdv_core_instance3
    

कोई टेस्ट चलाएं

atest <TestModuleName>

CATBox चलाना

इन कमांड के लिए, यह ज़रूरी है कि आप डेटाबेस की रूट डायरेक्ट्री में हों.

  1. CATBox बनाएं: m catbox
  2. (ज़रूरी नहीं) CATBox में उपलब्ध सभी SDV टेस्ट प्लान देखें:
out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed l p | grep sdv-

टेस्ट चलाना:

  • एक वीएम टेस्ट चलाएं:

    NOTIFY_AS_NATIVE=0.0.0.0:6520 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520
    
  • दो वीएम टेस्ट चलाएं:

    NOTIFY_AS_NATIVE=0.0.0.0:6520,0.0.0.0:6521 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520 --{device2}serial 0.0.0.0:6521
    
  • तीन वीएम टेस्ट चलाएं:

    NOTIFY_AS_NATIVE=0.0.0.0:6520,0.0.0.0:6521,0.0.0.0:6522 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520 --{device2}serial 0.0.0.0:6521 --{device3}serial 0.0.0.0:6522