Github Action을 활용하여 특정한 조건에 의해 실행되는 Workflow를 정의하고, 실행해보는 실습을 진행합니다.
해당 실습 자료는 5. Git Tag & Github Release 생성하기 에서 이어집니다.
Pytest Workflow 추가 Issue 생성

작업 브랜치 생성
git branch feat-5/pytest-workflow 명령어로 작업 브랜치를 생성합니다.
git checkout feat-5/pytest-workflow 명령어로 브랜치를 변경합니다.

Python 라이브러리 설정
pytest는 기본 모듈이 아니기 때문에 설치가 필요합니다. pip install pytest 명령어로 설치합니다.

Github Action에서 환경 설정을 위해 프로젝트 가장 바깥 경로에 requirements.txt 파일을 추가합니다.
pip install -r requirements.txt 명령어를 통해 requirements.txt 파일에 정의된 라이브러리나 프레임워크를 설치할 수 있습니다.
Pytest 테스트 코드 작성
tests 폴더를 생성하고 아무 코드도 들어있지 않은 tests/__init__.py 파일도 추가합니다.
# tests/__init__.py
tests/test_add.py 에 간단한 pytest 코드를 추가합니다.
import pytest
from typing import Union
from main import add
@pytest.mark.parametrize(
"a, b, expected",
[
(1, 2, 3),
(1.0, 2.0, 3.0),
(1, 2.0, 3.0),
(1.0, 2, 3.0),
(0, 0, 0),
(-1, -1, -2),
],
)
def test_add(a: Union[int, float], b: Union[int, float], expected: Union[int, float]):
result = add(a, b)
assert result == expected
pytest tests 명령어로 6개 테스트 케이스에 대해 테스트가 수행되는 것을 확인할 수 있습니다.

Commit 으로 pytest 코드를 기록합니다.

Github Action Workflow 추가하기
.github/workflows/pytest_ci.yaml 파일을 추가하고 다음과 같이 작성합니다.
name: Python CI
on: push
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.11
architecture: x64
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run tests with pytest
run: |
python -m pytest
Commit으로 workflow 및 requirements.txt 파일을 추가합니다.

Githup push 및 테스트 실행 확인하기
Workflow는 코드가 push 될 때마다 수행됩니다. 따라서 우리가 feat-5/pytest-workflow 브랜치를 push 하면, Workflow가 실행되는 것을 확인할 수 있습니다.

Github Repository에서 Pull Request를 생성합니다.

아래로 내려서 Show all checks 를 클릭해봅니다.

Python CI workflow가 실행된 것을 확인할 수 있습니다.

Details를 눌러 수행된 결과를 자세히 확인할 수 있습니다.

코드 리뷰는 승인되었다고 가정하고 Pull Request를 Merge 합니다.
tests 경로에 적절한 테스트 코드를 추가해서 테스트를 진행할 수 있도록 합니다.
main 브랜치에 코드가 Merge 되면 자동으로 Git Tag 및 Release Drafter를 생성하는 Workflow
main 브랜치에 코드가 Merge 되면 GCP Cloud Run으로 배포하는 Workflow