Appium이란?

모바일앱을 개발하고 계신가요? 모바일 앱을 테스트하고 계신가요? 그러면 이 모바일 앱 테스트를 자동화할 수 있는 도구가 Appium입니다.

GitHub - appium/appium: Cross-platform automation framework for all kinds of your apps built on top of W3C WebDriver protocol
Cross-platform automation framework for all kinds of your apps built on top of W3C WebDriver protocol - GitHub - appium/appium: Cross-platform automation framework for all kinds of your apps built…
Appium은 네이티브, 하이브리드, 모바일 웹 및 데스크톱 앱을 위한 오픈 소스 크로스 플랫폼 테스트 자동화 도구입니다. 처음에는 iOS 및 Android 모바일 애플리케이션을 자동화하기 위해 개발된 Appium 은 다양한 모바일 및 데스크톱 플랫폼 전체에 WebDriver 기반 자동화 가능성 을 제공하는 모든 기능을 갖춘 플랫폼으로 성장했습니다 .

모바일 테스트 자동화는 거의 Appium이 독점하고있습니다. 크로스 플랫폼, 무료 오픈소스이며 Android, iOS 등 앱 테스트에 사용할 수 있기에 모바일 시장의 성장과 함께 많은 곳에서 사용되고 있습니다.

또한 Appium은 WebDriver 라는 웹 테스트 자동화 표준을 준수하여 이미 검증된 인터페이스를 제공하고있습니다. 이 덕분에 모바일 테스트 자동화를 많은 사람들이 시도해보고 있습니다.

Appium을 도입했는데 그 다음은?

Appium은 모바일 테스트 자동화를 용이하게 해주었지만, 모든 문제가 Appium만으로 해결되지는 않습니다. Appium은 하나의 기기를 테스트 하기위한 인터페이스를 제공하지만 실제 Appium을 이용하여 자동화 시스템을 구현하는 것은 험난한 과정입니다.

구축과정

  • Appium스크립트는 한 번에 하나의 기기를 대상으로 실행됩니다. 이 Appium스크립트를 여러기기를 대상으로 실행하도록 추가적으로 스크립트를 작성해야합니다.
  • 테스트 자동화 스크립트는 앱이 변경되었을때마다 실행되어야 합니다. 이를 위해 CI/CD를 통해 Appium 테스트 스크립트를 실행하도록 연동해야합니다.
  • CI/CD를 통해 Appium스크립트를 연동하면 각 테스트에 대한 성공실패 로그만 남습니다. 우리는 이 결과를 완전히 신뢰할 수 있나요? 스크립트 작성자가 잘못된 테스트를 작성해서 테스트가 성공한것처럼 보이면 어떡하죠? 이는 진행한 테스트에 대한 동영상을 보면 정상 성공인지 확인 할 수 있습니다.
  • 대부분의 CI/CD시스템은 동영상을 업로드하고 웹브라우저에서 볼 수 있는 기능을 제공하지 않습니다. 따라서 별도의 웹서버를 구축해 테스트 동영상을 볼 수 있도록 해야합니다.
  • 특정 디바이스에 문제가 생긴 경우 대응이 까다롭습니다. 특정 기기에서만 테스트가 진행되지 못했거나, 실패했다면 어떻게 대응해야할까요? 아마 직접 그 기기가 있는 곳으로 가서 해당 기기만 따로 빼고 다시 테스트 해보아야 할 것입니다.

자동화 시스템 구축 서비스는 없을까?

다행히 위에 문제 해결을 도와주는 도구가 있습니다. Dogu입니다.

Dogu Technologies - Seamless Test Automation Platform
Revolutionize your testing workflow with our game and application test automation platform. Execute automated tests using Dogu and optimize your software quality assurance.

Dogu는 많은 기능을 제공합니다.

  • 모바일 기기를 콘솔에 연결하여 연결된 모든 기기를 웹브라우저에서 접근하고 제어할 수 있습니다.
  • 각 기기에 접근할 수 있는 유저들을 제한할 수 있습니다.
  • 콘솔에 연결된 모든기기에 Appium테스트 스크립트를 실행할 수 있습니다. 이렇게 연결된 기기를 대상으로 테스트하는 것을 "루틴" 이라고 부릅니다.
  • 테스트 스크립트 실행중인 기기의 화면을 실시간으로 확인할 수 있습니다.
  • 모든 테스트는 Android, iOS로그, 스크립트 로그 영상이 제공됩니다.
  • Chrome, Firefox, Safari, Unity Game에 대한 테스트도 지원합니다.
  • apk, ipa등의 앱을 업로드, 삭제 등 관리하는 기능을 제공합니다.
  • Github, Gitlab, Bitbucket과 연동가능합니다.
  • 성공, 실패의 결과를 Slack 알림으로 받아 볼 수 있습니다.

아래가 Dogu를 통한 루틴의 예시입니다. 🎉

0:00
/0:10

Dogu는 어떻게 병렬 테스트를 지원할까?

Dogu는 루틴 기능을 통해 Appium 관련 자질구레한? 작업을 자동으로 해줍니다.

  • "루틴" 이라는 기능과 Appium을 연동하는 가이드 example 을 제공합니다.
  • 추가로 DoguAgent라는 앱을 통해 Appium에 필요한 툴들을 설치해주기도 합니다.

루틴

루틴 테스팅은 여러분의 테스트 스크립트(예: pytest, jest 또는 테스트 프레임워크가 아니더라도)를 다른 CI 시스템과 통합하여 Dogu 디바이스 팜과 주기적으로 테스트할 수 있도록 하는 기능입니다.

아래가 루틴의 예시입니다. GUI로 실행할 앱/디바이스/스크립트를 지정할 수 있고, 더 나아가 좀 더 조작하고 싶은내용이 있다면 yaml형식으로도 작성할 수 있습니다.

위 루틴을 통해 아래 스크립트를 실행하면 병렬테스트를 실행할 수 있습니다.

import { test, expect } from "@jest/globals";
import { driver } from "./setup.js";

test("find and click wikipedia", async () => {
  const searchSelector = await driver.$("~Search Wikipedia");
  await searchSelector.waitForDisplayed({ timeout: 30_000 });
  await searchSelector.click();
}, 10_000);

test("find insert text", async () => {
  const insertTextSelector = await driver.$(
    'android=new UiSelector().resourceId("org.wikipedia.alpha:id/search_src_text")'
  );
  await insertTextSelector.waitForDisplayed({ timeout: 30_000 });
  await insertTextSelector.addValue("Wikipedia");
  await driver.pause(5_000);
}, 10_000);

test('expect to find "Wikipedia"', async () => {
  const allProductsName = await driver.$$(`android.widget.TextView`);
  expect(allProductsName.length).toBeGreaterThan(0);
});

그 결과를 이렇게 보기쉽게 정리까지 해주죠!

어떤가요? 이 글에서는 간략히 Dogu 병렬테스트를 살펴봤는데요. 관심이 있으실까요? 관심있으시다면 한 번 Dogu를 도입해보세요! Dogu는 테스트 자동화를 보다 쉽게 도입하기 위한 기능을 많이 제공하고 있고 앞으로도 발전하고 있습니다.