[브라우니 (Brownie)] 19. 커버리지 평가
$ brownie test --coverage
테스트가 완료되면 보고서가 표시됩니다:
Coverage analysis:
contract: Token - 82.3%
SafeMath.add - 66.7%
SafeMath.sub - 100.0%
Token.<fallback> - 0.0%
Token.allowance - 100.0%
Token.approve - 100.0%
Token.balanceOf - 100.0%
Token.decimals - 0.0%
Token.name - 100.0%
Token.symbol - 0.0%
Token.totalSupply - 100.0%
Token.transfer - 85.7%
Token.transferFrom - 100.0%
Coverage report saved at reports/coverage.json
브라우니는 각 계약 메소드에 대한 % 점수를 출력하여 전체 커버리지 수준을 빠르게 평가할 수 있습니다. 자세한 커버리지 보고서는 프로젝트의 reports
폴더에 저장되며 브라우니 GUI를 통해 볼 수 있습니다.
커버리지 데이터 보기
테스트 커버리지의 깊이 있는 검토를 위해 먼저 브라우니 GUI를 엽니다:
brownie gui
우측 상단에 위치한 "보고서 선택" 드롭다운 목록을 클릭하고 "커버리지"를 선택합니다. 새로운 드롭다운 목록이 나타나며, (브랜치 또는 문장) 어떤 유형의 커버리지 데이터를 볼 것인지 선택할 수 있습니다.
관련 코드는 다른 색으로 강조됩니다:
- 초록색 코드는 테스트 중 실행되었습니다.
- 노란색 브랜치 코드는 실행되었지만, 참으로 평가되었습니다.
- 주황색 브랜치 코드는 실행되었지만, 거짓으로 평가되었습니다.
- 빨간색 코드는 테스트 중 실행되지 않았습니다.

커버리지 평가 방법
테스트 커버리지는 소스 코드의 각 문장과 분기에 연결된 opcode의 맵을 생성하고, 각 트랜잭션의 스택 트레이스를 분석하여 실행된 opcode를 확인하여 계산됩니다. 커버리지 평가 방법에 대한 더 자세한 설명은“Evaluating Solidity Code Coverage via Opcode Tracing”를 참조하십시오.
성능 향상
커버리지 분석 중에는 모든 계약 호출이 트랜잭션으로 실행됩니다. 이를 통해 일반적으로 상태를 변경하지 않는 방법을 분석할 수 있어 더 정확한 커버리지를 얻을 수 있습니다. 이러한 호출-트랜잭션 전에 스냅샷이 촬영되고 테스트 결과에 영향을 미치지 않도록 즉시 상태가 되돌아갑니다. 많은 호출을 포함하는 테스트의 경우 실행 시간이 상당히 느려질 수 있습니다.
커버리지를 평가할 때 테스트 실행 시간을 줄이는 데 도움이 될 수 있는 몇 가지 사항:
- 커버리지는 트랜잭션 단위로 분석되며 결과가 캐시됩니다. 동일한 트랜잭션을 반복할 경우 브라우니는 두 번째로 분석하지 않습니다. 설치 픽스쳐를 디자인하고 시퀀싱할 때 이를 염두에 두십시오.
- 동일한 게터 메서드에 대한 많은 호출이 포함된 테스트의 경우,
no_call_coverage
마커를 사용하여 실행 시간을 크게 줄일 수 있습니다.
- 매우 복잡한 테스트는
skip_coverage
마커로 완전히 제외합니다.
- 가능하면 항상 xdist와 함께 테스트를 병렬로 실행합니다.
가장 느린 테스트의 프로파일을 보려면 -durations
플래그를 사용할 수 있습니다. 최적화 후보를 찾거나 no_call_coverage
와 skip_coverage
픽스처를 사용할 수도 있습니다.