포스팅 개요
이번 포스팅은 test code coverage에 대해서 알아봅니다.
그냥 코드 커버리지(code coverage)라고도 불리우는 방법입니다.
그리고 파이썬(Python)에서 test code coverage를 하는 방법에 대해서도 함께 알아봅니다.
test code 작성은 이전 포스팅(https://lsjsj92.tistory.com/572)내용을 기반으로 진행됩니다.
포스팅 본문
코드 커버리지(code coverage)란 무엇일까요?
code coverage는 소프트웨어 프로그램에서 테스트 케이스가 얼마나 충족되었나? 정도로 생각할 수 있습니다.
즉, 코드에서 테스트가 얼마나 충족이 되었나? 입니다.
흔히, test code를 작성하게 되면 coverage도 같이 측정하게 되는데요. 이때 coverage가 code coverage라고 할 수 있습니다.
파이썬(Python)에서 코드 커버리지(code coverage) 확인하기
파이썬에서 test case를 만들었을 때 test code coverage를 쉽게 확인할 수 있도록 도와주는 패키지가 있습니다.
이름도 단순합니다. coverage이죠!
아래 사진과 같이 간단하게 pip install coverage를 통해 설치할 수 있습니다.
그럼 실행은 어떻게 하면 될까요?
저는 이전 포스팅(맨 위 링크 참조)에서 Python 환경에서 test case를 작성했습니다. 그 코드를 그대로 사용합니다.
해당 코드가 있는 디렉토리에서 coverage run test_main.py 와 같이 coverage run을 실행하면 됩니다.
이렇게 실행하였을 때 에러가 뜨지 않으면 잘 동작이 된 것인데요.
근데 저 상태로 두면 아무것도 보이지 않습니다. 그 결과는 아래와 같이 해야 볼 수 있습니다.
Python 환경이 실행된 상태에서 coverage report 를 입력하게 되면
이렇게 report가 나오게됩니다!
저는 지금 main.py에는 coverage가 56%, test_main.py에는 coverage가 47% 정도 code coverage가 되어있네요.
그리고 또한, html으로도 뽑아낼 수 있는데요.
code coverage 결과를 html로 확인할 수 있도록 지원해줍니다.
Python 환경에서 coverage html을 입력합니다.
위 사진과 같이 입력하면 아래 사진처럼 하나의 디렉토리가 만들어지는데요.
그 디렉토리 안에 들어가면 index.html 파일이 하나 생성되어있습니다.
같이 생성된 .js 파일들은 필요한 javascript 파일입니다.
저 index.html을 클릭해서 웹으로 띄어주면
위 사진과 같이 coverage report가 나오게 됩니다.
각 파일과 함께 statements, missing, excluded, coverage 값이 보이게 되죠!
그리고 또 다른 html 파일이 하나 더 있는데요.
이름_py.html 형식으로 나온 html 파일입니다
위 파일입니다! 저걸 클릭을 하면요
각 파일 별로 어디 부분이 missing이 되었는지, run이 되었는지 보여줍니다.
저는 하나 파일이 더 있으니 그것도 확인해볼게요
마찬가지로 어디 부분이 missing인지, run이 되었는지 확인할 수 있습니다.
결론
test code는 점점 많이 사용하는 추세입니다. 또한, 그에 따라서 code coverage 측정도 해야하죠.
이번 포스팅은 이러한 test code의 coverage 측정하는 방법에 대해 알아보았습니다. 감사합니다.
'python' 카테고리의 다른 글
파이썬(Python) 라이브러리 소개 - Rich 라이브러리(텍스트 출력을 이쁘게 만들어보자) (0) | 2020.06.03 |
---|---|
Python Mecab 사용자 사전 추가 에러(no such file or directory: /../dicrc) 해결하기 (0) | 2020.05.13 |
Python unittest를 사용해 TDD 맛보기 (0) | 2020.02.12 |
mac os에서 python konlpy 설치 및 gcc 에러 해결하기 (2) | 2019.12.29 |
Python jupyter-notebook으로 ppt(slide) 만들기 - python RISE slideshow (2) | 2019.11.03 |