환경 구축

0. 시작에 앞서

Appium이란, Native, Hybrid, 모바일 웹을 테스팅하는 Node.js기반의 Application UI 테스팅 프레임워크입니다. Android/iOS Application 뿐만아니라, Windows Application도 테스트할 수 있습니다.

우리는 JAVA/Python/PHP 등의 언어로 Application 동작을 제어하는 자동화 Test Code를 작성할 수 있는데요. 자동화 Test Code 작성은 크롬 등 웹 Application기반 테스트 자동화 드라이버인 Selenium WebDriver를 이용하여 작성합니다.

위의 언어들로 Test Code를 작성하면 Appium은 Android/iOS/Windows에 우리가 작성한 Code대로 Application을 동작시켜 줍니다.

1. Windows Application 테스트 자동화

이 게시물에서는 아래 테스트 자동화 Flow와 같이 Python(Test Code) + Appium(Automation Server) + WinAppDriver(Application Driver) 기반의 Windows Application 테스트 자동화를 위한 개발/실행 환경에 대해 이야기합니다.

  • Test Runner PC와 Test Node PC#1~N상에서 구동되는 Appium Server(Automation Server)는 각각의 IP Address를 가지고 실행되고 있습니다.
  • Test Runner PC에서 Selenium WebDriver API를 이용해 작성된 Test Code는 실행할 Application과 Mouse Click과 Keyboard Press와 같은 Application UI상에서 수행할 동작에 관한 정보를 HTTP MessageAppium Server로 보냅니다.
  • Appium Server는 HTTP Message에 포함된 Platform(OS) 정보를 기반으로 Native Application UI상에서 수행할 동작을 컨트롤하기 위해 Platform-dependant한 Driver를 이용합니다. 여기서 Windows Application을 테스트하기 때문에 Platform-dependant한 Driver로 Microsoft사가 제공하는 WinAppDriver(WAD)를(Link: https://github.com/microsoft/WinAppDriver) 이용합니다.

※ 참고로 현재까지 11개의 Driver가 있습니다.

  • Appium: this automation name really means “just give me the default driver for the platform I’ve chosen.” It’s not actually a separate driver on its own.

  • UiAutomator2: this is the current default Android driver, based on Google’s UiAutomator technology.

  • UiAutomator1: this is the older Android driver, based on an older version of UiAutomator.

  • XCUITest: this is the current iOS driver, based on Apple’s XCUITest technology.

  • YouiEngine: this is a driver produced by You.i Labs, to support automation of apps on many different platforms built using their SDK.

  • Espresso: this is the newest Android driver, based on Google’s Espresso technology.

  • Tizen: this is a driver produced by Samsung to assist in automation of Xamarin apps built for the Tizen OS.

  • Fake: the “fake” driver is used internally by Appium for the purpose of testing, and you shouldn’t need to ever use it.

  • Instruments: this is an older iOS driver based on an Apple technology which was removed after iOS 9. Basically, don’t use this.

  • Windows: Microsoft put together an Appium-compatible server called WinAppDriver, and this is the driver that connects it up with the main Appium server. You can use this driver to automate Windows apps.

  • Mac: this is a driver which enables automation of Mac desktop apps.

2. 환경 구축

위와 같은 테스트 자동화 Flow 구성을 위해 Test Runner PC와 각 Test Node PC상에 설치가 필요한 프로그램에 대해 이야기 합니다.

[JAVA 실행 환경인 JAVA SE 8 설치@Test Runner PC/Test Node PC]

Appium 구동을 위해 JAVA 실행 환경을 준비합니다.

[Python 개발 환경인 Anaconda 설치@Test Runner PC]

Miniconda도 있지만 Jupyter Notebook을 사용하기 위해 Anaconda를 이용해 Test Runner에서 Python Test Code를 개발합니다.

[Javascript 실행 환경인 Node.js 설치@Test Runner PC/Test Node PC]

Appium은 Node.js를 기반으로 합니다. 따라서 구동을 위해서 Node.js사이트에서 LTS버전을 받아 설치합니다. 참고로 LTS는 Long Term Support의 약자로 홀수버전보다 안정적인 LTS 버전을 설치하는 것을 추천합니다. (Link: https://nodejs.org/ko/)

[Appium 설치@Test Runner PC/Test Node PC]

Appium 설치에는 2가지 방법이 있습니다. 향후, 기능 추가를 위한 개발시 다른 Node.js 기반 프레임워크와 연동을 고려한다면 npm을 이용한 설치를 추천합니다.

  • Appium Server in Desktop GUIs for Mac, Windows, and Linux 설치 파일을 이용하는 경우, 사이트에서 (Link: https://github.com/appium/appium-desktop) 다운받아 설치합니다.

  • npm(Node Package Manager)을 이용한 Node.js 패키치로 설치

    • CLI(Command Line Interface/Windows의 경우 명령프롬프트(cmd), Power Shell 등)에서 아래와 같이 입력한다.

      npm install -global appium
      
    • 참고로 -global 옵션 설치의 경우, npm global 영역에 설치된다. default global 경로는 아래와 같다.

      C:\Users\<username>\AppData\Roaming\npm\node_modules
      

[WinAppDriver 설치@Test Runner PC/Test Node PC]

Windows Application을 테스트하기 위한 Platform-dependant한 Driver인 WinAppDriver를 설치합니다. 해당 사이트에서 설치파일을 다운받아 설치합니다. (Link: https://github.com/microsoft/WinAppDriver)

WinAppDriver를 사용하기 위해서는 [Windows 설정→업데이트 및 보안→개발자용→개발자 모드를 선택]하여 개발자 모드를 활성화해야 합니다.

참고로 WinAppDriver는 C:\Program Files (x86)\Windows Application Driver에 설치되며 WinAppDriver.exe 파일입니다. Driver라고 했는데, 확자자가 *.exe 형태의 실행 파일입니다. WAD 사이트에서 설명하길 Default IP Address and Port로 (127.0.0.1:4723) 실행 혹은 아래와 같이 Admin 권한으로 구성을 변경하여 실행 시킬 수 있다고 합니다.

이렇게 실행하게 되면, 위의 테스트 자동화 Flow 구성도에서 Test Runner PC에서 Appium 없이 Test Code에서 WAD로 Directly HTTP Message를 보내는 형태가 됩니다. 즉, Test Code가 실행되는 Local PC에서는 Appium 없이도 WAD를 이용해 Windows Application 테스트가 가능합니다. 실험에 의하면 Remote에 있는 Test Node PC의 Windows Application의 Test는 Appium을 통해서만 가능합니다.

WinAppDriver.exe 4727
WinAppDriver.exe 10.0.0.10 4725
WinAppDriver.exe 10.0.0.10 4723/wd/hub

자세한 내용은 WAD 사이트의 계산기 테스트 자동화(CalculatorTest) Python Sample을 (Link: https://github.com/microsoft/WinAppDriver/tree/master/Samples/Python) 가지고 위의 테스트 자동화 Flow를 구현해 보겠습니다.