Mobile Test를 위해 Android Emulator, Appium 환경을 구성하는 방법은 아주 까다롭다.
JDK 설치, Android SDK 구성, node.js 설치, Appium 구성 등 할 것이 너무 많다.
이를 해결하기 위해 Docker를 사용해 아주 쉽게 환경을 구성할 수 있는 방법을 공유 한다.
Docker-android
Docker-android는 Android emulator, Appium을 포함하고 있는 docker image 이다.
아래에서 자세한 내용을 확인할 수 있다.
https://github.com/budtmo/docker-android
해당 Docker image를 사용하면 아래처럼 아주 쉽게 Android emulator, Appium 환경을 사용 할 수 있다.
docker run --privileged -d -p 6080:6080 -p 5554:5554 -p 5555:5555 -e DEVICE="Samsung Galaxy S6" --name android-container budtmo/docker-android-x86-8.1
Python 연동
해당 이미지를 사용해 Python Test 환경을 구성해보겠다.
Python 환경을 Pyenv와 Poetry 를 사용한다.
Docker-android docker image 를 기본으로 하여 아래와 같이 Dockerfile을 작성했다.
FROM budtmo/docker-android-x86-9.0
# 필요한 Lib을 설치
RUN apt-get update && apt-get install make python3-dev build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm git \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev -y
ENV PYENV_ROOT="/root/.pyenv"
ENV PATH="/root/.pyenv/bin:/root/.pyenv/shims:$PATH"
ENV APPIUM=True
# pyenv 설치 및 python 3.10.4 환경 설정
RUN curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash \
&& pyenv install 3.10.4 && pyenv global 3.10.4 && pip install --upgrade pip
# Poetry 설치 및 dependancy 설치
RUN pip install poetry
COPY poetry.lock /root/poetry.lock
COPY pyproject.toml /root/pyproject.toml
RUN poetry config virtualenvs.create false
RUN poetry install --no-interaction
# adb wait script 실행
ADD . /root
CMD ["sh", "/root/adb_wait_for_device.sh"]
해당 Dockerfile을 사용해 환경을 구성하고 Emulator를 사용하려면 Emulator가 구동이 완료될 때 까지 기다려야 한다.
그래서 마지막에 adb에서 emulator가 확인 될때 까지 기다리는 Script를 추가했다.
#bin/bash
adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done;'
이제 아래처럼 Dockerfile을 사용해 Container를 생성하면 해당 Container 안에서 Android Emulator, Appium 환경에서 Python Test를 수행 할 수 있다.
docker build --tag android-docker:1.0 .
docker run --name test -d android-docker:1.0
docker exec test pytest test.py