목차
소개
Coverage는 Python 테스트 코드의 품질을 측정하는 데 사용할 수 있는 Python 코드 커버리지 분석 도구입니다. 커버리지 데이터를 코드 실행에 가져옴으로써 Coverage는 개발자가 회귀 테스트 중인 코드의 취약점을 찾고 테스트되지 않은 코드를 표시하는 데 도움을 줄 수 있습니다.
커버리지는 테스트된 코드 부분, 테스트되지 않은 부분, 상대적으로 누락된 코드를 알려줍니다. Coverage를 사용하면 코드 품질을 효과적으로 개선하고 품질 문제의 가능성을 줄일 수 있습니다. 커버리지는 지속적 통합(CI) 및 지속적 제공(CD) 프로세스에 쉽게 통합되어 품질 문제를 조기에 식별하고 해결할 수 있습니다.
설치하다
Coverage는 Python의 타사 라이브러리로 사용 시 먼저 설치가 필요하며 pip 명령을 사용하여 설치합니다.
설치 명령:
C:\Users\TynamYang>pip 설치 범위 취재 범위 다운로드 범위-5.1-cp37-cp37m-win32.whl (204 kB)|███████████████████████████████| 204kB 731kB/s 수집된 패키지 설치: 범위 커버리지 설치 성공-5.1C:\Users\TynamYang>
설치가 완료되면 설치된 버전을 확인할 수 있습니다: coverage-5.1
설치 완료 후 Coverage 사용 Coverage를 사용하는 방법에는 명령줄에서 사용하는 방법과 다음을 통해 사용하는 방법이 있습니다. API를 호출합니다. 테스트가 필요한 코드 부분을 제어하는 것이 편리합니다.
명령줄 사용
1. 기본 매개변수
명령줄에서 사용되는 공통 매개변수:
-
run – Python 프로그램을 실행하고 실행 데이터를 수집합니다.
-
보고 - 보도 범위 결과 보고
-
html – 커버리지 결과 목록이 있는 HTML 파일 생성
-
json – 커버리지 결과가 포함된 JSON 파일 생성
-
xml – 커버리지 결과가 포함된 XML 보고서 파일 생성
-
지우기 – 이전에 수집된 커버리지 데이터 지우기
-
결합 – 여러 데이터 파일 결합
-
디버그 – 디버그 정보 얻기
help 명령을 사용하여 도움말을 볼 수 있습니다.
보장 도움말
2. 코드를 실행하여 정보 수집
Coverage 사용 시 기본적으로 2단계 작업이 필요하며, 첫 번째 단계는 소스 코드를 실행하여 테스트된 소스 코드의 Coverage 정보를 수집하고, 두 번째 단계는 코드 커버리지 정보 보고서를 생성하는 것입니다.
다음 테스트 코드:
#test.py
# coding:utf-8
import unittest
def add_numb(a, b):
return a + b
def division_numb(a, b):
return a / b
class Test(unittest.TestCase):
def test_add_1(self):
self.assertEqual(add_numb(1,1), 2)
def test_add_2(self):
self.assertEqual(add_numb(2,0), 1)
def test_division_1(self):
self.assertEqual(division_numb(2,1), 2)
def test_division_2(self):
self.assertEqual(division_numb(2,0), 2)
if __name__ == "__main__":
unittest.main(verbosity=2)
다음 명령으로 실행:
coverage run test.py
C:\Users\TynamYang\Desktop> 커버리지 실행 test.py test_add_1 (__main__.Test) ... 확인 test_add_2 (__main__.Test) ... 실패 test_division_1 (__main__.Test) ... 확인 test_division_2 (__main__.테스트) ... 오류 ==================================================== ===================== 오류: test_division_2(__main__.테스트) -------------------------------------------------- -------------------- 추적(가장 최근 호출 마지막): 파일 "test.py", 22행, test_division_2 self.assertEqual(division_numb(2,0), 2) 파일 "test.py", 줄 9, division_numb 반환 a / b ZeroDivisionError: 0으로 나누기 ==================================================== ===================== 실패: test_add_2(__main__.Test) -------------------------------------------------- -------------------- 추적(가장 최근 호출 마지막): 파일 "test.py", 16행, test_add_2 self.assertEqual(add_numb(2,0), 1) 주장 오류: 2 != 1 -------------------------------------------------- -------------------- 0.003초에 4개의 테스트 실행 실패(실패=1, 오류=1) PS C:\Users\TynamYang\Desktop>
코드가 실행된 후 커버리지 통계 결과 파일: .coverage가 생성됩니다. 파일 이름은 COVERAGE_FILE 환경 변수를 설정하여 변경할 수 있습니다.
3. 보고서 생성
보고서를 보는 방법에는 두 가지가 있습니다. 하나는 현재 명령줄 모드에서 보는 것이고 다른 하나는 볼 수 있도록 HTML 보고서 파일을 생성하는 것입니다.
명령줄 모드로 보기
코드 실행 후 생성된 .coverage 파일에 따라 보고서 매개 변수를 사용하여 명령줄 모드에서 커버리지 통계 결과를 볼 수 있습니다.
다음 명령을 사용하십시오.
coverage report
PS C:\Users\TynamYang\Desktop> 커버리지 리포트 이름 Stmts Miss Cover -------------------------------------------- test.py 16 0 100% PS C:\Users\TynamYang\Desktop>
결과에서 우리는 실행된 test.py 파일의 코드 커버리지 비율이 100%임을 알 수 있습니다.
결과 디스플레이의 필드 의미:
-
tmts: 총 명령문 수
-
미스: 실행되지 않은 문 수
-
커버: 커버리지, 계산식 커버=(Stmts-Miss)/Stmts
HTML 보고서 파일 생성
HTML 보고서를 생성하려면 다음 명령을 사용하십시오.
coverage html -d covhtml
매개변수 -d는 생성된 html이 지정된 폴더의 이름이며
명령이 실행된 후 covhtml 파일이 생성됩니다.
파일의 Index.html 파일 커버리지 데이터 통계.
몇 가지 예도 참조하십시오. 코그 적용 범위
각 필드에 대한 설명:
-
Stmts 유효 코드 줄의 총 수(빈 줄 및 주석 줄 제외)
-
미스 실행되지 않은 코드 줄 수(공백 줄 및 주석 줄 제외)
-
지점 총 지점 수
-
BrMiss 실행되지 않은 분기 수
-
표지 코드 범위
-
Missing 소스 파일에서 실행되지 않은 코드 부분의 줄 번호
실행된 테스트의 원래 파일 이름을 딴 파일은 포함된 코드와 포함되지 않은 코드를 모두 강조 표시할 수 있습니다. test_py.html과 같은.
몇 가지 예도 참조하십시오
다음을 사용하여 API 호출
문서를 사용하기 위해 API를 호출합니다: http://coverage.readthedocs.org/en/latest/api.html
파이썬 코드에서 커버리지 모듈을 호출하여 코드를 실행함으로써 코드 커버리지의 통계 결과가 생성됩니다. 사용 방법도 다음 예와 같이 매우 간단합니다.
if __name__ == "__main__":
# 实例化对象
cov = coverage.coverage()
# 开始分析
cov.start()
suite = unittest.defaultTestLoader.discover(os.getcwd(), "test.py")
unittest.TextTestRunner().run(suite)
# 结束分析
cov.stop()
# 结果保存
cov.save()
# 命令行模式展示结果
cov.report()
# 生成HTML覆盖率报告
cov.html_report(directory='covhtml')
이곳을 다녀온 사람으로서 저도 우회로를 피해 가시길 바라며 도움이 되었으면 합니다. (WEB 자동 테스트, 앱 자동 테스트, 인터페이스 자동 테스트, 지속적인 통합, 자동 테스트 개발, 대규모 공장 인터뷰 질문, 이력서 템플릿 등), 더 나은 발전을 해줄 것이라고 믿습니다!