Django testing

Github Action으로 django test 하기(CI)

wangkisa 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 설정된 메일로

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

 

참조 사이트