ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [테스트자동화] Github 과 Travis CI 연동하기
    카테고리 없음 2020. 2. 18. 21:45

    안녕하세요! 운동하는 개발자 JAY입니다.

    오늘은 테스트 자동화, CI 그리고 TravisCI라는 서비스에 대해서 말씀드리려고 합니다.

     

    1. CI (Continuous Integration) 란?


    지속적 통합(continuous integration, CI)은 지속적으로 퀄리티 컨트롤을 적용하는 프로세스를 실행하는 것이다. - 작은 단위의 작업, 빈번한 적용. 지속적인 통합은 모든 개발을 완료한 뒤에 퀄리티 컨트롤을 적용하는 고전적인 방법을 대체하는 방법으로서 소프트웨어의 질적 향상과 소프트웨어를 배포하는데 걸리는 시간을 줄이는데 초점이 맞추어져 있다. 대표적인 CI 툴에는 젠킨스(Jenkins)가 있다. (출처: 위키백과)

     

    간단히 말하자면, 팀 내에서 작업한 결과물들을 정기적(지속적)으로 통합하는 것을 말합니다. CI를 하지 않는다면, 여러 개발자들이 따로 작업한 것들을 마지막에 합치면서 버그가 생기고 여러 문제들이 생길 수 있습니다. CI는 여러 개발자들의 작업을 주기적으로 통합하여 컴파일, 테스트, 빌드 등을 함으로써 수정된 소스코드에 대한 결함이 있는지를 지속적으로 검증합니다.

     

    개발인원이 많아지고, 협업을 해야하는 과정에서 필요한 프로세스 입니다.

     

    2. What is Travis CI? 


    CI 서비스 중 하나로, 깃헙에 호스팅 되는 소프트웨어 프로젝트의 빌드, 테스트를 위해 사용됩니다.

    (오픈소스 무료, 비공개는 유료)

    이번 글에서 제가 설명드릴 Travis CI를 이용한 프로세스는 아래와 같은 과정입니다.

     

    코드 수정 -> PR -> 테스트 코드 실행, 코드 검증 (Travis CI) -> Approve -> Merge

     

    3. Travis CI 사용하기


    1) TraviCI <-> Github 연동

    Travis CI 를 사용하는건 생각보다 간단합니다. TravisCI 에 접속하여 깃헙 인증하고 사용할 Repository를 아래 사진처럼 Active 시키면 됩니다.

    sample Repository 연동을 Active 시킨 모습

     

    2) .travis.yml 파일 프로젝트에 추가하기

    .travis.yml 파일은 Travis CI를 실행시키고 어떤 작업을 할지에 정의(?)를 적어논 파일입니다. 

    저는 django, python 환경에서 test_sample.py라는 파일을 pytest로 실행하도록 하겠습니다.

    파일의 위치는 프로젝트 최상위 경로에 놓았습니다.

    .travis.yml  파일

    3) Test 로직 작성

    일부러 실패나도록 만든 tet case

    실제로 Travis CI테스트 자동화를 하는지 예제를 만들어 보겠습니다. test_sample.py 에 테스트할 코드를 만든 후, develop 브랜치에서 Master 브랜치로 PR을 날려보겠습니다.

     

    PR -> 테스트 빌드 -> 빌드 실패(Merge 불가)

    위 사진들을 순서대로 보면, PR 후 Travis CI에서 해당 PR에 대한 검증을 합니다. (코드리뷰 리뷰어가 approve 하듯이요)

    그리고 Travis CI 웹페이지에 보면 현재 실행되고 있는 작업을 cmd 화면으로 실시간 확인이 가능합니다.(.travis.yml에 있는 작업을 그대로 실행)

    두번째 이미지를 보면 pytest 에러를 확인할 수 있습니다. 그리고 Github PR에 가면 TraviCI build failed 가 나옵니다.

    결과적으로 테스트에 실패하여 PR을 Merge 할 수 없습니다.

     

     

    4) 테스트 케이스 수정 후, Commit

    테스트 성공 코드

    코드를 수정후, Commit->Push(원격) 를 합니다.

    이미 PR이 있기 때문에, 추가된 Commit에 대해 Travis CI가 반응하여 다시 테스트를 시작합니다.

    이번에는 테스트과 통과하여 Travis CI build 성공을 했습니다. 여기에 더불어 Merge 까지 가능한 상태가 되었습니다.

     

    develop -> Master로 Merge를 하게되면 Master 브랜치에 대해서도 동일하게 TravisCI에서 정해진 테스트 작업을 실행합니다. PR 브랜치Merge 브랜치 둘 다 실행하는 거죠 ㅎㅎ (이건 좀 신기하고 좋다는 생각을 했습니다.)

     

     

    4. 마치며


    간단한 예제로 TravisCI를 사용한 테스트 자동화에 대해 알아봤는데요. 이런 Tool을 알고 있고, 사용하는 거 자체에서 의미있는 개발 프로세스를 구축 할 수 있을 것 같아요. 회사에서 아직 사용을 안하고 있다면, 개인 프로젝트서 사용해보고 회사에 건의해보는 것도 좋을 것 같습니다. but 대부분의 회사는 젠킨스나 이런 툴들을 이미 사용하고 있겠죠? ㅎㅎ

    오늘도 그럼 즐거운 코딩 하시길 바랍니다!

     

     

    댓글

운동하는 개발자 JAY-JI