前書き
この記事では、Androidアプリケーションの自動テスト(モバイル自動化)のインフラストラクチャの例、つまり仮想環境のAndroidデバイスエミュレータでUI自動テストを実行するための環境について説明します。
要件:
Androidエミュレーターには、Intel VirtualizationTechnologyまたはAMDVirtualizationのサポートが必要です。したがって、テスターは、中央プロセッサに直接アクセスできるネイティブPC環境でのみテスト缶を実行する必要に直面することがよくあります。
この場合のスキームは次のとおりです。
難しさ:
エミュレータ環境を簡単に再作成する方法はありません。
環境はテスト前に作成されず、テスト後に削除されないため、環境はテスト対象のアプリケーションに影響を与える可能性があります。
環境の修正と構成には長い時間がかかります。
この記事で提案されている解決策:
ネストされた仮想化VirtualBoxの機能を使用してVMを作成します(この記事のテクノロジーの詳細な説明)。
作成された仮想マシン内でIntel-VTまたはKVMサポートを転送します。
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. , , .
この記事への追加として、すべての結果を公開します。
理想的には、AndroidアプリケーションのUIテストと統合自動テスト用のコードファーストインフラストラクチャが必要です。これは、自律的に動作し、ネイティブAndroidエミュレーターでテストを構築し、食べ物を要求しない最新のオフィスPCに展開できます。
ご清聴ありがとうございました!
P.S.
コメントで、Androidエミュレーターを使用したインフラストラクチャの例を教えてもらえますか?たとえば、dockerコンテナ(https://github.com/budtmo/docker-android)のエミュレータには、他にも興味深い例がいくつかあります。