APC (Appium Python Console)
english / korean

INTRODUCTION

APC는 모바일 어플리케이션의 테스트 자동화를 가능하게 해주는 오픈소스 라이브러리인 Appium과 Appium의 다양한 Client Library중 하나인 Python Client를 기반으로 테스트 스크립트를 작성하는 개발자들을 위한 콘솔 프로그램입니다.

Appium은 서로 다른 플랫폼(Android, IOS 등..) 벤더가 제공하는 테스트 프레임웍을 공통의 WebDriver API(Selenium WebDriver API)로 랩핑함으로써 하나의 테스트 코드만으로 앱을 테스트할 수 있습니다. 그리고 WebDriver API를 다양한 언어로 사용할 수있도록 각 언어에 맞는 Client Library를 제공하고 있습니다.

다양한 언어(Ruby, Python, Java, Js)의 Client Library가 제공되고는 있지만 각 Library를 사용하여 테스트 스크립트를 작성하기 위해서는 어느정도의 학습이 필요합니다. 그 중 Ruby-lib은 ARC(Appium-Ruby-Console)라는 콘솔 프로그램을, Java-cli는 Appium-Java-Repl을 통해 WebDriver Metohds를 직접 사용해 볼 수 있지만 Python-Client는 이런 Tool이 존재 하지 않습니다.

APC는 ARC나 Appium-Java-Repl처럼 Python Client의 다양한 WebDriver Methods를 개발자들이 사용해 볼 수 있도록 개발 되었습니다. 나아가 APC는 WebDriver Methods를 사용해볼 수 있는 기능 뿐만 아니라 별도의 Test Script 작성없이 사용자와의 Interaction을 통해 간단한 Test를 진행해 볼 수 있도록 Manual Test Mode라는 특별한 기능을 제공합니다.

License

APC는 MIT 라이센스에 따라 배포됩니다.
이 라이센스에 의해 누구라도 APC를 상업/비상업적인 목적, 공공/개인적인 목적, 오픈(open) / 사유(closed)소스 등 어떠한 형태로든 사용이 가능합니다.

DOCUMENTATION


1. Install APC(Appium-Python-Console)

APC 실행을 위해서는 먼저 Appium이 설치되어 있어야 합니다. Appium이 설치가 안되어 있는 경우는 Appium Setup Manual을 먼저 참고하여 Appium 설치를 진행해 주시기 바랍니다.


1) APC Git Clone 및 APC 폴더로 이동

아래 링크에 있는 APC Git Repository를 복제 합니다.

Link : APC Repository

              
                # Git 복제
                $ git clone git@github.com:embian-inc/Appium-Python-Console.git

                # APC 폴더로 이동
                $ cd Appium-Python-Console
              
            

2) Virtualenv(가상환경) Setting

Virtualenv 환경을 구성할 것을 권장합니다.
개발환경을 Virtualenv로 구성하는 것을 원하지 않을 경우 다음 단계를 진행해 주세요.

              
                # 가상환경(venv) 생성
                $ virtualenv venv

                # 가상환경 활성화
                # (venv)$  //가상환경 활성화 상태의 Prompt
                $ . venv/bin/activate

                # 비활성화
                (venv)$ deactivate
              
            

3) pip를 통한 requirements install

requirements.txt에 미리 지정되어 있는 의존성 패키지를 설치해 주세요.

              
                $ pip install -r requirements.txt
              
            

4) PC 와 Mobile Device 연결

모바일 디바이스는 개발자옵션이 활성화 되어 있어야 됩니다.

              
                # 디바이스 연결상태 확인
                $ adb devices

                List of devices attached
                7387d0d19904	device # ok
              
            

5) Config 파일 Setting

Appium-Python-Console/app/config.py 파일을 열어 아래 5개 항목을 수정해 줍니다.

DEVICE_NAME 'adb devices' 를 통해 출력된 디바이스의 고유번호 (혹은 이름)
PLATFORM_VERSION 연결된 디바이스의 Android 플랫폼 버전
DOC_SAVE_DIR APC의 Manual Test Mode에서 XML, HTML, Screen Shot 파일이 저장 될 디렉토리 경로
APK_FILE_DIR APC 실행 시 디바이스에서 실행될 APK 파일이 위치한 경로
APK_FILE_NAME APK_FILE_DIR 경로에 위치해 있는 APK 파일의 이름

              
                #-*- coding: utf-8 -*-
                import os, sys
                from os.path import expanduser


                ##################################################################
                # PLEASE DO NOT CHANGE THIS SECTION. INSTEAD, USE SYMLYNK
                #  use  your personal directory. use symlink!
                ##################################################################
                PROJECT_ROOT_PATH = os.path.split(os.path.dirname(os.path.abspath(__file__)))[0]
                DOC_SAVE_DIR = os.path.join(PROJECT_ROOT_PATH, 'doc_file')
                APK_FILE_DIR = os.path.join(PROJECT_ROOT_PATH, 'apk_files')


                ##################################################################
                # Only Change following line (apk file name)
                ##################################################################
                APK_FILE_NAME = 'myAndroidApp.apk'


                ##################################################################
                # DO NOT CHANGE FOLLOWING LINES WHEN THERE ARE ONLY ONE DEVICE
                # following two arguments are automatically overrided
                # when there is only one device attached to your pc
                ##################################################################
                PLATFORM_NAME = 'Android'
                DEVICE_NAME = '7387d0d19904'
                PLATFORM_VERSION = '6.0'

              
            

6) appium 실행

새로운 터미널을 열어 Appium을 실행 시킵니다.

              
                # appium 실행
                $ appium

                # 아래와 같은 메세지가 출력 되면 Appium 실행 완료
                [Appium] Welcome to Appium v1.6.5
                [Appium] Appium REST http interface listener started on 0.0.0.0:4723
              
            

7) Appium-Python-Console 실행

Appium이 실행된 터미널이 아닌 다른 터미널에서 APC를 실행 시킵니다.

              
                $ python main.py
              
            


2. APC(Appium-Python-Console) Command Methods

Name
help()
clear()
exit()
page()
action_table()
manual_test(mode='h')
methods()
methods(num)
driver
  • help() : 도움말. APC Command Methods 목록 출력

  • clear() : Console Clear (terminal의 clear 같은 기능)

  • exit() : APC 종료

  • page() : 현재 페이지에서 Resource-id, Content-desc, Text, Action(Clickable, Scrollable) 값이 있는 요소들의 정보 출력

    • 출력 정보 : class명, resource_id, content-desc, text, bounds, (Clickable), (Scrollable)

    • page_method
  • action_table() : 현재 페이지에서 Action 수행이 가능한 Element의 List를 Table형식으로 제공

    • 사용법 :

      • action_table() - Class, Resource-id, Content-desc, Text, Bounds, Action Type, Context 출력

      • action_table('d') - 위 항목에 추가로 Xpath를 함께 출력

  • manual_test(mode='h') : 별도의 Test Script 작성없이 사용자와의 Interaction을 통해 간단한 test를 진행해 볼 수 있는 모드

    • mode='n' - UIAutomator를 통해 수행가능한 Action 정보 추출 [Default]

    • mode='h' - UIAutomator와 Chromedriver를 통해 수행가능한 Action 정보 추출

  • methods() : Python Client를 통해 사용할 수 있는 WebDriver Methods 리스트 출력

  • methods(num) : methods()를 통해 출력된 리스트 중 특정 번호에 해당하는 Method의 상세 정보 출력

    • 사용법 :

      • methods(42)

  • driver : WebDriver Object.

    • 사용법 :

      • driver.contexts

      • driver.find_element_by_id('RESOURCE_ID')



3. Manual Test Mode Usage

1) Manual Test Mode가 실행되면 App의 현재 페이지 에서 수행 가능한 Elements의 목록이 Action List Table로 출력 됩니다.
2) Action Table List에 표시된 정보를 보고 액션을 수행하길 원하는 Table row의 번호를 입력 합니다.
3) 입력한 번호의 Action이 Input이 아닌 경우는 바로 액션을 수행하게 되고, Input 일 경우는 Input value를 한번더 입력하면 해당 액션을 수행하게 됩니다.
4) 액션 수행이 완료 되면 다시 Step 1 부터 진행되게 됩니다.