Einführung
In diesem Artikel werde ich versuchen, ein Beispiel für eine Infrastruktur für Autotests von Android-Anwendungen (mobile Automatisierung) zu beschreiben, nämlich eine Umgebung zum Durchführen von UI-Autotests auf einem Android-Geräteemulator in einer virtuellen Umgebung.
Bedarf:
Der Android-Emulator erfordert Unterstützung für Intel Virtualization Technology oder AMD Virtualization . Daher ist ein Tester häufig mit der Notwendigkeit konfrontiert, Tests nur in einer nativen PC-Umgebung mit direktem Zugriff auf den Zentralprozessor auszuführen.
In diesem Fall ist das Schema wie folgt:
Schwierigkeiten:
Es gibt keine Möglichkeit, die Emulatorumgebung einfach neu zu erstellen.
Die Umgebung wird vor dem Testen nicht erstellt und nach dem Testen nicht gelöscht, sodass die Umgebung Auswirkungen auf die zu testende Anwendung haben kann.
Das Beheben und Konfigurieren der Umgebung dauert lange.
Die in diesem Artikel vorgeschlagene Lösung:
Erstellen Sie eine VM mit den Funktionen der verschachtelten Virtualisierung VirtualBox (eine detailliertere Beschreibung der Technologie in diesem Artikel).
Leiten Sie die Intel-VT- oder KVM-Unterstützung innerhalb der erstellten virtuellen Maschine weiter.
VM Android .
UI .
VM.
:
:
VM , . .
, .
:
c: Intel i5-1035G1
: 12Gb
BIOS
OC: Ubuntu 20.4
1: OS
. VNC . , Linux, Windows, Mac ..
x11vnc
:
sudo apt-get update #
sudo apt install x11vnc # x11vnc
sudo x11vnc -storepasswd < > /etc/x11vnc.pass #
sudo chmod ugo+r /etc/x11vnc.pass #
:
x11vnc -nevershared -forever -dontdisconnect -many -noxfixes -rfbauth /etc/x11vnc.pass
VirtualBox
:
sudo apt-get update
sudo apt install gcc make linux-headers-$(uname -r) dkms
wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -
sudo sh -c 'echo "deb http://download.virtualbox.org/virtualbox/debian $(lsb_release -sc) contrib" >> /etc/apt/sources.list.d/virtualbox.list'
sudo apt update #
sudo apt install virtualbox-6.1
VM
VM VirtualBox . VM code-first
CPU - ( )
- 4Gb
Nested Virtualization :
VBoxManage modifyvm < VM> --nested-hw-virt on
VM.
2: VM
. Packer, VM .
KVM
egrep -c '(vmx|svm)' /proc/cpuinfo # 0 - , 1 - KVM
sudo apt-get update #
sudo apt install qemu qemu-kvm libvirt-daemon libvirt-clients bridge-utils virt-manager # KVM
sudo usermod -G libvirt -a ubuntu # ubuntu libvirt
sudo systemctl status libvirtd # libvirt
sudo kvm-ok # KVM
Android command line tools
sudo apt-get update #
yes | sudo apt install android-sdk # Android SDK
sudo apt install unzip # unzip
cd ~/Downloads # Downloads
wget https://dl.google.com/android/repository/commandlinetools-linux-6858069_latest.zip # command line tools Google
sudo unzip commandlinetools-linux-6858069_latest.zip -d /usr/lib/android-sdk/cmdline-tools/ #
sudo mv /usr/lib/android-sdk/cmdline-tools/cmdline-tools /usr/lib/android-sdk/cmdline-tools/tools # . , Google , SDK
export ANDROID_SDK_ROOT=/usr/lib/android-sdk #
export PATH=$PATH:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin:$ANDROID_SDK_ROOT/cmdline-tools/tools/bin # Path
export PATH=$PATH:$ANDROID_SDK_ROOT/emulator # Path
, sdkmanager Android SDK :
sdkmanager --version
Android tools
yes | sdkmanager --licenses #
sudo chown $USER:$USER $ANDROID_SDK_ROOT -R # ANDROID_SDK_ROOT
yes | sdkmanager "cmdline-tools;latest" # cmdline-tools
sdkmanager "build-tools;30.0.3" # build-tools
sdkmanager "platform-tools" # platform-tools
sdkmanager "platforms;android-30"
sdkmanager "sources;android-30"
sdkmanager "emulator" # AVD manager
emulator -accel-check #,
yes | sdkmanager "system-images;android-23;google_apis;x86_64" #
sdkmanager --list # . CI .
no | avdmanager create avd -n android-23_google_apis_x86_64 -k "system-images;android-23;google_apis;x86_64" #
emulator -list-avds #
Git
Android . . .
sudo apt update #
yes | sudo apt install git # Git
git --version #
mkdir ~/workspace #
cd ~/workspace #
git clone https://github.com/panarik/AndroidClearApp.git #
cd ~/workspace/AndroidClearApp #
3: Android
./gradlew assembleDebug --no-daemon # APK
emulator -avd android-23_google_apis_x86_64 -no-audio -no-window -verbose -gpu off -accel off #
sleep 240 # ,
adb get-state #, ADB . ,
ADB :
:
./gradlew connectedAndroidTest --no-daemon
! !
, , VM.
:
VirtualBox ( )
sudo apt purge virtualbox-6.1
VM CPU:
VM :
VBoxClient
KVM
№2 . . , ADB :
! ! :
PackageManager, :
Android . Packer ( ) VirtualBox. CI Jenkins. , , .
Ich werde alle Ergebnisse als Ergänzungen zu diesem Artikel veröffentlichen.
Im Idealfall sollten wir über eine Code-First-Infrastruktur für UI-Tests und Autotests für die Integration von Android-Anwendungen verfügen, die auf jedem modernen Büro-PC bereitgestellt werden kann, der autonom arbeitet, Tests auf nativen Android-Emulatoren erstellt und nicht nach Nahrung fragt.
Vielen Dank für Ihre Aufmerksamkeit!
P.S.
Kann ich Sie in den Kommentaren bitten, ein Beispiel für Ihre Infrastruktur mit dem Android-Emulator anzugeben? Beispielsweise könnten Emulatoren in Docker-Containern ( https://github.com/budtmo/docker-android ) einige andere interessante Beispiele haben.