이 영역을 누르면 첫 페이지로 이동
스니펫 텔러 | Snippet Teller 블로그의 첫 페이지로 이동

스니펫 텔러 | Snippet Teller

페이지 맨 위로 올라가기

스니펫 텔러 | Snippet Teller

아이템이나 서비스 리뷰, 해외생활 등 좋은 정보와 이야기들을 짧고 읽기 쉽게 요약해, 빠르게 전달해 드립니다.

Swift로 🍏 UI XCTest 기반 잘 다지는 법 #1 - 테스트 케이스

  • 2020.04.04 22:13
  • 👨🏻‍💻 QA이야기/📱 모바일자동화
반응형

❗ 처음 세우는 기둥이 중요하다

뭐든지 처음 기반을 잘 세워두면 이후가 안정적이고 편해진다. iOS/macOS 어플리케이션의 테스팅 프레임워크인 XCTest는 UI 테스팅도 가능하다. Xcode에서는 레코딩 툴도 갖춰져 있어, 자동으로 테스트 코드를 짜주는 기능도 있다. (물론 이 코드는 그리 안정적인 코드는 되지 못하지만 레퍼런스 정도로 사용하기에 좋다.)

 

 

🧱 첫 기둥이 되는 Base 테스트 케이스

XCTestCase 라이브러리를 사용하여 베이스를 잘 셋업 해놓으면, 추후 여러 테스트들을 관리하기가 수월해진다.

 

class BaseTestCase: XCTestCase {

  override func setUp() {
    super.setUp()
    
    // 시스템 알림창이 뜰 경우를 대비해 핸들링 코드를 셋업에 입력해준다.
    _ = addUIInterruptionMonitor(withDescription: "systemAlertHandlerDescription") { (alert) -> Bool in
      if (alert.buttons["Allow"].exists) {
        alert.buttons["Allow"].tap()
      } else if (alert.buttons["OK"].exists) {
        alert.buttons["OK"].tap()
      }
      return true
    }

    continueAfterFailure = false
    
    // 어플리케이션의 상태에 따라 재시작 상태를 원하는 컨디션에 맞춰 컨트롤 한다.
    if isAppLaunched {
      if shouldRestartApp {
        app.terminate()
        app.launch()
        isAppLaunched = true
      }
    } else {
      app.launch()
      isAppLaunched = true
    }
  }

  // 각 테스트 종료 시, 스크린샷을 찍어 기록을 남긴다.
  override func tearDown() {
    let screenshot = XCUIScreen.main.screenshot()
    let fullScreenshotAttachment = XCTAttachment(screenshot: screenshot, quality: .low)
    fullScreenshotAttachment.lifetime = .deleteOnSuccess
    add(fullScreenshotAttachment)
  }

}
extension XCTestCase {

  private struct State {
    static var appLaunched = false
    static var restartApp = false
  }

  var isAppLaunched: Bool {
    get { return State.appLaunched }
    set(launched) { State.appLaunched = launched }
  }

  var shouldRestartApp: Bool {
    get { return State.restartApp }
    set(restart) { State.restartApp = restart }
  }

}

 

위와 같이 설정을 해주면, 테스트 사이 마다 어플리케이션 재시작 혹은 원하는 액션을 넣을 수도 있다. 또, 스크린샷을 포함해 테스트 실패 시 디버깅이 쉽도록 설정된다.

 

추가적으로, 테스트 Pre-action에 시뮬레이터 클린업 및 재시작을 설정해 놓는 것 또한 추천한다:

// iOS 시뮬레이터를 모두 종료하고 리셋한다.

killall "Simulator" 2> /dev/null; xcrun simctl erase all
killall -9 "Simulator"
반응형
저작자표시 비영리 변경금지 (새창열림)

'👨🏻‍💻 QA이야기 > 📱 모바일자동화' 카테고리의 다른 글

Kotlin으로 ☕ Espresso UI 테스트 기반 잘 다지는 법 #1 - 테스트 케이스  (0) 2020.04.12
Swift로 🍏 UI XCTest 기반 잘 다지는 법 #2 - Action  (0) 2020.04.04
🥒 Cucumber 이해하고 잘 쓰는 방법  (0) 2020.04.03
🗳️ QA의 모바일 자동화를 위한 개발환경  (0) 2020.04.01
Appium + Kotlin = 🚀  (2) 2020.03.31

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • Kotlin으로 ☕ Espresso UI 테스트 기반 잘 다지는 법 #1 - 테스트 케이스

    Kotlin으로 ☕ Espresso UI 테스트 기반 잘 다지는 법 #1 - 테스트 케이스

    2020.04.12
  • Swift로 🍏 UI XCTest 기반 잘 다지는 법 #2 - Action

    Swift로 🍏 UI XCTest 기반 잘 다지는 법 #2 - Action

    2020.04.04
  • 🥒 Cucumber 이해하고 잘 쓰는 방법

    🥒 Cucumber 이해하고 잘 쓰는 방법

    2020.04.03
  • 🗳️ QA의 모바일 자동화를 위한 개발환경

    🗳️ QA의 모바일 자동화를 위한 개발환경

    2020.04.01
다른 글 더 둘러보기

정보

스니펫 텔러 | Snippet Teller 블로그의 첫 페이지로 이동

스니펫 텔러 | Snippet Teller

  • 스니펫 텔러 | Snippet Teller의 첫 페이지로 이동

검색

메뉴

    카테고리

    • 전체보기 (467)
      • 📋 일상이야기 (20)
      • 🇩🇪 베를린이야기 (42)
      • 🇰🇷 한국이야기 (3)
      • 🏅 리뷰이야기 (79)
        • 해외직구 (6)
        • 온라인서비스 (20)
        • 유럽생활 (15)
        • 그 외 (38)
      • 👨🏻‍💻 QA이야기 (19)
        • ⚙️ Quality Engineering (12)
        • 📱 모바일자동화 (7)
      • 🎗 생각하는 글 (49)
      • 🎮 게임정보 (253)
    반응형

    공지사항

    • 공지 - 블로그 공지사항

    방문자

    • 전체 방문자
    • 오늘
    • 어제

    티스토리

    • 티스토리 홈
    • 이 블로그 관리하기
    • 글쓰기

    정보

    무워 | hsoochun의 스니펫 텔러 | Snippet Teller

    스니펫 텔러 | Snippet Teller

    무워 | hsoochun

    블로그 구독하기

    • 구독하기
    • RSS 피드
    Powered by Tistory / Kakao. © 무워 | hsoochun. Designed by Fraccino.

    티스토리툴바