1. 자동화 테스트의 의미
    1. 자동화 테스트란?
      • 테스트 스크립트를 작성하거나 자동화 테스트 도구를 활용하여 자동으로 테스트하는 방법을 의미한다.
    2. 자동화 테스트 도입 목적
      • 일반적으로 투입비용과 시간 대비 높은 품질을 확보하기 위해 도입한다.
      • 테스트 프로세스는 반복적이고, 점진적이며, 지속적인 테스트를 수행하는 형태로 변형되어왔다.
      • 테스트 속도는 향상되어야 하고 높은 품질을 유지하며 테스트 효율성을 증가시키기 위해 도입한다.
    3. 자동화 도입 목적과 배경, 이유, 자동화로 해결하고자 하는 문제와 현재 상황을 구체적으로 살펴봐야 한다.
    4. 이후 배경을 고려하여 세부적인 꼐획과 문제를 해결할 구체적 방법을 구상해야, 유용하고 실용성있는 자동화를 설계할 수 있다.
  2. 자동화 테스트 계획
    1. 주의할 점
      • 프로젝트 초기에 계획을 세우는 것이 좋다.
      • 자동화 범위가 확대될수록 유지보수는 힘들어지고, 설계 자체가 경직되며, 전체를 완성하고 안정화하는 데까지 비용과 시간이 많이 소요되는 등, 투자 대비 유용성이 떨어진다.
      • 시스템이 자주 변경되고 업그레이드될수록 자동화가 물거품이 될 수 있다.
      • 자동화는 빠르게 만들고 수행해야 한다.
      • 즉, 단순하게 만들고 구조는 작아야 하며, 범위는 명확하고 각 구조는 목적이 있어야 한다.
    2. 자동화 테스트 계획
      • 테스트 코드 작성을 위한 환경을 구축한다.
      • 자동화에 의존성을 가진 시스템 때문에 테스트가 어려울 경우, mock, dummy, fake객체를 만들어 사용한다.
      • 오류 발생 가능성이 높은 주요 기능 위주로 자동화 프레임워크를 분리하여 설계한다.
      • 자동화하기 좋은 범위를 확보한다.
        • 수동으로 테스트하기에 반복적인 일이 많은 범위
        • 사람보다 정확한 기계의 힘이 필요한 범위
      • 테스트 결과와 빌드 품질에 대한 정보를 실시간으로 공유한다.
        • 정보를 보여줄 수 있는 웹 페이지를 설계하거나 CI/CD 도구 또는 슬랙 등의 메신저를 활용한다.
  3. 실무에 맞춘 자동화 목표
    1. 안정성과 신뢰성을 확보한다.
      • 테스트 코드와 자동화 테스트 결과에 대한 신뢰성을 보장할 수 있도록 자동화를 설계한다.
      • 결과를 검증할 수 있도록 코드를 작성하고, 거짓 오류로 로직을 검사하여 신뢰성을 확보한다.
      • 자동화 프레임워크는 주요 기능별로 분리하여, 독립적 테스트와 하고 용이한 유지보수가 가능하도록 한다.
      • 수동 테스트를 줄이고 반복 테스트를 자동화로 대체할 수 있도록 한다.
    2. 용이한 유지보수를 목표로 한다.
      • 이미지 기반 자동화는 코드기반에 비해 유지보수 비용이 더 높다.
      • 불필요한 유지보수비용을 줄이고 하나의 코드로만 테스트 가능하도록 Element를 사용한다.
      • 테스트 코드는 수정 및 유지보수가 쉽도록 단순하게 만들고, 주석을 작성해 쉽게 읽을 수 있도록 한다.
  4. 자동화 테스트 범위
    1. 테스트 범위 선정하기
      • 전체 기능을 다 자동화하게 되면, 유지보수를 힘들게 하고, 자동화의 효율성과 유용성을 떨어트린다.
      • 테스트 범위를 제한하면, 발견하는 버그수가 적고 품질검증의 신뢰도가 떨어질 수 있다.
      • 자동회 테스트의 정체성을 전체 테스트 범위의 보조 역할에 초점을 두면, 유용한 범위를 선정할 수 있다.
      • 반복적인 테스트가 많은 부분을 자동화하여 테스터가 테스트를 할 수 있는 시간을 확보하여 품질을 높인다.
    2. 기능 반복 테스트 범위
      • 스모크 테스트 : 기본기능을 수행할 수 있는지 빠르게 확인하는 테스트
      • BVT 테스트 : 빌드 검증 테스트로, 새 소프트웨어 빌드의 안정성을 평가하기 위한 테스트
      • BAT 테스트 : 빌드 수용 테스트로, 사용자가 수용가능한 수준의 빌드인지 파악하는 초기 테스트
      • 회귀 테스트 : 코드 수정, 기능 추가 등이 기존 기능에 영향을 주지 않았는지 확인하는 테스트
      • 호환성 테스트 : 소프트웨어가 다양한 환경에서 제대로 동작하는 지 확인하는 테스트
    3. 도구를 활용한 기술 검증에서의 반복 테스트 범위
      • 클라이언트 테스트 : 테스트 시나리오를 디바이스별로 반복하는 테스트
      • API 테스트 : UI에 영향을 받지 않아 반복적으로 재사용 가능하고, BE에서 반복 회귀 테스트가 가능하다.
      • 서버 부하 테스트 : 트래픽 부하가 필요할 때 자동화를 활용한다.
  5. 자동화 테스트 도구 선정
    1. 자동화 테스트 도구 선정 고려할 점
      • 테스트 대상인 플랫폼의 종류
      • 이미지 기반/코드 기반
      • 테스트 코드 작성 담당자가 사용할 수 있는 프로그래밍 언어
    2. 대표적으로 많이 사용되는 자동화 테스트 도구
      테스트 도구 사용 언어 지원 플랫폼
      Appium Java, Python, C#, JavaScript, Ruby, PHP 모바일: iOS, Android
      데스크탑: Windows, macOS
      Selenium Java, Python, C#, JavaScript, Ruby, PHP  웹 : 모든 주요 브라우저 (Chrome, Firefox, Safari, Edge 등)
      Katalon Groovy (Java 기반)  웹: 모든 주요 브라우저
      모바일: iOS, Android
      API: REST, SOAP
      Ranorex C#, VB.NET 데스크탑: Windows 
      웹: 모든 주요 브라우저
      모바일: iOS, Android
  6. 자동화 프로세스
    1. 수행 단계 절차화하기
      • 프로젝트 개발을 위한 설계가 진행되는 동안 테스터는 자동화가 가능한지 검토 후 일정을 계획하고 범위를 선정하여 테스트 케이스를 설계한다.
      • 개발의 구현 작업이 진행되는 기간에 테스터도 자동화 테스트를 위한 테스트 코드를 작성하고, 조직 내부를 통해 코드 검증과 수행 동작을 확인한다.
      • 개발이 완료되면, CI/CD에서 PR 마다 테스트 수행 가능하도록 자동화를 적용하고 결과를 공유한다.
      • 테스트 조직으로 개발 결과물이 인수되고 품질 검증 기간이 시작되면, 자동화를 반영하여 테스트 수행한다.
    2. 자동화 프로세스 각 수행 단계
      • 프로젝트 선정
        • 자동화가 가능한 기능을 고려하고 자동화 가능 여부를 검토하여 적용할 프로젝트를 선정한다.
        • 선정 후 자동화 추진을 위한 일정과 인원, 테스트범위, 도구 등 구체적인 계획을 수립한다.
      • 자동화 테스트케이스 작성 
        • 테스트 케이스 작성 전, 자동화가 가능한 범위를 선정하고 시나리오를 설계한다.
        • 선정된 범위에 대한 자동화용 테스트케이스를 작성한다.
        • 테스트 코드의 기반을 마련하고, 선정된 테스트 범위가 자동화에 적합한지 확인할 수 있다.
        • 자동화 기능 누락 방지 및 계획과 실제 구현 범위의 차이를 비교할 수 있다.
        • 유지보수, 담당자 변경 등의 경우를 대비해 테스트 코드 결과를 기록하고 관리할 수 있다.
        • 구현가능 범위를 시각화하여 현실적인 일정 산정 및 자동화의 효과성 확인에도 사용된다.
      • 자동화 목표 커버리지 (%) 산정
        • 자동화 테스트케이스에서 실제 자동화로 구현 가능한 영역에 대한 목표를 산정한다.
        • 현실성 있는 일정 안에 실제 작동 가능한 자동화 결과물을 얻을 수 있게 한다.
        • 인원별, 상황별로 발생하는 문제를 사전에 차단할 수 있다.
        • 적절한 목표 산정은 자동화 유효성과 유지 보수성을 결정한다.
      • 자동화 테스트 코드 구현 및 실행과 검증
        • 테스트 케이스 기반 자동화 도구에 맞는 코드를 작성하고 수시로 동작을 확인한다.
        • 코드 작성이 완료되면 테스트 조직 내부에서 코드에 대한 자체 검증을 진행한다. (1차 검증)
        • 개발자 또는 개발 조직을 통해 코드 리뷰를 요청한다. ( 2차 검증)
        • 자동화를 배포하여 실무에 적용한다.
      • 적용 및 활용
        • 개발 구현 과정에서는 개발 PR 마다 자동화 테스트가 수행 가능하도록 적용한다.
        • 테스트 기간에는 회귀/호환성/클라이언트 테스트 등 반복적인 테스트 활동에 적용한다.
        • 테스트 수행 결과는 빠른 대응을 위해 HTML 또는 CI/CD 또는 사내 메신저로 공유한다.
  7. 도구 활용 및 테스트 코드 작성 예시
    1. cypress studio
      • 자바 스크립트를 기반으로 웹 페이지의 End to End 를 지원하는 테스트 도구 중 하나이다.
      • 테스트 중인 애플리케이션에 대한 유저의 마우스, 키보드 등의 액션을 기록하여  코드를 자동으로 생성한다.
      • 구성요소 테스트는 사용할 수 없고 여러 도메인에 걸친 테스트는 불가능하다는 한계가 있다.
    2. katalon studio
      • selenium과 appium의 기능을 연동하여 사용할 수 있는 자동화 테스트 도구이다.
      • desktop, mobile, web, API, application 등 다양한 플랫폼에서 생성된 소프트웨어를 사용할 수 있다.
      • AI로 테스트 스크립트를 자동으로 생성하는 기능을 제공한다.
      • 대부분의 플랫폼에서 사용 가능하지만 PC애플리케이션은 테스트할 수 없다.
    3. 레코더 패널
      • Chrome에서 제공하는 도구로, 웹 페이지에서 유저의 마우스, 키보드 등의 액션과 페이지 동작을 재생하거나 JSON 파일로 기록한 내용을 저장하여 사용할 수 있다.
      • 크롬 브라우저에 내장되어 있어, 컨텍스트 전환이나 추가 외부 도구 없이 사용할 수 있다.
      • 웹 페이지에서만 사용이 가능하다는 한계가 있다.
      • Cypress와 다르게 DevTools 에 추가하면, 웹을 병렬로 테스트 자동화가 가능하다.