Polecenia powłoki urządzenia

Podczas testowania VTS polecenia powłoki służą do wykonywania testu po stronie docelowej binarny do pobierania/ustawiania właściwości, zmiennych środowiskowych i informacji o systemie, oraz uruchamianie/zatrzymywanie platformy Androida. Możesz uruchamiać powłokę VTS urządzenia za pomocą polecenia adb shell lub sterownika powłoki VTS uruchomionych na urządzeniu (zalecane).

Użyj powłoki ADB

Testy, które wymagają wyłączenia portu USB lub ponownego uruchomienia urządzenia podczas podczas testowania należy używać powłoki ADB, ponieważ sterownik powłoki VTS jest niedostępny bez trwałe połączenie USB. Powłokę ADB możesz wywołać z AndroidDevice w skrypcie testowym Pythona. Przykłady:

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

Użyj sterownika powłoki VTS

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

Rysunek 1. sterownika powłoki VTS.

Platforma VTS obsługuje testy na wielu urządzeniach, w przypadku których każde urządzenie z Androidem jest reprezentowany jako obiekt AndroidDevice w podstawowym module uruchamiającym. Domyślnie VTS platforma przekazuje pliki binarne agenta VTS i sterownika powłoki VTS na każde urządzenie z Androidem i nawiązuje połączenia TCP z agentami VTS na tych urządzeniach.

Aby wykonać polecenie powłoki, skrypt Pythona po stronie hosta tworzy funkcję do obiektu ShellMirror w obiekcie AndroidDevice. Shell Mirror umieszcza teksty poleceń powłoki w protobuf i wysyła ją (przez kanał TCP) do agenta VTS na Androidzie urządzenia. Agent działający na urządzeniu przekazuje polecenie powłoki do powłoki VTS przez gniazdo Unix.

Gdy sterownik powłoki VTS otrzyma polecenie powłoki, wykonuje je przez nohup w dniu na obudowie, aby uniknąć zawieszenia urządzenia. Stdout, stderr i kod zwrotu są następnie pobrane z urządzenia nohup i odesłane z powrotem do agenta VTS. Na koniec pracownik obsługi klienta odpowiada na wiadomości hosta przez umieszczenie wyników polecenia w pliku protobuf wiadomość.

Zalety

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

  • Niezawodność. Sterownik powłoki VTS używa nohup do wykonywania poleceń przy ustawieniu domyślnym. Ponieważ testy VTS są głównie testy HAL niższego poziomu i jądro, nohup zapewnia powłokę podczas wykonywania polecenia nie zawieszają się.
  • Skuteczność. Chociaż polecenie adb shell zapisuje w pamięci podręcznej niektóre wyniki (na przykład wyświetlanie listy plików w katalogu), z którym ma połączenie podczas wykonywania takich zadań jak uruchamianie testowego pliku binarnego. Sterownik powłoki VTS utrzymuje aktywne połączenie przez cały test, więc jedynym nadmiarowym rozwiązaniem jest USB. komunikacji między usługami. W ramach testów wykorzystaliśmy sterownik powłoki VTS do wykonania polecenia 100 wywołań pustego pliku binarnego gtest jest o około 20% szybsze niż użycie adb shell; rzeczywista różnica jest większa, ponieważ powłoka VTS umożliwia obszerne rejestrowanie danych.
  • Urząd skarbowy. Sterownik powłoki VTS obsługuje terminal sesja dla każdej nazwy terminala (domyślna nazwa terminala to domyślna). Zmienne środowiskowe ustawione w jednej sesji terminala to dostępne tylko dla kolejnych poleceń w tej samej sesji.
  • Rozszerzany. Komunikacja poleceń powłoki między VTS oraz sterowniki urządzenia są dołączone do protokołu, aby umożliwić potencjalne kompresowania, pracy zdalnej, szyfrowania itp. w przyszłości. Inne możliwości dostępne są także rozwiązania poprawiające wydajność, m.in. analizę wyników po stronie urządzenia gdy narzut komunikacji staje się większy niż w przypadku analizowania ciągów znaków w wynikach.

Wady

Wady korzystania ze sterownika powłoki VTS zamiast adb shell to między innymi:

  • Dodatkowe pliki binarne. Pliki agentów VTS muszą zostać przeniesione do na urządzeniu i został oczyszczony po przeprowadzeniu testu.
  • Wymaga aktywnego połączenia. Jeśli połączenie TCP między Host i agent zostaną utracone podczas testowania (z powodu odłączenia USB, wyłączenia portu awarii urządzenia itp.) celowo lub przypadkowo, poleceniem powłoki. nie można przesłać do agenta VTS. Nawet po automatycznym przełączeniu na adb shell, wynik i stan polecenia przed odłączeniem, byłoby nieznane.

Przykłady

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

  • 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
    
  • Wykonaj jedno polecenie powłoki:
    results = self.shell.Execute(‘ls')
    
  • Uruchom listę poleceń powłoki:
    results = self.shell.Execute([‘cd /data/local/tmp', ‘ls'])
    

Obiekt wyniku polecenia

Obiekt zwrotny z wykonania polecenia powłoki to słownik zawierający klucze stdouts, stderrs i return_codes. Niezależnie od tego, czy polecenie powłoki jest podane w postaci pojedynczego ciągu znaków, czy listy ciągów poleceń, każda wartość słownika wyników jest zawsze listą.

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

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

Skrypt może też sprawdzać poszczególne indeksy poleceń oddzielnie. Przykład:

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