Close

Bitbucket Pipelines를 사용한 통합 테스트 자습서

Sten Pittet 얼굴 사진
Sten Pittet

기고 작가

파이프라인의 개별 Docker 컨테이너에서 여러 서비스를 실행하여 Bitbucket Pipelines를 통해 통합 테스트를 실행하는 방법을 알아보세요.

테스트는 지속적 통합 및 지속적 제공의 중요한 부분입니다. 지속적 배포를 실행하는 경우 변경 사항이 고객에게 릴리스되기 전에 버그에 대한 마지막 방어선이 됩니다. 개별 메서드와 클래스의 유효성을 검사하는 단위 테스트는 문제를 예방하는 데 좋은 시작 단계이지만, 애플리케이션에서 사용하는 여러 모듈(애플리케이션 서버, 데이터베이스, 캐시)이 서로 올바르게 상호 작용하는지 확인하는 통합 테스트도 실행해야 합니다. 이 자습서에서는 파이프라인의 개별 Docker 컨테이너에서 여러 서비스를 실행하여 Bitbucket Pipelines를 통해 통합 테스트를 실행하는 방법을 알아보겠습니다.

시간

30분

대상 그룹

지속적 통합 및/또는 Bitbucket Pipelines를 처음 사용하는 사용자

필수 조건

  • Bitbucket 계정
  • 애플리케이션 실행을 위한 Node v4.6 이상

  • 로컬 컴퓨터에서 MongoDB를 실행하기 위한 Docker 커뮤니티 에디션 v17.03 이상

  • bash 명령을 실행하기 위한 터미널
  • 리포지토리를 관리하고 Bitbucket Cloud로 다시 푸시하기 위한 Git

1단계: 로컬에서 샘플 애플리케이션 실행

여기서는 홈페이지에 메시지를 표시하고 데이터베이스에 대한 방문을 로그하는 기본 Node.js 애플리케이션을 사용하겠습니다. Bitbucket Pipelines 구성에 집중하려면 터미널에서 애플리케이션을 복제하면 됩니다.

git clone git@bitbucket.org:spittet/bitbucket-pipelines-services-tutorial.git

이제 로컬 리포지토리로 이동하여 npm install 을 실행하여 애플리케이션에 필요한 종속성을 설치합니다.

cd bitbucket-pipelines-services-tutorial
npm install

애플리케이션을 실행하기 전에 새 MongoDB 인스턴스를 시작해야 합니다. Docker를 사용하면 터미널에서 손쉽게 할 수 있는 작업입니다.

docker run --name mongodb -d -p 27017:27017 mongo

그런 다음 애플리케이션을 시작하고 http://localhost:3000으로 이동하여 실제로 작동하는 것을 확인하세요.

npm start

http://localhost:3000/visits으로 이동하여 방문이 데이터베이스에 제대로 로그되었는지 확인할 수 있습니다.

마지막으로 npm test 명령을 통해 로컬에서 테스트가 성공적으로 완료되었는지 확인하겠습니다. 명령을 실행하면 두 가지 테스트가 완료될 것입니다.

npm test

샘플 애플리케이션은 서로 다른 두 개의 테스트를 실행합니다.

  • 한 테스트는 애플리케이션이 홈페이지에 Hello World를 표시하는지 확인합니다.
  • 다른 테스트는 누군가 홈페이지에 액세스할 때마다 새 방문이 데이터베이스에 로그되는지 확인합니다.

첫 번째 테스트는 데이터베이스가 중단된 경우에도 통과하지만 두 번째 테스트는 웹 애플리케이션이 데이터베이스 서버와 제대로 상호 작용하는지 확인하는 통합 테스트입니다. 애플리케이션의 비즈니스 요구 사항 중 일부를 확인하기 때문에 기능 테스트라고도 할 수 있습니다. 가이드에서 다양한 유형의 테스트에 대해 자세히 알아보세요.

이제 Bitbucket Pipelines를 사용하여 애플리케이션 테스트를 자동화하고 데이터베이스에서 성공적으로 작동하도록 구성하는 방법을 살펴보겠습니다.

2단계: Bitbucket Pipelines를 사용하여 자동으로 테스트 실행

먼저 Bitbucket 계정에 새 리포지토리를 만들고 원본의 원격 URL이 Bitbucket 리포지토리를 가리키도록 업데이트합니다.

git remote add bitbucket git@bitbucket.org:<account name>/<repository name>.git
git branch -m mainline
git push -u bitbucket mainline

리포지토리의 Pipelines 섹션으로 이동하여 Bitbucket Pipelines를 사용 설정합니다.

다음 화면에서 기본 Javascript 템플릿을 사용할 수 있습니다. 종속성을 설치하고 테스트 스위트를 실행하는 데 필요한 npm install 및 npm test 명령이 이미 있습니다.

bitbucket-pipelines.yml 파일은 다음과 비슷할 것입니다.

image: node:16

pipelines:
  default:
    - parallel:
        - step:
            name: Build and Test
            caches:
              - node
            script:
              - npm install
              - npm test

데이터베이스 서비스가 누락되었지만 나중에 추가할 것입니다.

파일을 커밋하면 리포지토리의 파이프라인 섹션으로 리디렉션되며 진행 중인 첫 번째 파이프라인을 확인할 수 있습니다. 데이터베이스를 연결하지 않고는 두 번째 테스트를 적절하게 실행할 수 없기 때문에 파이프라인이 실패합니다. 파이프라인을 클릭하면 아래와 비슷한 화면이 나타나며 1개의 테스트가 통과하고 1개의 테스트가 실패했다고 표시됩니다.

다음 섹션에서는 파이프라인 구성에 새 서비스 정의를 추가하여 이 문제를 해결하겠습니다.

3단계: 데이터베이스에 대한 서비스 정의 추가

Bitbucket Pipelines를 사용하면 파이프라인에서 실행되는 기본 애플리케이션에 더해 최대 3개의 추가 Docker 컨테이너를 실행할 수 있습니다. 이러한 컨테이너를 사용하여 데이터 저장소, 분석 도구 또는 애플리케이션이 파이프라인을 완료하는 데 필요할 수 있는 타사 서비스와 같은 서비스를 실행할 수 있습니다. 이 경우에서는 MongoDB를 실행하는 데 별도의 서비스 컨테이너를 사용합니다.

리포지토리의 소스 섹션으로 이동하여 파일 목록을 확인합니다.

bitbucket-pipelines.yml 구성 파일을 클릭하여 액세스합니다. 오른쪽 상단 모서리에 있는 편집 버튼을 사용하면 파일을 편집하고 브라우저에서 바로 커밋할 수 있습니다.

구성 파일의 맨 아래에는 데이터베이스에 대한 서비스 정의를 추가해야 합니다.

bitbucket-pipelines.yml

image: node:16

pipelines:
  default:
    - step:
        script:
          - npm install
          - npm test

definitions:
  services:
    database:
      image: mongo

MongoDB의 경우 이미지 정의에 추가 설정이 필요하지 않지만 데이터 저장소 및 서비스에 대한 일부 Docker 이미지의 경우 몇 가지 환경 변수를 지정해야 할 수 있습니다. 데이터베이스 예시의 목록은 Bitbucket Pipelines 설명서에서 찾을 수 있습니다.

파일을 커밋하기 전에, 테스트를 실행하는 단계에 새 서비스를 추가해야 합니다. 최종 파이프라인 구성은 아래 코드와 비슷할 것입니다.

bitbucket-pipelines.yml

image: node:16

pipelines:
  default:
    - step:
        script:
          - npm install
          - npm test
        services:
          - database

definitions:
  services:
    database:
      image: mongo

파일을 커밋한 후 파이프라인 섹션으로 이동하여 진행 중인 파이프라인을 확인합니다. 보통 성공적으로 완료됩니다.

로그 패널에서 데이터베이스 탭을 클릭하여 MongoDB 컨테이너의 로그를 볼 수 있습니다.

여기까지입니다! 파이프라인에 서비스를 추가하여 통합 테스트를 실행하는 방법을 알아보았습니다. 서비스를 사용하는 방법에 대해 자세히 알아보려면 설명서를 읽어보세요.

Sten Pittet
Sten Pittet

I've been in the software business for 10 years now in various roles from development to product management. After spending the last 5 years in Atlassian working on Developer Tools I now write about building software. Outside of work I'm sharpening my fathering skills with a wonderful toddler.


이 문서 공유

여러분께 도움을 드릴 자료를 추천합니다.

이러한 리소스에 책갈피를 지정하여 DevOps 팀의 유형에 대해 알아보거나 Atlassian에서 DevOps에 대한 지속적인 업데이트를 확인하세요.

DevOps 일러스트레이션

DevOps 커뮤니티

DevOps 일러스트레이션

시뮬레이션 워크숍

맵 일러스트레이션

무료로 사용해보기

DevOps 뉴스레터 신청

Thank you for signing up