Polecenia powłoki urządzenia

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Podczas testowania VTS polecenia powłoki są używane do wykonywania testu binarnego po stronie docelowej, pobierania/ustawiania właściwości, zmiennych środowiskowych i informacji o systemie oraz do uruchamiania/zatrzymywania platformy Android. Polecenia powłoki urządzenia VTS można wykonywać za pomocą polecenia adb shell lub sterownika powłoki VTS działającego na urządzeniu (zalecane).

Korzystanie z powłoki ADB

Testy wymagające wyłączenia portu USB lub ponownego uruchomienia urządzenia podczas testowania muszą używać powłoki ADB, ponieważ sterownik powłoki VTS jest niedostępny bez trwałego połączenia USB. Możesz wywołać powłokę ADB z obiektu AndroidDevice w skrypcie testowym Pythona. Przykłady:

  • Pobierz obiekt urządzenia z Androidem:
    self.device = self.android_devices[0]
    
  • Wydaj pojedyncze polecenie powłoki:
    result = self.device.adb.shell(‘ls')
    

Korzystanie ze sterownika powłoki VTS

Sterownik powłoki VTS to plik binarny agenta, który działa na urządzeniu i wykonuje polecenia powłoki. Domyślnie VTS używa sterownika powłoki, jeśli sterownik jest uruchomiony na urządzeniu, ponieważ ta metoda ma mniejsze opóźnienie niż użycie polecenia adb shell .

Rysunek 1. Sterownik powłoki VTS.

Struktura VTS obsługuje testowanie na wielu urządzeniach, w którym każde urządzenie z systemem Android jest reprezentowane jako obiekt AndroidDevice w podstawowym module uruchamiającym. Domyślnie struktura VTS wypycha pliki binarne agenta VTS i sterownika powłoki VTS do każdego urządzenia z systemem Android i nawiązuje połączenia TCP z agentami VTS na tych urządzeniach.

Aby wykonać polecenie powłoki, skrypt Pythona po stronie hosta wykonuje wywołanie funkcji do obiektu ShellMirror wewnątrz obiektu AndroidDevice. Obiekt ShellMirror pakuje teksty poleceń powłoki do wiadomości protobuf i wysyła ją (za pośrednictwem kanału TCP) do agenta VTS na urządzeniu z systemem Android. Agent działający na urządzeniu przekazuje następnie polecenie powłoki do sterownika powłoki VTS za pośrednictwem gniazda Unix.

Gdy sterownik powłoki VTS odbiera polecenie powłoki, wykonuje je za pośrednictwem nohup w powłoce urządzenia, aby zapobiec zawieszeniu. Stdout, stderr i kod powrotu są następnie pobierane z nohup i odsyłane do agenta VTS. Na koniec agent odpowiada hostowi, opakowując wyniki polecenia w komunikat protobuf .

Zalety

Zalety korzystania ze sterownika powłoki VTS zamiast adb shell obejmują:

  • Niezawodność. Sterownik powłoki VTS używa nohup do wykonywania poleceń przy ustawieniach domyślnych. Ponieważ testy VTS są w większości testami HAL i jądra niższego poziomu, nohup zapewnia, że ​​polecenia powłoki nie zawieszają się podczas wykonywania.
  • Wydajność . Podczas gdy polecenie adb shell buforuje niektóre wyniki (takie jak wyświetlanie plików w katalogu), wiąże się z obciążeniem połączenia podczas wykonywania zadań, takich jak wykonywanie testowego pliku binarnego. Sterownik powłoki VTS utrzymuje aktywne połączenie przez cały czas trwania testu, więc jedynym obciążeniem jest komunikacja USB. W naszych testach użycie sterownika powłoki VTS do wykonania polecenia ze 100 wywołaniami pustego pliku binarnego gtest jest około 20 procent szybsze niż użycie adb shell ; rzeczywista różnica jest większa, ponieważ komunikacja powłoki VTS ma rozbudowane rejestrowanie.
  • Prowadzenie państwa . Sterownik powłoki VTS utrzymuje sesję terminala dla każdej nazwy terminala (domyślna nazwa terminala to default ). Zmienne środowiskowe ustawione w jednej sesji terminalowej są dostępne tylko dla kolejnych poleceń w tej samej sesji.
  • Wysuwany . Komunikacja poleceń powłoki między frameworkiem VTS a sterownikiem urządzenia jest opakowana w protobuf, aby umożliwić potencjalną kompresję, komunikację zdalną, szyfrowanie itp. w przyszłości. Dostępne są również inne możliwości poprawy wydajności, w tym analizowanie wyników po stronie urządzenia, gdy obciążenie komunikacyjne staje się większe niż analizowanie ciągu wyników.

Niedogodności

Wady korzystania ze sterownika powłoki VTS zamiast adb shell obejmują:

  • Dodatkowe pliki binarne . Pliki agenta VTS muszą zostać przesłane do urządzenia i wyczyszczone po wykonaniu testu.
  • Wymaga aktywnego połączenia . Jeśli połączenie TCP między hostem a agentem zostanie utracone podczas testowania (z powodu rozłączenia USB, zamknięcia portu, awarii urządzenia itp.) celowo lub przypadkowo, polecenie powłoki nie może zostać przesłane do agenta VTS. Nawet przy automatycznym przełączeniu na adb shell wynik i stan polecenia przed rozłączeniem byłby nieznany.

Przykłady

Przykłady użycia poleceń powłoki w skrypcie testowym Python po stronie hosta VTS:

  • Pobierz obiekt urządzenia z Androidem:
    self.device = self.android_devices[0]
    
  • Pobierz obiekt powłoki dla wybranego urządzenia:
    self.shell = self.device.shell
    
  • Wydaj pojedyncze polecenie powłoki:
    results = self.shell.Execute(‘ls')
    
  • Wydaj listę poleceń powłoki:
    results = self.shell.Execute([‘cd /data/local/tmp', ‘ls'])
    

Obiekt wyniku polecenia

Obiektem powrotu z wykonania polecenia powłoki jest słownik zawierający klucze stdouts , stderrs i return_codes . Niezależnie od tego, czy polecenie powłoki jest dostarczane jako pojedynczy ciąg, czy jako lista ciągów poleceń, każda wartość słownika wyników jest zawsze listą.

Aby zweryfikować kod powrotu listy poleceń, skrypt testowy musi sprawdzić indeksy. Przykład:

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

Alternatywnie skrypt może sprawdzać każdy indeks poleceń indywidualnie. Przykład:

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