ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 지속적 통합에서의 테스트 자동화
    테스팅 관련/자동화 2020. 9. 21. 22:13

     

     

    이어지는 시리즈

     

    지속적 통합(Continuous Integration) 

    개발팀이 초기자주 코드를 메인 브랜치 또는 Repository통합하는 방식
    충돌 조기 식별/해결, 개발 주기 시간 절약, 버그/회귀 수정 시간 절약, 개발 중인 기능 이해↑

     

    자동화 테스트(Automated Testing) 셋업

    자동화(된) 테스트 ≠ 테스트 자동화

    '자동화 테스트'를 실행하는 테스트 프로세스 '자동화' = 테스트 자동화

    Main Repository의 모든 변경 사항에 대해 테스트를 자동으로 실행할 수 있도록

    우선적으로 '자동화 테스트' 필요!

    repo의 (메인 브랜치뿐만 아닌) 모든 브랜치에 테스트 실행 가능

    단위 테스트(Unit Test)는 범위가 좁기 때문에 구현이 빠르고 저렴

    UI 테스트는 브라우저/모바일 동작을 에뮬레이션하기 위해 서비스/환경을 시작해야하므로, 구현이 복잡하고 실행속도 느림

     

    복잡한 UI 테스트의 수를 제한하고, 단위 테스트에 의존 → 빠른 빌드 수행, 개발자로부터 피드백을 빨리 받을 수 있음

     


    자동으로 테스트를 실행하기 위해서는,

    Repository를 모니터링하고 코드베이스에 대한 새로운 푸시를 수신할 수 있는 서비스 필요

     

    On-Premise & Cloud 솔루션

    서버를 선택하기 위해 고려해야할 사항들

    - 어디에서 코드가 호스팅되는지?

    - 어떤 OS와 리소스가 필요한지?

    - 얼마나 많은 리소스가 필요한지?

    - 몇 명의 개발자가 있는지?

     

    예1. Bamboo 또는 Jenkins와 같은 별도의 CI 서버 설치

    예2. Bitbucket Cloud에서 호스팅되는 경우 Repository의 파이프라인 기능 사용

     

    +) 테스트 커버리지 도구와 결합

    80% 이상 목표 but, [범위↑ ≠ 좋은 테스트 스위트]

    +) 리팩토링은 테스트 추가할 수 있는 기회

    변경에 영향을 받는 기능에 대한 승인 테스트(Acceptance) 작성 → 안전망 제공

     


    지속적 통합 테스트 5단계

    1. 코드베이스의 중요한 부분에 대한 테스트 작성

    2. Main Repository로 푸시할 때마다 해당 테스트를 자동으로 실행하는 CI 서비스 이용

    3. 팀이 변경 사항을 매일 통합하는지 확인

    4. 빌드가 손상되는 즉시 수정

    5. 구현하는 모든 새로운 스토리에 대한 테스트 작성

     


    예제. Bitbucket Pipelines 를 이용한 테스트 자동화

    1. 어플리케이션 & 자동화 테스트 생성
    2. 프로젝트에 Bitbucket Pipelines 활성화 하기 (테스트 환경 구축)
      • 프로젝트 root 폴더 (또는 Pipelines 항목)에 bitbucket-pipeline.yml 파일 생성 (파일 존재하는 경우, 수정) 
        • 테스팅 환경이 pre-configured된 Docker 컨테이너 사용
          • 옵션 1: dockerhub에서 제공하는 '자동화 툴 Docker 이미지' 사용 (예. image: selenium/node-chrome)
          • 옵션 2: 준비된 Docker 이미지 사용 (+ Docker 이미지에 자동화 툴 설치)
            • 프로젝트의 package.json 파일에 test script 추가
        • 파이프라인 구성 - 프로젝트 dependencies(프로젝트를 생성/실행하는데 필요한 libraries) 설치 - 테스트 실행
          • Pipelines = defaultbranches 속성으로 이루어져 있으며, 각 속성에는 파이프라인 과정에서 실행되는 step이포함 (step 안의 모든 script 실행  → 오류 생길 시, 파이프라인 과정 중단)
        • Repository 페이지 > Pipelines 메뉴 > bitbucket-pipeline.yml 선택 > Enable 클릭
    3. Bitbucket Pipeline CI 빌드 트리거하기
      • CI 환경이 설정되면, 커밋(commit)을 푸시 or 병합(merge) or 풀 리퀘스트(pr)를 생성하였을 때 빌드가 트리거됨
      • 파이프라인 상태 페이지에서 빌드 성공/실패를 확인할 수 있음
    4. 빌드가 트리거 될 때마다 자동화 테스트 실행

    bitbucket-pipeline.yml 예제. (자바스크립트)

    # 빌드 환경에 맞는 docker 이미지를 명시 (Docker, Java(Gradle, Maven), PHP, Python, C++, Go, Ruby.....)
    image: node 10.15.3
    # 파이프라인 구성
    pipelines:
       # 모든 pull request, 병합(merge), commit에 대해 실행

        default:
           - step:
               script:
                  # 프로젝트 dependencies 설치

                  - npm install
                  # 테스트 실행

                  - npm test
               services:
                  - mysql

    definitions:
        services:
               mysql:
                    image: mysql:5.7
                    variables:
                         MYSQL_DATABASE: 'pipelines'
                         MYSQL_ROOT_PASSWORD: 'let_me_in'

    → pull request / 병합(merge) / commit 실행될 때마다 자바스크립트 환경이 빌드되고, 테스트가 실행됨

     

     

Designed by Tistory.