본문 바로가기

QA/Quality Architecture

Android Emulator & Appium 을 Docker로 구동시키기

728x90

Mobile Test를 위해 Android Emulator, Appium 환경을 구성하는 방법은 아주 까다롭다.

JDK 설치, Android SDK 구성, node.js 설치, Appium 구성 등 할 것이 너무 많다.

이를 해결하기 위해 Docker를 사용해 아주 쉽게 환경을 구성할 수 있는 방법을 공유 한다.

Docker-android

Docker-androidAndroid 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 환경을 PyenvPoetry 를 사용한다.
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