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
.
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życieadb 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')