JavaScript를 사용하여 Appium Automation을 설정하려면 이 가이드를 따르세요.

*최종 업데이트 2025년 5월

 

오늘날 소프트웨어 개발 환경에서 모바일 테스트 자동화는 그 어느 때보다 중요합니다. 네이티브 iOS 및 Android 앱에서 완벽한 사용자 경험을 제공하거나, 하이브리드 애플리케이션을 최적화하거나, 일관된 성능을 보장하는 등 어떤 목표를 추구하든 자동화는 프로세스를 구동하는 엔진입니다. 이 가이드는 Node.js 및 Android/iOS SDK와 같은 필수 구성 요소 설치부터 Appium 및 필수 JavaScript 라이브러리 구성까지 JavaScript를 사용하여 Appium 자동화 환경을 설정하는 방법을 안내합니다. 이 가이드를 통해 모바일 앱 테스트를 효율적으로 자동화할 수 있는 탄탄한 기반을 마련하시기 바랍니다.

개발 환경 설정부터 시작해 보겠습니다. 이는 디지털 툴킷이 될 것입니다. 먼저 자동화 작업의 기반이 될 몇 가지 필수 소프트웨어 구성 요소와 JavaScript 라이브러리를 설치하겠습니다. 시작해 볼까요?

Appium 설치를 위한 전제 조건

우리가 건축하기 전에 꼭 필요한 필수 도구는 다음과 같습니다.

Node.js와 npm(또는 Yarn): 이러한 패키지는 JavaScript에 필요한 런타임 환경을 제공합니다. npm(Node Package Manager)은 Node.js와 함께 제공되며 JavaScript 라이브러리를 설치하는 데 도움을 줍니다. Yarn도 사용할 수 있는 대체 패키지 관리자입니다.

권장 사항 : 공식으로 이동 Node.js를 웹사이트에 접속하여 최신 안정 버전을 다운로드하세요 LTS(장기 지원) 버전. 설치가 완료되면 터미널이나 명령 프롬프트를 열고 다음을 실행하여 설치를 확인하세요.

```배쉬
노드 -v
엔피엠 -

원사 사용(선택 사항): Yarn을 선호하는 경우 npm을 사용하여 전역적으로 설치할 수 있습니다.

```배쉬
Npm 설치 -g yarn
```

다음을 사용하여 설치를 확인하세요.

```배쉬
Yarn --버전
```

더 많은 필수 도구

  • JDK (Java Development Kit) : JavaScript를 작성하지만 Appium과 그 기반 구성 요소 중 일부는 Java를 사용합니다. 특히 Android 자동화의 경우 더욱 그렇습니다.
    • 권장 사항 : 호환되는 JDK를 설치하세요. 다음에서 다운로드할 수 있습니다. 오라클 웹사이트 (계정이 필요할 수 있음) 또는 다음과 같은 오픈 소스 대안을 사용하세요. openjdk.
    • 환경 변수: JDK를 설치한 후에는 다음을 설정해야 할 가능성이 있습니다. `JAVA_HOME` 환경 변수를 JDK 설치 디렉토리로 지정하여 다른 도구가 Java를 찾을 수 있도록 합니다.
  • Android SDK(Android 자동화용): Android 앱을 자동화하려면 Android 소프트웨어 개발 키트(SDK)가 필요합니다. 여기에는 필요한 도구, 라이브러리, 에뮬레이터가 포함되어 있습니다.
    • 권장 사항 : 다운로드 및 설치 Android Studio설정 중에 필요한 SDK 구성 요소를 선택하고 설치할 수 있습니다.
    • 환경 변수 : 설정 `안드로이드 홈` Android SDK 디렉토리에 환경 변수를 추가합니다. 또한 다음을 추가합니다. `플랫폼 도구` 시스템의 PATH 환경 변수에 Android SDK 내의 디렉토리를 추가하여 필수 도구에 액세스합니다. `adb`.
  • Xcode 및 iOS SDK(iOS 자동화용): iOS 애플리케이션을 자동화하기 위해 Xcode는 iOS SDK를 포함하는 Apple의 개발 환경입니다.
    • 권장 사항 : Xcode는 macOS에서 사용할 수 있으며 다음에서 다운로드할 수 있습니다. 애플 개발자 웹 사이트 또는 Apple ID가 필요한 Mac App Store.
    • Xcode 명령줄 도구: Xcode를 설치한 후 열고 다음으로 이동합니다. Xcode > 설정… > 위치, 설치 명령줄 도구 드롭 다운 메뉴에서
  • Appium Doctor: 이 편리한 도구는 시스템에 Appium에 필요한 모든 종속성이 있는지 확인합니다. 나중에 설정을 확인하는 데 사용할 것입니다.

Appium 설치

필수 구성 요소를 모두 갖추었으니 Appium 자체를 설치해 보겠습니다.

  1. Appium 서버를 설치하세요: 터미널이나 명령 프롬프트를 열고 NPM을 사용하여 이 명령을 전역적으로 실행하면 시스템에 최신 안정적인 Appium 2.x 서버가 설치됩니다.
```배쉬
Npm 설치 -g appium
```
  1. Appium 드라이버 설치: 다음으로, 테스트할 모바일 플랫폼용 드라이버를 설치합니다. 가장 많이 사용되는 드라이버는 Android용 UiAutomator2와 iOS용 XCUITest입니다.

Appium 드라이버 CLI를 사용하여 설치하세요.

Android(UiAutomator2)의 경우:

```배쉬
Appium 드라이버 설치 uiautomator2
```

iOS(XCUITest)의 경우:

```배쉬
Appium 드라이버 설치 xcuitest
```

설치된 드라이버 확인: 다음을 실행하면 어떤 드라이버가 설치되었는지 확인할 수 있습니다.

```배쉬
Appium 드라이버 목록 --설치됨
```

필요한 JavaScript 라이브러리 설치

Appium을 설정한 후에는 JavaScript 코드가 Appium 서버와 통신할 수 있도록 클라이언트 라이브러리가 필요합니다. JavaScript에 가장 널리 사용되고 권장되는 라이브러리는 `WebdriverIO`입니다.

1. 프로젝트 디렉토리를 만듭니다. Appium JavaScript 테스트를 위한 새 폴더를 만들고 터미널에서 해당 폴더로 이동합니다.

```배쉬
Mkdir appium-js-tests
Cd appium-js-테스트
```

2. 프로젝트 초기화: NPM(또는 Yarn)을 사용하여 생성 `패키지.json` 프로젝트의 종속성을 추적하는 파일:

```배쉬
npm 초기화 -y
```

(또는 `yarn init -y`)

3. WebdriverIO 설치: 설치 `웹드라이버IO` 패키지와 해당 동기 명령 실행 래퍼를 개발 종속성으로 지정합니다.

```배쉬
Npm install --save-dev WebdriverIO WebdriverIO/sync
```

(또는 `yarn add –dev WebdriverIO WebdriverIO/sync`)

4. Appium 서비스 플러그인을 설치하세요. WebdriverIO가 Appium과 원활하게 작동하도록 하려면 Appium 서비스 플러그인을 설치하세요.

```배쉬
Npm 설치 --save-dev @wdio/appium-service
```

(또는 `yarn add –dev @wdio/appium-service`)

5. 테스트 러너 설치(선택 사항이지만 권장): WebdriverIO 스크립트를 직접 실행할 수도 있지만, Mocha와 같은 테스트 러너를 사용하면 테스트를 더욱 체계적으로 구성하고 실행할 수 있습니다. Mocha를 설치하는 방법은 다음과 같습니다.

```배쉬
Npm 설치 --save-dev 모카
```

(또는 `yarn add –dev mocha`)

이제 JavaScript를 사용하여 Appium 환경을 성공적으로 설정했습니다. 이제 Appium 아키텍처를 살펴보고 첫 번째 모바일 자동화 테스트를 작성할 준비가 되었습니다.

Appium 아키텍처 이해

환경이 설정되었으므로 Appium의 작동 방식과 내부적으로 어떤 작업을 수행하는지 잠시 살펴보는 것이 중요합니다. Appium은 클라이언트-서버 아키텍처테스트 스크립트(클라이언트)가 지침을 보내는 곳 Appium 서버. 서버는 특수 드라이버를 사용하여 모바일 기기와 상호 작용합니다. 이를 통해 다양한 운영 체제에서 플랫폼 독립성과 일관된 자동화가 보장됩니다.

Appium 서버 요소:

  • HTTP 서버: Appium Server는 REST API(Representational State Transfer Application Programming Interface)를 사용하는 Node.js로 작성된 HTTP 서버입니다. 즉, 테스트 스크립트는 HTTP 요청을 전송하여 서버와 통신합니다.
  • WebDriver 프로토콜: Appium은 현재 W3C WebDriver 사양으로 알려진 WebDriver 프로토콜을 구현합니다. 이는 Selenium WebDriver를 사용한 웹 브라우저 자동화에 사용되는 프로토콜과 동일합니다. 이 표준은 개발자와 테스터에게 일관성을 제공합니다.
  • 세션 관리: Appium 테스트를 실행할 때 클라이언트는 서버에 "세션" 시작 요청을 보냅니다. 세션은 테스트하려는 기기/에뮬레이터/시뮬레이터 및 애플리케이션별로 지정됩니다. 서버는 이 세션의 수명 주기를 관리합니다.
  • 명령 실행: 세션이 설정되면 테스트 스크립트가 Appium 서버로 명령을 전송합니다(예: "요소 찾기", "클릭", "키 전송"). 그러면 서버는 이러한 명령을 해석하여 대상 모바일 기기에서 수행되는 작업으로 변환합니다.
  • 운전자 위임: Appium은 특정 드라이버에게 상호작용을 위임합니다. 예:
    • Android 자동화의 경우 Appium은 UiAutomator2나 Espresso와 같은 드라이버를 활용합니다.
    • iOS 자동화의 경우 XCUITest 드라이버를 사용합니다.

Appium 클라이언트

이는 다양한 프로그래밍 언어로 테스트 스크립트를 작성할 수 있게 해주는 라이브러리 또는 언어 바인딩입니다. 앞서 설치한 JavaScript 클라이언트 라이브러리인 WebDriverIO를 사용할 것입니다.

  • 언어 바인딩: Appium 클라이언트는 Appium 서버와 통신하는 데 필요한 복잡한 세부 사항을 숨겨주는 사용하기 쉬운 도구(API)를 제공합니다.
  • WebDriver 프로토콜 구현: 이러한 클라이언트 라이브러리는 WebDriver 프로토콜을 구현하여 표준화된 방식으로 Appium Server에 명령을 보낼 수 있습니다.
  • 간소화된 상호작용: 예를 들어, WebDriverIO는 모바일 자동화를 위해 특별히 설계된 다양한 명령과 기능을 제공하여 UI 요소와의 상호 작용, 제스처 처리, 애플리케이션 데이터 검색을 더욱 쉽게 해줍니다.
  • 고객 선택: Appium은 Java, Python, Ruby, C#, 그리고 물론 JavaScript와 같은 언어로 광범위한 클라이언트 라이브러리를 지원합니다.

지원되는 플랫폼

Appium의 주요 장점 중 하나는 크로스 플랫폼 기능입니다. 동일한 API를 사용하여 테스트를 작성할 수 있으며, 많은 경우 여러 모바일 운영체제에서 테스트 코드를 재사용할 수 있습니다. Appium이 지원하는 주요 플랫폼은 다음과 같습니다.

  • iOS Appium은 iOS 애플리케이션과 상호 작용하기 위해 Apple의 XCUItest 프레임워크를 활용합니다.
  • 안드로이드 : Appium은 Google의 Android용 최신 자동화 프레임워크인 UiAutomator2 프레임워크를 사용합니다. Appium은 Android 애플리케이션의 화이트박스 테스트를 위해 Espresso도 지원합니다.
  • 윈도우 : Appium은 winappdriver를 사용하여 Windows 데스크톱 애플리케이션의 자동화를 지원합니다.
  • MacOS : 마찬가지로 Appium은 MacDriver를 사용하여 macOS 데스크톱 애플리케이션에 대한 테스트를 자동화합니다.

JavaScript로 첫 번째 Appium 테스트 작성하기

Appium의 아키텍처를 더 잘 이해하고 환경을 구축했습니다. 이제 JavaScript를 사용하여 첫 번째 모바일 자동화 테스트를 작성해 보겠습니다! 이 섹션에서는 간단한 테스트 스크립트를 생성하여 모바일 기기 또는 에뮬레이터/시뮬레이터에서 실행한 후 초기 결과를 분석해 보겠습니다.

테스트 스크립트 만들기

애플리케이션을 실행하고, 요소를 찾고, 간단한 동작을 수행하는 기본 테스트 스크립트를 만들어 보겠습니다. 앞서 설치한 JavaScript 클라이언트 라이브러리인 WebdriverIO와 Mocha 테스트 러너를 사용할 것입니다.

1. 테스트 파일 설정: 프로젝트 디렉토리 내부(`appium-js-테스트`), 새 폴더를 만듭니다. `테스트`. 이 폴더 안에 새 JavaScript 파일을 만듭니다. 예를 들어, `first_test.js`.

2. 필요한 모듈 가져오기: 엽니다 `first_test.js` 코드 편집기에서 다음을 가져옵니다. `웹드라이버IO` 모듈입니다. 동기 버전을 설치했으므로 다음을 가져옵니다.

```자바스크립트
Const WebdriverIO = require('WebdriverIO');
상수 assert = require('assert'); // 주장을 하기 위해
```

3. 원하는 역량 정의: 이러한 기능은 Appium 서버가 특정 기기나 에뮬레이터/시뮬레이터를 사용하여 특정 애플리케이션을 테스트하도록 지시합니다. 설정에 따라 이 기능을 조정하세요.

```자바스크립트
상수 desiredcaps = {
플랫폼 이름: 'Android', // 또는 '아이오에스'
장치 이름: 'your_device_name', // 장치 또는 에뮬레이터 이름으로 바꾸세요
앱 패키지: 'com.example.android.app', // 앱의 패키지 이름(Android)으로 바꾸세요.
앱 활동: '.mainactivity', // 앱의 기본 활동으로 대체(Android)

// iOS의 경우 다음을 사용할 수 있습니다.
// 플랫폼 이름: 'ios',
// 장치 이름: 'iphone 시뮬레이터', // 또는 시뮬레이터 이름
// 앱: '/path/to/your/app.app' // iOS 앱 파일 경로
};
```

참고 : 당신은 다음을 찾아야 할 것입니다 `장치 이름`, `앱패키지`예산 및 `앱 액티비티` (안드로이드용) 또는 `앱` 테스트하려는 애플리케이션의 경로 및 번들 ID(iOS의 경우). 다음과 같은 도구 `adb ​​장치` (Android의 경우) Appium Inspector를 사용하면 이 정보를 찾을 수 있습니다.

4. 테스트 모음과 테스트 케이스를 만듭니다. 우리는 모카를 사용할 것입니다 `설명하다` `그것` 테스트를 구성하는 블록:

```자바스크립트
설명('내 첫 Appium 테스트', () => {
It('요소를 찾아 작업을 수행해야 함', async() => {
Const 클라이언트 = WebdriverIO.remote({를 기다립니다.
원하는 기능: 원하는 캡,
포트 : 4723 // 기본 Appium 서버 포트
});

// 접근성 ID, xpath 또는 기타 로케이터 전략을 통해 요소를 찾습니다.
Const 요소 = 클라이언트를 기다립니다.$('~someaccessibilityid'); // 접근성 ID를 사용한 예
// 요소에 대한 작업 수행(예: 클릭)
element.click();을 기다립니다.

// 여기에 어설션을 추가하여 결과를 확인할 수 있습니다.
// 예를 들어:
// const anotherelement = 클라이언트를 기다립니다.$('~anotherelementid');
// const isvisible = 다른 요소가 표시될 때까지 기다립니다.
// assert.strictequal(isvisible, true, '클릭 후 다른 요소가 표시되어야 합니다');
// 세션 종료

client.deletesession();을 기다립니다.
});
});
```

이 예에서는 다음과 같습니다.

  • Appium 서버에 연결됨 `WebdriverIO.remote()` 우리가 원하는 능력을 갖추고 있습니다.
  • 접근성 ID 로케이터 전략(접두사 포함)과 함께 `$` 선택기를 사용했습니다. `~`)을 사용하여 요소를 찾을 수 있습니다. XPath(`//`), 클래스 이름 (`.`), ID (`#`), 기타
  • 수행했다 `클릭()` 발견된 요소에 대한 작업입니다.
  • 다음을 사용하여 기본 어설션(주석 처리됨)을 포함했습니다. `단언하다` 동작 후 조건을 검증하는 모듈입니다.
  • Appium 세션 종료하기 `클라이언트.삭제세션()` 장치 리소스를 해제합니다.

테스트 실행

이제 첫 번째 테스트 스크립트를 작성했으니 실행해 보겠습니다.

1. Appium 서버를 시작합니다. Appium 서버가 실행 중인지 확인하세요. Appium을 전역으로 설치한 경우, 일반적으로 새 터미널이나 명령 프롬프트를 열고 다음을 실행하여 Appium을 시작할 수 있습니다.

```배쉬
아 피움
```

서버가 성공적으로 시작되고 기본 포트(4723) 또는 스크립트에서 구성한 포트에서 수신하는지 확인하세요.

2. Mocha를 사용하여 테스트 실행: 터미널에서 프로젝트의 루트 디렉토리로 이동한 후 Mocha 테스트 러너를 실행하고 테스트 파일 경로를 지정합니다.

```배쉬
Npx 모카 테스트/first_test.js
```

Mocha가 테스트 스크립트를 실행하면 터미널에 테스트 성공/실패 여부와 실패 시 오류 메시지가 표시됩니다. Appium이 스크립트의 명령을 실행하는 동안 연결된 모바일 기기나 에뮬레이터/시뮬레이터의 동작도 관찰해야 합니다.

테스트 결과 분석

이제 테스트 실행이 완료되었으므로 결과를 이해했는지 확인해 보겠습니다.

  • 터미널 출력: Mocha 테스트 러너는 실행된 테스트 수, 성공 및 실패한 테스트 수를 포함한 테스트 실행 요약을 제공합니다. 테스트가 실패하면 오류 메시지와 스택 추적을 표시하여 실패 원인을 파악하는 데 도움을 줍니다.
  • Appium 서버 로그: 클라이언트가 전송한 명령과 기기의 응답에 대한 정보를 제공합니다. 이 로그는 디버깅에 도움이 됩니다. 오류 메시지나 예상치 못한 동작이 있는지 살펴보세요.
  • 장치/에뮬레이터 상태: 테스트 실행 후 모바일 기기 또는 에뮬레이터/시뮬레이터의 상태를 확인하세요. 애플리케이션이 정상적으로 실행되었는지, 예상된 동작이 수행되었는지, 기기에 오류나 충돌이 있는지 확인하세요.
  • 주장: 테스트에 단언이 포함된 경우, 단언 중 하나라도 충족되지 않으면 테스트가 실패합니다. 제공하는 단언 메시지를 통해 무엇이 잘못되었는지 파악할 수 있습니다.

이로써 JavaScript를 활용한 첫 번째 Appium 테스트의 결과를 작성, 실행, 분석했습니다. 이는 테스터의 모바일 자동화 여정에서 중요한 단계입니다.

고급 Appium JavaScript 기능

Appium의 고급 기능은 강력한 성능과 유연성을 제공합니다. 이러한 기능을 통해 모바일 애플리케이션과 더욱 정교하게 상호 작용하고, 다양한 시나리오를 처리하고, 테스트 프로세스를 최적화할 수 있습니다. JavaScript를 활용하여 활용할 수 있는 몇 가지 주요 고급 기능을 살펴보겠습니다.

원하는 기능 사용

원하는 기능은 Appium 클라이언트가 서버로 전송하는 키-값 쌍의 집합으로, 자동화 세션 구성 방법을 알려줍니다. 특정 기기, 운영 체제 버전 및 애플리케이션 설정에 맞게 테스트를 맞춤 설정하는 데 필수적입니다.

  • 기본 정보 외: DaVinci에는 `플랫폼 이름`, `장치 이름`, `앱패키지`예산 및 `앱 액티비티` (또는 `번들아이디` `앱` iOS의 경우) 필수적이지만, 다른 많은 기능도 테스트 실행에 상당한 영향을 미칠 수 있습니다.
  • 장치 및 OS 세부 정보: 특정 OS 버전을 타겟으로 삼을 수 있습니다(예: `플랫폼 버전: '13.0'`), 장치 UDID(실제 장치의 경우: `udid: '당신의_기기_udid'`), 또는 사용할 자동화 엔진을 지정(예: `자동화 이름: 'uiautomator2'` 안드로이드 또는 `자동화 이름: 'xcuitest'` iOS의 경우).
  • 응용 프로그램 동작: 원하는 기능은 테스트 중인 애플리케이션의 실행 또는 처리 방식에 영향을 미칠 수 있습니다. 예를 들어, `noreset: true` 세션 간에 앱 데이터가 삭제되는 것을 방지합니다. 반대로, `전체 재설정: 참` 각 세션 전에 앱을 제거했다가 다시 설치하여 깨끗한 상태를 유지합니다.
  • 브라우저 테스트: 모바일 웹 애플리케이션을 자동화할 때 다음과 같은 기능을 사용하세요. `브라우저 이름: '크롬'` (안드로이드의 경우) 또는 `브라우저 이름: 'Safari'` (iOS용).
  • 클라우드 테스팅 플랫폼: Appium과 같은 클라우드 기반 테스트 서비스를 사용하는 경우 Digital.ai 테스트에서는 브라우저 버전, 장치 풀, 빌드 정보 등 클라우드 환경을 정의하기 위해 특정 원하는 기능을 활용하는 경우가 많습니다.
  • 구성 옵션: UiAutomator2는 대기 전략, 네트워크 설정 등을 제어하는 ​​기능을 제공합니다. XCUITest는 알림 및 키보드 동작을 처리하는 기능을 제공합니다.

모바일 제스처 처리

모바일 애플리케이션은 제스처를 통해 작업을 완료합니다. Appium은 자동화 스크립트에서 이러한 복잡한 상호작용을 시뮬레이션하는 메커니즘을 제공합니다. WebdriverIO는 제스처를 처리하는 편리한 방법을 제공합니다.

  • 기본 동작: 간단한 탭이나 클릭의 경우 `요소.클릭` 우리가 이전에 사용했던 방법이면 충분합니다.
  • 터치 액션 API: 더욱 복잡한 제스처를 위해 WebdriverIO는 터치 액션 API를 제공합니다. 이를 통해 화면에서 수행될 수 있는 일련의 터치 이벤트를 정의할 수 있습니다. 다음과 같은 액션을 생성할 수 있습니다.
    • `press()`: 특정 좌표나 요소를 누르는 것을 시뮬레이션합니다.
    • `moveto()`: 터치를 새로운 좌표나 요소로 옮기는 것을 시뮬레이션합니다.
    • `release()`: 터치를 해제하는 것을 시뮬레이션합니다.
    • `wait()`: 지정된 기간 동안 시퀀스를 일시 중지합니다.
    • `tap()`: 요소나 좌표를 빠르게 탭합니다.
    • `doubletap()`: 두 번 탭을 실행합니다.
    • `longpress()`: 길게 누릅니다.
    • `swipe()`: 한 지점에서 다른 지점으로 스와이프하는 동작을 시뮬레이션합니다.
    • `pinchopen()` 및 `pinchclose()`: 핀치-투-줌 제스처를 시뮬레이션합니다.
    • `draganddrop()`: 요소를 끌어서 다른 요소 위에 놓는 것을 시뮬레이션합니다.

다음은 WebdriverIO에서 터치 동작을 사용하여 수행되는 스와이프의 기본적인 예입니다.

```자바스크립트
Const { touchaction } = WebdriverIO;
It('스와이프 동작을 수행해야 함', async() => {
Const 요소 = 클라이언트를 기다립니다.$('~swipeableelement');
상수 위치 = 요소.getlocation();
상수 크기 = element.getsize();

상수 시작x = 위치.x + 크기.너비 / 2;
상수 시작 = 위치.y + 크기.높이 / 2;
Const endx = startx - 200; // 왼쪽으로 스와이프
상수 endy = 시작;

Const action = new touchaction(클라이언트);
동작
.press({ x: 시작x, y: 시작y })
.moveto({ x: endx, y: endy })
.풀어 주다();
action.perform()을 기다립니다.
});
```

이러한 터치 동작을 순서대로 결합하면 모바일 애플리케이션 내에서 매우 다양한 사용자 상호 작용이 시뮬레이션됩니다.

실제 장치와 에뮬레이터/시뮬레이터 작업 비교

자동화된 테스트를 실행할 때 실제 물리적 장치에서 테스트를 실행할지 에뮬레이터/시뮬레이터에서 실행할지 선택하는 것은 복잡하며, 각각 장단점이 있습니다.

에뮬레이터/시뮬레이터

장점:

  • 비용 효율적인 : 일반적으로 SDK의 일부로 무료로 사용할 수 있습니다.
  • 설정 및 관리가 간편합니다. 가상 장치를 비교적 빠르게 만들고 구성합니다.
  • 재현성 : 일관된 테스트 환경을 유지하기가 더 쉽습니다.
  • 디버깅 도구: 종종 더 나은 디버깅 기능과 시스템 로그에 대한 액세스를 제공합니다.

단점 :

  • 항상 실제 장치 동작을 나타내는 것은 아닙니다. 성능, 배터리 소모량, 특정 하드웨어 기능이 정확하게 시뮬레이션되지 않을 수 있습니다.
  • 제한된 하드웨어 접근: 일부 기기별 기능은 완전히 사용할 수 없거나 정확하게 시뮬레이션되지 않을 수 있습니다.
  • 성능 차이: 에뮬레이터나 시뮬레이터의 성능은 실제 기기의 성능을 정확하게 반영하지 못할 수 있습니다.

실제 장치:

장점:

  • 사용자 경험의 정확한 표현: 테스트는 사용자가 상호 작용할 실제 하드웨어와 소프트웨어에서 실행됩니다.
  • 기기 기능에 대한 전체 액세스: 카메라, GPS, 센서 등의 기능을 테스트할 수 있습니다.
  • 현실적인 성능 테스트: 대상 기기의 앱 성능에 대한 정확한 통찰력을 제공합니다.

단점 :

  • 더 높은 비용: 실제 장치를 대량으로 구입하고 유지 관리하는 데는 비용이 많이 들 수 있습니다.
  • 설정 및 관리 복잡성: 여러 개의 물리적 장치를 관리하고, 장치가 충전되어 있고 연결되어 있으며 일관된 상태인지 확인하는 것은 어려울 수 있습니다.
  • 환경적 불일치: 실제 장치에는 다양한 소프트웨어 버전, 구성 및 백그라운드 프로세스가 있을 수 있으며, 이로 인해 테스트 결과가 일관되지 않을 수 있습니다.

Appium 테스트 디버깅 및 문제 해결

Appium 자동화를 진행하는 동안 불가피하게 문제에 직면하게 됩니다. 효과적인 디버깅과 문제 해결은 문제를 신속하게 식별하고 해결하여 테스트 스위트의 안정성과 신뢰성을 보장하는 데 매우 중요합니다.

일반적인 문제 및 솔루션

발행물 기술설명 해법
요소를 찾을 수 없습니다 이는 매우 흔한 오류입니다. 요소 로케이터(접근성 ID, XPath, CSS 선택자 등)를 다시 한번 확인하세요. Appium Inspector를 사용하여 로케이터가 정확하고 상호작용 시점에 요소가 화면에 표시되는지 확인하세요. 하이브리드 앱을 사용하는 경우 애플리케이션 컨텍스트(네이티브, 웹뷰)가 올바른지 확인하세요. 요소가 나타나는 데 시간이 걸리는 경우 명시적인 대기(`client.waituntil()`)를 추가하는 것이 도움이 될 수 있습니다.
세션이 생성되지 않음 예외 이는 일반적으로 원하는 기능이나 Appium 서버 설정에 문제가 있음을 나타냅니다. 원하는 기능에 오타나 잘못된 값이 있는지 주의 깊게 검토하세요. 지정된 장치 또는 에뮬레이터/시뮬레이터가 실행 중이고 접근 가능한지 확인하세요. 세션 생성 중 발생하는 오류 메시지가 있는지 Appium 서버 로그를 확인하세요. 필요한 드라이버(UiAutomator2, XCUITest)가 올바르게 설치되었는지 확인하세요.
Appium 서버가 시작되지 않거나 충돌합니다 Appium 서버 로그에서 오류 메시지를 확인하세요. 다른 프로세스가 동일한 포트(기본값: 4723)를 사용하고 있지 않은지 확인하세요. 서버를 다시 시작하세요. Appium Desktop을 사용하는 경우 로그를 확인하세요. 명령줄을 사용하는 경우 Node.js와 Appium이 올바르게 설치되었는지 확인하세요.
"상호 작용할 수 없는 요소" 예외 요소가 존재하지만 상호 작용할 수 없습니다(예: 숨겨져 있거나, 비활성화되어 있거나, 다른 요소에 의해 가려져 있음). Appium Inspector를 사용하여 요소의 속성과 가시성을 확인하세요. 해당 요소가 활성화되어 있고 다른 UI 요소에 가려져 있지 않은지 확인하세요.
느린 테스트 실행 로케이터를 최적화하여 효율성을 높이세요. 지나치게 복잡한 XPath 표현식은 피하세요. 암묵적 대기에만 의존하지 말고 명시적 대기를 사용하세요. 테스트 흐름에서 불필요한 단계를 최소화하세요. 설정이 허용하는 경우 테스트를 병렬로 실행하세요.
불안정한 테스트 때로는 통과하고 때로는 실패하는 테스트. 앱의 타이밍 문제나 비동기 작업으로 인해 발생하는 경우가 많습니다. 적절한 조건을 명시적으로 적용하는 등 강력한 대기 전략을 구현하세요. 테스트 환경이 안정적인지 확인하고, 하드코딩된 지연에 의존하지 마세요.
테스트 중인 장치 또는 앱이 올바르지 않습니다. 원하는 기능을 다시 한번 확인하여 올바른 장치(장치 이름, UDID)와 애플리케이션(앱 패키지/앱 활동 또는 번들 ID/앱 경로)을 타겟팅하고 있는지 확인하세요.
실제 기기의 권한 문제 실제 기기에서 애플리케이션에 필요한 권한이 부여되었는지 확인하세요. 권한을 수동으로 부여하거나 원하는 기능을 사용하여 권한 요청을 처리해야 할 수도 있습니다.

Appium Inspector 사용하기

Appium Inspector는 연결된 기기나 에뮬레이터/시뮬레이터에서 모바일 애플리케이션의 UI 요소를 실시간으로 검사할 수 있는 GUI 도구입니다. 애플리케이션 구조를 이해하고 자동화 스크립트에 적합한 로케이터를 식별하는 데 도움이 됩니다.

  • 세션에 연결: 검사하려는 애플리케이션에 맞는 원하는 기능과 실행 중인 Appium 서버의 주소 및 포트로 Appium Inspector를 구성합니다.
  • UI 요소 계층 구조: 연결되면 Appium Inspector는 애플리케이션의 UI 요소에 대한 계층적 보기를 표시하여 해당 구조와 속성을 보여줍니다.
  • 위치 식별: Inspector에서 요소를 선택하면 다양한 로케이터 전략(예: XPath, 접근성 ID 등)이 제안됩니다. 테스트 스크립트에서 이를 활용할 수 있습니다.
  • 기본 동작 기록: 일부 버전의 Appium Inspector에서는 탭이나 타이핑과 같은 기본적인 상호작용을 기록하고 JavaScript(WebdriverIO)를 포함한 다양한 프로그래밍 언어로 해당 코드를 생성할 수 있습니다. 이는 테스트 스크립트 작성을 빠르게 시작하는 데 매우 유용합니다.
  • 요소 속성 확인: 개별 요소의 속성을 검사하여 상태(예: 표시됨, 활성화됨, 선택됨)를 파악할 수 있으며, 이는 테스트에서 어설션을 작성하는 데 도움이 될 수 있습니다.

Appium Inspector 사용 방법(일반 단계):

  1. 다운로드 및 설치 : Appium Inspector 최신 버전을 다운로드하세요
  2. Appium 서버 시작: Appium 서버가 실행 중인지 확인하세요
  3. 검사기 구성: Appium Inspector를 실행하고 앱과 기기 또는 에뮬레이터에 필요한 정보로 "원하는 기능" 섹션을 구성합니다.
  4. 세션 시작: "세션 시작" 버튼을 클릭하세요. Appium Inspector가 Appium 서버에 연결하여 기기 또는 에뮬레이터에서 지정된 애플리케이션을 실행합니다.
  5. 요소 검사: 앱이 Inspector에서 실행되면 UI를 탐색하고, 요소를 선택하고, 해당 속성과 제안된 로케이터를 볼 수 있습니다.

로깅 및 보고

효과적인 로깅과 보고는 테스트 실행을 이해하고, 실패를 식별하고, 모바일 애플리케이션의 품질에 대한 통찰력을 얻는 데 필수적입니다.

 벌채 반출:

  • 콘솔 로깅: 가장 간단한 로깅 형식은 다음을 사용하는 것입니다. `console.log()` JavaScript 테스트 스크립트에서 테스트 실행 흐름, 변수 값, 발생한 문제에 대한 정보를 출력합니다.
  • 전용 로깅 라이브러리: 보다 체계적이고 포괄적인 로깅을 위해 다음과 같은 전용 JavaScript 로깅 라이브러리를 사용하는 것을 고려하세요. `윈스턴` or `피노`이러한 라이브러리를 사용하면 로그 수준을 구성하고, 로그 메시지 형식을 지정하고, 로그를 파일이나 다른 출력에 쓸 수 있습니다.
  • Appium 서버 로그: 클라이언트와 서버 간의 통신과 내부 서버 오류에 대한 자세한 기록을 제공해 주세요. 문제 해결 시 이 로그를 주의 깊게 살펴보세요.

 보고 :

  • 모카 리포터스: 터미널에서 테스트 실행 요약에 대한 다양한 수준의 세부 정보를 제공하는 다양한 내장 리포터(예: `spec`, `list`, `dot`)를 제공합니다.
  • 사용자 정의 리포터: 타사 보고 라이브러리를 활용하여 HTML, JSON, XML 등의 형식으로 보다 상세하고 시각적으로 매력적인 보고서를 생성합니다.
  • CI/CD와의 통합: 테스트 결과에 대한 자동 피드백을 제공합니다.
  • 실패 시 스크린샷: 이러한 시각적 증거는 오류의 맥락을 이해하는 데 매우 유용할 수 있습니다. WebdriverIO는 스크린샷을 찍는 방법을 제공합니다.

다음은 Mocha `aftereach` 후크 내에서 WebdriverIO의 테스트 실패 시 스크린샷을 찍는 기본적인 예입니다.

```자바스크립트
Const fs = require('fs').promises;


Aftereach(비동기 함수() {
(this.currenttest.state === '실패')인 경우
Const 스크린샷 = await client.takescreenshot();
상수 파일 이름 = `스크린샷-${Date.now()}.png`;
fs.writefile(`./screenshots/${filename}`, 스크린샷, 'base64');을 기다립니다.
Console.log(`스크린샷이 다른 이름으로 저장됨: ./screenshots/${filename}`);
}
});
```

효과적인 로깅 및 보고 관행을 통해 건강하고 유익한 자동화 프레임워크를 유지하여 테스트 결과를 더 쉽게 이해하고 문제를 신속하게 진단할 수 있습니다.

Appium JavaScript를 다른 도구와 통합

Appium JavaScript 자동화 작업의 효율성과 효과를 극대화하려면 테스트를 다른 도구 및 플랫폼과 통합해야 합니다. 지속적 통합(CI) 도구, 전용 테스트 보고 플랫폼, 그리고 자체 클라우드 기반 테스트 서비스와 같은 주요 통합 기능을 살펴보겠습니다. Digital.ai 테스트.

지속적인 통합 도구

CI(지속적 통합)는 코드 변경 사항을 공유 저장소에 자주 통합하고, 이러한 변경 사항에 대해 자동화된 빌드 및 테스트를 실행하는 개발 관행입니다. Appium JavaScript 테스트를 CI 도구와 통합하면 새 코드가 커밋될 때마다 자동으로 모바일 테스트를 실행할 수 있습니다.

이러한 CI 도구는 애플리케이션의 안정성과 품질에 대한 빠른 피드백을 제공합니다.

  • 젠킨스: 소프트웨어 빌드, 테스트 및 배포를 위한 다양한 플러그인을 지원하는 널리 사용되는 오픈소스 자동화 서버입니다. Jenkins는 기본 테스트 보고서를 생성하고 다른 보고 도구와 통합할 수도 있습니다.
  • Gitlab CI/CD: GitLab에 직접 통합된 이 강력한 CI/CD 시스템은 `.gitlab-ci.yml` 파일을 사용하여 애플리케이션 빌드, 테스트 및 배포를 위한 파이프라인을 정의합니다. 에뮬레이터, 시뮬레이터 또는 연결된 실제 기기에서 Appium JavaScript 테스트를 실행하는 작업을 정의할 수 있습니다.
  • GitHub 작업: GitHub의 내장 CI/CD 플랫폼을 사용하면 GitHub 저장소 내에서 직접 워크플로를 자동화할 수 있습니다.
  • 서클CI: 사용 편의성과 확장성으로 유명한 클라우드 기반 CI/CD 플랫폼입니다. CircleCI 파이프라인을 구성하여 다양한 모바일 환경에서 Appium JavaScript 테스트를 실행할 수 있습니다.
  • 트래비스 CI: GitHub 및 Bitbucket에서 호스팅되는 프로젝트에 대한 자동화된 테스트 실행을 지원하는 또 다른 인기 있는 클라우드 기반 CI 서비스입니다.

테스트 보고 도구

CI 도구는 기본적인 테스트 보고 기능을 제공하는 경우가 많지만, 전용 테스트 보고 도구는 테스트 결과를 시각화, 분석 및 공유하는 데 필요한 고급 기능을 제공합니다. 이러한 도구는 테스트 실행, 실패 분석, 과거 추세 및 전체 테스트 커버리지에 대한 자세한 정보를 제공합니다.

수단 기술설명
Allure 프레임워크 아름답고 유익한 HTML 보고서를 생성하는 매우 인기 있는 오픈소스 보고 프레임워크입니다. 테스트 분류, 히스토리 추적, 실패 스크린샷 캡처 등의 기능을 제공합니다. Allure는 Mocha 및 기타 테스트 러너와 함께 사용할 수 있는 JavaScript 어댑터를 제공합니다.
리포트포털 AI 기반 오픈소스 테스트 자동화 분석 플랫폼입니다. 실시간 보고, 실패 분석, 다양한 테스트 프레임워크 및 CI/CD 도구와의 통합 기능을 제공합니다.
테스트레일 테스트 케이스를 정리하고, 테스트 실행 상태를 추적하고, 포괄적인 보고서를 생성할 수 있는 상용 테스트 케이스 관리 및 보고 도구입니다. API를 통해 JavaScript 테스트 프레임워크와 통합할 수 있습니다.
범위 보고서 시각적으로 매력적인 HTML 보고서를 생성하는 또 다른 인기 보고 라이브러리로, 스크린샷, 로그, 테스트 분류 등의 도구를 제공합니다. JavaScript 구현도 가능합니다.

Digital.ai'의 클라우드 테스팅 플랫폼

일반적으로 클라우드 테스트 플랫폼은 클라우드에 호스팅된 다양한 실제 모바일 기기와 에뮬레이터/시뮬레이터에 대한 온디맨드 액세스를 제공합니다. 이를 통해 자체 기기 랩을 유지할 필요가 없으며 모바일 자동화 테스트에 확장성과 유연성을 제공합니다.

Digital.ai Testing은 다양한 실제 기기, 에뮬레이터, 시뮬레이터를 제공하는 선도적인 클라우드 테스트 플랫폼입니다. Appium 지원, 상세 보고, 테스트 세션 비디오 녹화, CI/CD 도구와의 통합을 제공합니다.

Appium JavaScript 테스트 실행 Digital.ai 테스트 :

  1. 클라우드에 로그인
  2. 원하는 기능 구성: 클라우드 플랫폼에 대해 Appium 테스트를 실행할 때 플랫폼 인증을 위한 구체적인 원하는 기능을 지정하고 원하는 장치, OS 버전, 브라우저(모바일 웹을 테스트하는 경우)를 정의해야 합니다. 자세한 내용은 설명서를 확인하세요..
  3. 원격 웹 드라이버 구성 업데이트: WebdriverIO 구성에서 `호스트 이름`, `포트`를 업데이트하고, 인증 세부 정보(사용자 이름/액세스 키)를 추가해야 할 수도 있습니다. WebdriverIO 가이드에 대한 링크는 다음과 같습니다..
  4. 테스트 실행: 평소처럼 WebdriverIO/Mocha 테스트를 실행하세요. WebdriverIO는 구성된 원격 Webdriver 설정과 원하는 기능을 사용하여 클라우드 테스트 플랫폼에 연결합니다.
  5. 결과 및 로그 보기: Digital.ai "리포터" 테스트 모바일 스튜디오의 일부로, 테스트 세션 상태를 보고, 비디오 녹화를 시청하고, 장치 로그에 액세스하고, 테스트 결과를 분석할 수 있습니다.

Appium JavaScript 모범 사례

Appium과 JavaScript에 대한 경험이 쌓이면 유지 관리가 가능하고 효율적이며 안정적인 자동화 프레임워크를 만드는 데 도움이 되는 몇 가지 모범 사례를 알려드립니다.

테스트 모음 구성

잘 구성된 테스트 모음은 조직, 유지 관리 및 확장성을 위해 필수적입니다.

  • 기능별로 정리: 앱 기능별로 그룹 테스트를 진행합니다(예: "로그인", "결제").
  • 명확한 이름을 사용하세요: 설명적인 파일 및 폴더 이름을 사용합니다(예: login.spec.js).
  • 별도의 페이지 개체: UI 요소를 관리하기 위해 페이지 개체 모델(POM)을 구현합니다.
  • 설치/해체 활용: 테스트 설정 및 정리를 위해 후크(beforeEach, afterEach)를 사용합니다.
  • 테스트를 독립적으로 유지하세요: 테스트 종속성을 피하세요. 각각은 자체 상태를 설정해야 합니다.
  • 데이터 기반 테스트 사용: 여러 입력이 있는 시나리오에 대한 테스트 데이터를 외부화합니다.
  • 도우미 함수 구현: 일반적인 작업에 재사용 가능한 유틸리티를 만듭니다.
  • 자동화 계층을 고려하세요. 더 나은 추상화를 위해 복잡한 프레임워크를 계층으로 구성합니다.

성능 최적화하기

효율적인 테스트 실행은 시기적절한 피드백과 리소스 활용에 매우 중요합니다. Appium JavaScript 테스트의 성능을 최적화하는 팁은 다음과 같습니다.

  • 효율적인 위치 검색기를 사용하세요: 빠르고 안정적인 로케이터(예: 접근성 ID)를 우선시합니다.
  • 대기 시간 최소화: 특정 조건을 사용하여 명시적 대기를 사용합니다.
  • 기능 최적화: 꼭 필요한 기능만 포함하세요.
  • 세션을 (신중하게) 재사용하세요: 오버헤드를 줄이려면 세션을 재사용하는 것을 고려하세요. 하지만 잠재적인 종속성을 염두에 두세요.
  • 병렬로 테스트 실행: 가능하면 테스트를 동시에 실행하세요.
  • 이미지 처리 최적화: 필요한 경우 이미지 비교와 크기를 최적화하세요.
  • 프로필 테스트: 테스트 코드에서 성능 병목 현상을 파악합니다.
  • 헤드리스(웹뷰)를 고려하세요. 더 빠른 웹뷰 테스트를 위해 헤드리스 브라우저를 사용하세요.

H3 테스트 신뢰성 보장

신뢰할 수 있는 테스트는 일관성이 있고 신뢰할 수 있는 결과를 제공합니다.

  • 원자 테스트 작성: 각 테스트를 단일 기능에 집중하면 실패를 더 쉽게 식별할 수 있습니다.
  • 명시적 대기 사용: 더 나은 복원력을 위해 고정된 시간 제한 대신 특정 조건을 기다리세요.
  • 동적 요소 처리: 변경되는 요소에는 강력한 로케이터(예: 접근성 ID)를 사용합니다.
  • 오류 처리 및 보고 구현: try…catch를 사용하고, 오류를 기록하고, 실패 시 스크린샷을 찍습니다.
  • 테스트 데이터 분리: 테스트마다 고유한 데이터를 사용하고 간섭을 피하기 위해 테스트 후에 정리합니다.
  • 대표적인 환경에서의 테스트: 다양한 관련 기기와 OS 버전에서 테스트를 실행합니다.
  • 정기적으로 검토하고 리팩토링하세요: 유지 관리를 위해 테스트 코드를 업데이트하고 개선하세요.
  • 버전 관리 : Git을 사용하면 변경 사항을 추적하고 효과적으로 협업할 수 있습니다.
  • 코딩 표준을 따르세요: 가독성을 높이려면 일관된 스타일 가이드라인을 준수하세요.

Appium과 JavaScript를 활용한 간편한 모바일 자동화 여정

와, 드디어 해냈네요! 잘하셨어요. 끝까지 함께해 주세요. 이 글을 통해 JavaScript로 Appium 환경을 설정하고, 핵심 아키텍처를 이해하고, 첫 번째 테스트를 작성하고, 고급 기능을 살펴보고, 필수적인 디버깅 기법을 익히고, 다른 강력한 도구와 통합하는 방법을 배우면서 간편한 모바일 자동화를 향한 여정을 시작하셨습니다.

테스트 모음을 구성하고, 성능을 최적화하고, 자동화 작업의 안정성을 보장하기 위한 몇 가지 주요 모범 사례를 검토할 시간도 가졌습니다.

모바일 애플리케이션은 계속해서 발전하며 디지털 라이프에서 중요한 역할을 할 것입니다. 자동화는 효율적인 테스트의 핵심입니다. Appium의 강력한 기능과 JavaScript의 유연성을 결합하면 고품질 모바일 경험을 자신 있게 제공할 수 있습니다.

 

더 자세히 알고 싶다면 Digital.ai 테스트를 통해 이러한 노력에 도움을 받을 수 있습니다. 무료 체험판에 등록하세요.

당신은 또한 좋아할 거라