Selenium Grid 컨테이너에 Appium 연결

정태경·2022년 11월 26일
1
post-thumbnail

개요

이전에 작성했던 게시글에서 Docker를 활용하여 Selenium Grid, Selenium Node(WebDriver) 셋팅하는 방법에 대해 기록했던 적이 있다. 오늘은 그 후속편으로 Selenium Grid 컨테이너에 Appium을 연결하여 모바일 웹 Node 관리하는 방법에 대해 알아보려 한다.

본격적으로 셋팅하기 전에 먼저 알아두어야 할 내용이 있다.
나는 이전에 Intel CPU(amd64)가 탑재된 Macbook을 사용했었는데, Apple Chip(arm64)이 탑재된 Macbook으로 교체한 뒤로 Docker 활용에 있어 매우 많은 호환성 문제를 겪고 있다. 따라서 이번 글은 Apple Chip(arm64)이 탑재된 Macbook 기준으로 작성할 예정이다.

Selenium HQ의 공식 Github에도 다중 아키텍처에 대한 내용이 언급되어 있으며, 다중 아키텍처를 위한 실험적인 Docker Image를 제공해주고 있다.

이 녀석을 활용해서 Apple Chip(m1,m1x,m2)이 탑재된 macbook에 Selenium Grid, Selenium Node를 셋업해보자.

공식 문서 리뷰

먼저, Selenium 공식 문서를 보면 config.toml을 활용한 selenium <-> appium 결합 방법에 대해 안내해주고 있다.

TOML 파일이란?
TOML(Tom's Obvious Minimal Language)은 .toml 확장자를 사용하는 최소 구성 파일 형식이다.
YAML 과 비슷한 녀석이라고 이해하면 된다.

config.toml 작성

공식 문서에 나와 있는 내용을 토대로 config.toml 파일을 작성해보자.
Appium 서버가 호스트 OS에서 실행되고 있기 때문에 "http://host.docker.internal:4723/wd/hub" 로 작성하였고, 호스트 OS에 연결된 모바일 기기 정보는 configs에 작성해주었다.

[node]
detect-drivers = false

[relay]
# Default Appium/Cloud server endpoint
url = "http://host.docker.internal:4723/wd/hub"
status-endpoint = "/status"

# 내 맥북에 연결된 디바이스 정보
configs = [
    "1","{\"platformName\": \"Android\", \"browserName\": \"chrome\", \"platformVersion\": \"10\", \"automationName\": \"UiAutomator2\", \"appium:deviceName\": \"Galaxy S9+\", \"appium:udid\": \"2285f6c0050b7ece\", \"browserVersion\": \"107.0\"}"

컨테이너 실행을 위한 docker-compose 작성

Selenium Grid는 다중 아키텍처가 적용된 seleniarm/hub 이미지를 사용했고,
Appium 연결을 위한 node-docker는 다중 아키텍처를 지원하지 않아 기존 이미지(selenium/node-docker)를 그대로 사용했다.

그리고 마지막으로 작성한 config.toml을 node-docker 컨테이너의 /opt/bin/ 경로에 넣어주면 된다.

version: "3"
services:
  # Selenium hub 컨테이너 설정
  seleniarm-hub:
    image: seleniarm/hub:latest
    container_name: seleniarm-hub
    ports:
      - "4442:4442"
      - "4443:4443"
      - "4444:4444"
    environment:
      - SE_NODE_SESSION_TIMEOUT=300
      - SE_SESSION_REQUEST_TIMEOUT=30
      - SE_SESSION_RETRY_INTERVAL=5

  # 안드로이드 S9 기기 연결을 위한 컨테이너 설정
  appium_s9:
    image: selenium/node-docker:latest
    volumes:
      - /Users/grady/config.toml:/opt/bin/config.toml
    depends_on:
      - seleniarm-hub
    environment:
      - SE_EVENT_BUS_HOST=seleniarm-hub
      - SE_EVENT_BUS_PUBLISH_PORT=4442
      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443
    extra_hosts:
      - "host.docker.internal:host-gateway"
    shm_size: '2gb'

컨테이너 실행

컨테이너 실행 후 Selenium Grid에 접근하여 Appium Node가 연결된 것을 확인할 수 있다.
이제 Selenium Grid에 요청을 보내 Appium Node를 실행할 수 있다.

profile
現 두나무 업비트 QA 엔지니어, 前 마이리얼트립 TQA 엔지니어

0개의 댓글