डिवाइस का शेल कमांड

वीटीएस टेस्टिंग के दौरान, शेल कमांड का इस्तेमाल टारगेट-साइड टेस्ट को लागू करने के लिए किया जाता है बाइनरी, प्रॉपर्टी, एनवायरमेंट वैरिएबल, और सिस्टम की जानकारी पाने/सेट करने के लिए, और Android फ़्रेमवर्क को चालू/बंद करें. वीटीएस डिवाइस के शेल का इस्तेमाल किया जा सकता है adb shell कमांड या वीटीएस शेल ड्राइवर का इस्तेमाल करने वाले कमांड डिवाइस पर चल रहा है (सुझाया गया).

ADB शेल का इस्तेमाल करें

ऐसी जांच जिनमें यूएसबी पोर्ट को बंद करने या डिवाइस को फिर से चालू करने की ज़रूरत पड़ती है टेस्टिंग के लिए ADB शेल का इस्तेमाल करना ज़रूरी है, क्योंकि वीटीएस शेल ड्राइवर स्थायी यूएसबी कनेक्शन. ADB शेल को Python टेस्ट स्क्रिप्ट में AndroidDevice ऑब्जेक्ट. उदाहरण:

  • Android डिवाइस से जुड़ा ऑब्जेक्ट पाएं:
    self.device = self.android_devices[0]
    
  • एक शेल कमांड जारी करें:
    result = self.device.adb.shell(‘ls')
    

वीटीएस शेल ड्राइवर का इस्तेमाल करना

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

पहली इमेज. वीटीएस शेल ड्राइवर.

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

शेल कमांड एक्ज़ीक्यूट करने के लिए, होस्ट-साइड Python स्क्रिप्ट एक फ़ंक्शन बनाती है कॉल करने के लिए किया जा सकता है. द शेल मिरर ऑब्जेक्ट, शेल आदेश टेक्स्ट को प्रोटोबफ़ टीसीपी चैनल के ज़रिए मैसेज भेजकर, उसे Android पर VTS एजेंट को भेज दिया जाता है डिवाइस. डिवाइस पर काम करने वाला एजेंट, शेल कमांड को वीटीएस शेल को फ़ॉरवर्ड करता है ड्राइवर को यूनिक्स सॉकेट से जाने पर.

जब वीटीएस शेल ड्राइवर को शेल का निर्देश मिलता है, तो यह कमांड को लागू करता है इस तारीख को nohup से होकर हैंग होने से रोकने के लिए डिवाइस का शेल. Stdout, stderr, और रिटर्न कोड तब nohup से वापस लाया गया और VTS एजेंट को वापस भेज दिया गया. आख़िर में, एजेंट को आदेश परिणामों को protobuf मैसेज.

फ़ायदे

adb shell के बजाय, वीटीएस शेल ड्राइवर का इस्तेमाल करने के फ़ायदों में ये शामिल हैं:

  • भरोसेमंद. वीटीएस शेल ड्राइवर का इस्तेमाल डिफ़ॉल्ट सेटिंग पर निर्देशों को एक्ज़ीक्यूट करने के लिए nohup. क्योंकि वीटीएस टेस्ट ज़्यादातर लो-लेवल एचएएल और कर्नेल टेस्ट, nohup शेल पक्का करता है निष्पादन के दौरान आदेश अटकते नहीं हैं.
  • परफ़ॉर्मेंस. जबकि adb shell निर्देश कुछ नतीजों (जैसे कि डायरेक्ट्री में फ़ाइलों की सूची) को कैश मेमोरी में सेव करता है, लेकिन इसमें कनेक्शन होता है टेस्ट बाइनरी चलाने जैसे टास्क करते समय ओवरहेड. वीटीएस शेल ड्राइवर पूरी जांच के दौरान चालू कनेक्शन बनाए रखता है, इसलिए सिर्फ़ ओवरहेड यूएसबी होता है बातचीत करते हैं. हमारी टेस्टिंग में, वीटीएस शेल ड्राइवर का इस्तेमाल करके, कमांड को एक्ज़ीक्यूट किया जा रहा था किसी खाली gtest बाइनरी पर 100 कॉल, इस्तेमाल करने की तुलना में करीब 20 प्रतिशत तेज़ हैं adb shell; वीटीएस शेल के बाद से वास्तविक अंतर ज़्यादा है बातचीत का डेटा बड़े पैमाने पर इकट्ठा किया जाता है.
  • स्टेटकीपिंग. वीटीएस शेल ड्राइवर, टर्मिनल का रखरखाव करता है हर टर्मिनल नाम के लिए सेशन (डिफ़ॉल्ट टर्मिनल नाम यह है डिफ़ॉल्ट). एक टर्मिनल सेशन में सेट किए गए एनवायरमेंट वैरिएबल उसी सेशन में सिर्फ़ बाद के कमांड के लिए उपलब्ध होता है.
  • बढ़ाने लायक. वीटीएस के बीच शेल कमांड कम्यूनिकेशन फ़्रेमवर्क और डिवाइस ड्राइवर को प्रोटोबफ़ में रैप किया जाता है, ताकि कंप्रेशन, रिमोटिंग, एन्क्रिप्शन वगैरह. इसके लिए अन्य संभावनाएं परफ़ॉर्मेंस को बेहतर बनाने की सुविधा के साथ-साथ डिवाइस-साइड के नतीजे को पार्स करने की सुविधा भी उपलब्ध है जब कम्यूनिकेशन का ओवरहेड, नतीजे स्ट्रिंग पार्स करने से ज़्यादा हो जाता है.

नुकसान

adb shell की जगह वीटीएस शेल ड्राइवर का इस्तेमाल करने के नुकसान में ये शामिल हैं:

  • अतिरिक्त बाइनरी. VTS एजेंट फ़ाइलों को डिवाइस को अपडेट किया गया और उसे टेस्ट किए जाने के बाद, खाली किया गया.
  • चालू कनेक्शन की ज़रूरत है. अगर इसके बीच टीसीपी कनेक्शन जांच के दौरान होस्ट और एजेंट खो जाता है (यूएसबी डिसकनेक्ट होने, पोर्ट के बंद होने, जान-बूझकर या अनजाने में कोई शेल कमांड इसे VTS एजेंट को नहीं भेजा जा सकता. अपने-आप स्विच होने के बावजूद, adb shell, डिसकनेक्ट करने से पहले निर्देश का नतीजा और स्थिति अज्ञात होगा.

उदाहरण

वीटीएस होस्ट-साइड Python टेस्ट स्क्रिप्ट में शेल कमांड इस्तेमाल करने के उदाहरण:

  • Android डिवाइस से जुड़ा ऑब्जेक्ट पाएं:
    self.device = self.android_devices[0]
    
  • चुने गए डिवाइस के लिए शेल ऑब्जेक्ट पाएं:
    self.shell = self.device.shell
    
  • एक शेल कमांड जारी करें:
    results = self.shell.Execute(‘ls')
    
  • शेल कमांड की सूची जारी करें:
    results = self.shell.Execute([‘cd /data/local/tmp', ‘ls'])
    

Command नतीजा ऑब्जेक्ट

शेल कमांड एक्ज़ीक्यूट करने से रिटर्न ऑब्जेक्ट एक डिक्शनरी है, जिसमें stdouts, stderrs, और return_codes कुंजियां. भले ही शेल कमांड एक स्ट्रिंग या सूची के रूप में दिया गया हो कमांड स्ट्रिंग की तरह, नतीजे वाले शब्दकोश की हर वैल्यू हमेशा एक सूची होती है.

निर्देशों की सूची के रिटर्न कोड की पुष्टि करने के लिए, टेस्ट स्क्रिप्ट को इंडेक्स करना. उदाहरण:

asserts.assertFalse(any(results[‘return_codes']), ‘some command failed.')

इसके अलावा, स्क्रिप्ट हर कमांड इंडेक्स की अलग-अलग जांच कर सकती है. उदाहरण:

asserts.assertEqual(results[‘return_codes'][0], 0, ‘first command failed')
asserts.assertEqual(results[‘return_codes'][1], 0, ‘second command failed')