학습주제
학습내용
hanman 코드에 테스트를 추가,
문법 에러, 코딩스타일 이슈도 추가
Dockerfile push 해놓음
테스트
유닛테스트, pytest가 있는데 pytest가 좀 더 최신인 것으로 보임.
이거 외에 코딩스타일.
flake8
문법 에러, 스타일링 체크 예정
리포 단위로 적용되며, 하나의 리포에 대해 다수의 워크플로우 세팅 가능.
워크 플로우는 텍스트 형태고, yml 포맷로 존재.
.github/workflows/ 아래 존재.
python app
CI.
기본이 되는 코드들을 최대한 채워줌
뼈대를 잡가주기 때문에 나는 살만 붙이면 되는 식
flake8으로 문법에러, 코딩스타일 체크
테스트 코드를 실행시켜줌.
pytest->unittest로 바꿔줄 예정
configure 누르면
기본 코드들이 적혀있을 것임
추천으로 뜸
flake8 일종의 툴
linting tool. 언어별로 존재
한줄에 최대 127글자. max-complexity 복잡도 10까지
예를들어 저런 코드가 있으면
def 뒤에 : 이 빠져있음.
오른쪽에 보면 3번 째줄의 12번째 글자에 에러를 출력함. 콜론 추가하고 다시 실행시키면
앞에 또 문법 에러가 걸릴것임.
스타일가지고 뭐라 할 것임.
굉장히 많은 옵션이 있음.
https://github.com/kjw9684k/hangman_web/blob/main/test.py
테스트 코드
test.py는 메인 메서드가 지정된 상황.
5개의 테스트가 있음.
python3 test.py (메인메소드가 정해진 경우)
python3 -m unittest test.py (메인 메소드가 정해지지 않은경우)
유닛테스트 쓰려면 class를 만들면 됨
class HangmanTestCase(unittest.TestCase):
부모, 기본이 되는 케이스를 부모로 만들어진 새로운 클래스 생성함.
test로 시작하는 함수들을 만들어놓으면
모든 테스로 시작하는 함수들을 부르게 됨.
hanman이라는 모듈을 대상으로 적용
app.py를 hangman으로 부르고 있음.
checkCorrectAnswer
checkWrongAnswer
기본적으로 2개의 인풋을 받아서
True, False를 리턴하게 되어있음.
미리 기댓값을 정해놓음.
예상되는 리턴값을 정해놓고
self.assertTrue(answer) 인자가 True면 문제가 없음. 인자가 False면 에러가 생김.
self.assertFalse(answer) False가 리턴될 것을 기대하고 만듦.
외에도 리턴값이 다른 특정 값과 같은지.
pytest도 크게 다르지 않음. anotation을 조금 더 많이 씀
밑에 메인을 보면
if __name__ == "__main__":
unittest.main()
같은 파일 안에 있는 TestCase로 계승된 클래스를 찾아서 test_로 시작하는 메서드를 부름
리포 Actions
추천으로 뜸
yml 편집 화면으로 넘어간다.
on 아래 보면
이벤트들을 리스팅
워크플로우가 트리거 되는 리스팅
두개. push, pull_requests. main 브랜치인 경우에만
yml또는 yaml임. 환경설정 파일
JSON과 동일하게 포맷을 표현
다른점은 타이핑을 덜함.
샵으로 커맨트
콜론 띄어쓰기 조합으로 키밸류를 표현할 수 있음
리스트를 표현하고 싶으면
콜론 뒤에 - 붙이고 넣으면 됨
hobbies:
- reading
- hiking
하이픈 스페이스로 시작
nested 키벨류 페어를 만들수도 있음
이때는 두칸 띄고 넣어주면 됨.
phone:
home: 442
work: 123
딕셔너리 같이
폰 서브키 밑에는 홈 워크 서브서브 키.
멀티라인 스트링의 경우 예를들어 여러 줄의 값을 가진다면 : |
이렇게 하면 다음 키벨류 페어 나오기 전까지
JSON과 동일한 표현능력 가짐.
변환 툴도 있음.
보면 거의 비슷한 것을 알 수 있고, 간편해진 것을 알 수 있다.
yml을 쓰는 추세. dbt도 yml을 씀
on으로 트리거 이벤트 지정. main 브랜치
자동으로 내용을 많이 채워줌.
기본으로 pytest이기에 달려줌
-r requirements.txt
로 필요한거 알아서 설치해줌
파이썬 버전 3.10을 가지고 사용하게 됨.
flake8을 두번 실행해서 다양한 코드스타일과 문법 에러를 체크해줌.
마지막 스텝 Test with unittest로 바꾸고
run: |
python -m unittest discover -p 'test*.py'
서브 디렉토리까지 다 뒤져서 test로 시작하는 py 스크립트 실행.
몇개 실행, 몇개 실패 등등이 통계적으로 보임.
파이썬 애플리케이션 워크플로우경우
꽤 괜찮게 제공됨.
유닛테스트로 바꾸고, 뒤에 라인만 붙여주면 됨.
그다음 옆에 save 버튼이 있음 이는 PR로 이어짐.
새로운 브랜치를 파고 머지하는 식으로 선택
메인에 바로 커밋할 수도 있고,
결국 최상위 레벨에 workflows 폴더가 보이고, yml 파일이 만들어짐
데모에선 flake 8 설명
sample. py가 있었음
문법에러가 있고
함수와 import 사이에 빈라인이 한개 밖에 없는 이슈 있음
커멘트도 문자와 최소 2개 띄어놔야함.
flake8 sample.py
3:12 에러 났다고 함, 구체적이지 않음
고치니까 다른 에러들이 뜸
random 모듈이 임포트 됐는데 안쓰였다.
2개의 블랭크 있을줄 알았는데 1개
인라인 커멘트 앞에 적어도 2개
아무 에러가 안뜸.
문법, 스타일 이슈를 자동으로 체크해주는 툴
깃헙 액션 데모로 넘어가서
Actions 메뉴 선택
새로운 워크 플로우를 추가함.
나도 이렇게 추천 목록에 바로 떴었음
안보이면
python application 검색
밑으로 쭉 내려가 CI 목록에서 봐도 됨.
다양한 테스트 워크플로우 설정화면
디폴트로 적혀있다. 우리는 여기서 일부만 수정.
on 부분에 어떤 이벤트, 브랜치 대상으로 트리거 될지.
main에서 트리거
jobs에 보면 다양한 스택들
build만 있음.
CI만 하는게 아니라 CD도 있으면 뒤에 뭔가가 있음.
만일 도커 이미지 만들기 있으면 또다른 스텝도 있을 것임.
runs-on ubunu-latest
파이썬 3.10 설치
falke8 툴을 써서 코드베이스에 있는 파이썬 파일에 대해 코딩스타일 체크.
파이썬 함수 사이에는 2줄 띄워져 있어야한다. 공백문자 있으면 삭제하라. 탭과 스페이스 인덴테이션 섞여있으면 고쳐라.
기본적으로 pytest를 써서. pytest를 설치해서 쓰게되어있음. 이걸 없애주고
unittest로 이름을 변경함.
run: |
python -m unittest discover -p 'test*.py'
테스트로 시작하는 모든 스크립트를 실행시킨다.
우리는 test.py만 실행될 것임.
루트 - .github/workflows/yml 순으로 생김
Commit changes
세이브 한다.
PR 함
이게 테스트를 정말로 트리거하는지 확인해보기 위해 readme로 이동
내용 수정후 커밋시도
메인에 PR
홈디렉토리로 이동해서
주황색 불들어와 있는데
이게 깃헙액션이 실행되고 있다는 뜻
완료됨
강의는 돌고 있는 중
details로 들어가면
각 스텝별로 들어가보면
모듈 설치하고
이것저것 함.
5개의 테스트가 돌았고
성공적으로 끝남.
다양한 테스트들을 추가하고 main 브랜치에 push, PR 할때 액션이 돌아감
flake8을 통해 코딩스타일, 문법을 체크할 수 있음.
이제 도커 이미지를 만들어본다