ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Github Action으로 django test 하기(CI)
    Django testing 2021. 6. 4. 12:37

    github 으로 들어간 후, 본인의 프로젝트로 들어가서 아래 이미지처럼 'Actions'를 선택합니다.

     

     

     

    들어간 후, 처음엔 Django 에 관한 부분이 없지만

    Continuous integration workflows 부분 중

    'More continuos integration workflows' << 버튼을 클릭한다.

    클릭후, 아래로 내려가서 찾아보면

    Django를 찾을수 있고, 해당 영역의 'Set up this workflow'를 선택한다.(왠지 반갑다ㅋ)

     

     

    이후 다음과 같은 생소한 화면이 나오게 된다.

     

     

    • name은 Github Action의 이름
    • on 은 어떤 환경일 때 동작할지 (push or pull request의 브랜치)
    • jobs 는 진행할 작업들

     

    아래 처럼 수정하면 되며,

    여기선, push 항목 중 branches 에서 master, develop 을 지정해주며,

    python-version 을 3.6,

    Run Test 영역에서 실행되는 부분을

    기존 django 기본 테스트에서 pytest 로 변경한다.

    자세히 확인하기 위해서는 pytest -v 로 설정한다.

    name: Django testing CI
    
    on:
      push:
        branches: [ master, develop ]
      pull_request:
        branches: [ master ]
    
    jobs:
      build:
    
        runs-on: ubuntu-latest
        strategy:
          max-parallel: 4
          matrix:
            python-version: [3.6]
    
        steps:
        - uses: actions/checkout@v2
        - name: Set up Python ${{ matrix.python-version }}
          uses: actions/setup-python@v2
          with:
            python-version: ${{ matrix.python-version }}
        - name: Install Dependencies
          run: |
            python -m pip install --upgrade pip
            pip install -r requirements.txt
        - name: Run Tests
          run: |
            pytest

    수정 후 'start commit' 를 누른 후 커밋 메시지 작성을 하게 되면

    다음처럼 .github / workflow / 'django_testing yml' 파일이 생긴것을 확인 할 수 있습니다.

     

    이후, actions로 들어가서 확인해보면, 다음과 같이 에러가 난 것을 볼 수 있다.

    (역시 한번에 될리가 없다)

     

    해당 건을 클릭해서 자세히 보면,

    또 해당 job을 클릭하면,

     

    대략,

    >       conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
    E       psycopg2.OperationalError: could not connect to server: Connection refused
    E        Is the server running on host "localhost" (::1) and accepting
    E        TCP/IP connections on port 5432?
    E       could not connect to server: Connection refused
    E        Is the server running on host "localhost" (127.0.0.1) and accepting
    E        TCP/IP connections on port 5432?

     

    이 부분이 주요 원인으로 생각되며, postgresql에 Connection refused 가 발생한 것으로 추정된다.

     

    테스트를 위해 다음과 같이 settings의 기존 databases 설정을 다음과 같이

    sqlite3 로 변경한다.

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }

    해당 소스를 commit 후 push 해보면

    보시는 것처럼 새로운 커밋은 주황색으로 진행 중으로 나오게 된다.

     

    시간이 지나서 정상적으로 django_testing.yml 에 있는 설정대로 진행이 되서

    테스트도 하게되면 다음과 같이 성공했다는 표시가 나오게 된다.

     

    해당 task를 눌러, 상세화면을 보면 다음과 같이, push 이후 성공적으로 테스트한 내역도 확인할 수 있다.

    여기서는 임시로 push 로 한 경우에 동작하도록 하였지만,

    일반적으로 pull request 에서 많이 쓰는것으로 알고 있으며, 

    만드는 상황에 따라 branch, push, pull request 등에 맞게 설정해서 사용하면 된다.

     

     

     

    * 참고:

    github actions 에서 실행된 task가 실패가 되는 경우, 기존 github 설정된 메일로

    다음과 같이 실패된 사항에 대해 메일을 보내준다.(성공은 보내지 않음)

     

    참조 사이트

    'Django testing' 카테고리의 다른 글

    Django 기본 view 테스트  (0) 2021.06.02
    django 테스트DB 없이 유닛 테스트하기  (0) 2021.05.31
    파이썬 TestCase, unit test 사용하기  (1) 2021.05.31
    Testing 의 시작과 종류  (0) 2021.05.31
Designed by Tistory.