티스토리 뷰
[Unit Test] 테스트 리포트 보는 여러가지 방법 (slather / xcpretty / xcresult)
eungding 2020. 7. 16. 14:05[1] XCode에서 보기
Edit Scheme에 들어가서 code coverage를 체크해주고
테스트를 돌리면 XCODE에서 여기 말풍선 눌러서 테스트 결과를 볼 수 있잖아요,,,!
Xcode말고 파일로도 볼 수 있습니다..!
Xcode는 Code coverage reports를 derived data directory(~/Library/Developer/Xcode/DerivedData)에 생성합니다.
정확히 말하면 DerivedData -> GithubActionTest -> Logs -> Test 디렉토리에 만들어줍니다.
저 파일을 누르면 XCODE가 열리고 이런 리포트화면을 보여주더라구요
[2] 터미널에 출력해보기
medium.com/xcblog/xccov-xcode-code-coverage-report-for-humans-466a4865aa18
developer.apple.com/videos/play/wwdc2018/403/
위의 두개를 참고해서
xcrun xccov view
를 사용하려고 했더니 잘안되더라구요ㅠㅠ
이렇게 테스트를 돌리고
xcodebuild test -workspace /Users/kakao/Documents/GithubActionTest/GithubActionTest.xcworkspace -scheme 'GithubActionTest' -derivedDataPath ./Build/ -destination 'platform=iOS Simulator,name=iPhone 8' -enableCodeCoverage YES
또는 이렇게 돌리면 derivedData폴더가 프로젝트안에 생성된다고 합니다.
xcodebuild test -workspace /Users/kakao/Documents/GithubActionTest/GithubActionTest.xcworkspace -scheme 'GithubActionTest' -destination 'platform=iOS Simulator,name=iPad Pro (9.7-inch)' -enableCodeCoverage YES clean build test CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
그다음 report 를 보여달라는 명령을 치면
xcrun xccov view –report /Users/kakao/Library/Developer/Xcode/DerivedData/GithubActionTest-gkqmxobtppqtapbinoqivdbgdpnu/Logs/Test/Test-GithubActionTest-2020.07.15_13-13-56-+0900.xcresult
인식할 수 없는 file-format이라고 나옵니다,,,!!
WWDC 보니까 이런식으로 간편하게 리포트를 출력할 수 있던데,
xcode11부터 xccovreport가 아니라 xcresult가 생기도록 빌드시스템이 바뀌었다..?!?! (아닐수 있어요,,,) 라는 말이 있더라구요
xcrun xccov view --json GithubActionTest.xccovreport
그리고 이렇게 돌려보기도 했는데, xcresulttool 이라는 것을 사용해서...!!
xcrun xcresulttool get --format json --path /Users/kakao/Library/Developer/Xcode/DerivedData/GithubActionTest-gkqmxobtppqtapbinoqivdbgdpnu/Logs/Test/Test-GithubActionTest-2020.07.15_14-21-15-+0900.xcresult
그러면 이런식으로 json이 나오는데, 휴먼리더블하지 않고 이게 뭘말하는 건지 잘모르겠네요ㅠㅠ
[3] xcpretty를 이용하기
우선 xcpretty를 설치해주세요
sudo gem install xcpretty
junit 또는 html로 report를 만들겠다고 해줄 수 있습니다.
1) junit으로 보기
xcodebuild test -workspace ~/Documents/GithubActionTest/GithubActionTest.xcworkspace -scheme 'GithubActionTest' -destination 'platform=iOS Simulator,name=iPad Pro (9.7-inch)' -enableCodeCoverage YES | xcpretty --report junit
2) html로 보기
xcodebuild test -workspace ~/Documents/GithubActionTest/GithubActionTest.xcworkspace -scheme 'GithubActionTest' -destination 'platform=iOS Simulator,name=iPad Pro (9.7-inch)' -enableCodeCoverage YES | xcpretty --report html
그러면 터미널에 이렇게 뜨고
User/사용자이름/Build/reports 디렉토리에 이렇게 파일이 생깁니다.
tests.html을 열면 이런 화면을 볼 수 있습니다.
[4] slather를 이용하기
우선 slather 를 설치해주세요
sudo gem install slather
이렇게 돌리면 터미널에서 테스트 커버리지를 볼 수 있습니다.
slather coverage -s --scheme 'GithubActionTest' --workspace ~/Documents/GithubActionTest/GithubActionTest.xcworkspace ~/Documents/GithubActionTest/GithubActionTest.xcodeproj
이렇게 돌리면 html을 만들어줍니다.
slather coverage --html --scheme 'GithubActionTest' --workspace ~/Documents/GithubActionTest/GithubActionTest.xcworkspace ~/Documents/GithubActionTest/GithubActionTest.xcodeproj
User/사용자이름/html 디렉토리에 파일을 생성해줍니다.
근데 output-directory를 설정해서 디렉토리를 바꿔줄 수 있습니다.
slather coverage --html --output-directory ~/Documents/GithubActionTest/reports --scheme 'GithubActionTest' --workspace ~/Documents/GithubActionTest/GithubActionTest.xcworkspace ~/Documents/GithubActionTest/GithubActionTest.xcodeproj
이렇게 돌리면 터미널에서 친절하게 어디에 만들어졌는지 알려주고
원하는 디렉토리에 생성됩니다
reports에 들어가서 index.html 을 열어보면 이렇게 나오고
AppDelegate 눌러서 들어가보면 이렇게
viewController 눌러서 들어가보면 이렇게 나오더라구요
초록색 블럭은 테스트로 커버가 된거
빨간색 블럭은 테스트로 커버가 안된거 말하는 것 같아요
그리고 --show를 추가해서 돌리면 자동으로 만들어진 html파일을 열어줍니다 👍 (브라우저를 열어줍니다)
slather coverage --html --output-directory ~/Documents/GithubActionTest/reports --show --scheme 'GithubActionTest' --workspace ~/Documents/GithubActionTest/GithubActionTest.xcworkspace ~/Documents/GithubActionTest/GithubActionTest.xcodeproj
[ 더보기 ]
slather 관련 발표자료 첨부-!!
www.slideshare.net/allanh0526/how-to-generate-code-coverage-reports-in-xcode-with-slather
'🍏 > Unit & UI Test' 카테고리의 다른 글
Mocks Aren't Stubs (마틴 파울러) (0) | 2022.01.07 |
---|---|
[Unit / UITest] Parallel Testing으로 Test시간을 줄여보자 (0) | 2020.11.20 |
[RxBlocking] toBlocking()과 BlockingObservable (0) | 2020.04.14 |
[SPM & UnitTest] 편리한 extension을 테스트 코드와 함께 작성하고 SPM에 넣자 (0) | 2019.12.24 |
[XCTUnwrap] 강제 언래핑과 XCTUnwrap으로 한 언래핑의 차이점 (0) | 2019.12.10 |
- Total
- Today
- Yesterday
- Flutter Spacer
- Dart Factory
- 구글 Geocoding API
- Django FCM
- DRF APIException
- ribs
- 장고 Custom Management Command
- SerializerMethodField
- ipad multitasking
- Watch App for iOS App vs Watch App
- PencilKit
- Flutter Clipboard
- METAL
- Flutter getter setter
- github actions
- flutter dynamic link
- 플러터 싱글톤
- flutter build mode
- drf custom error
- Python Type Hint
- flutter 앱 출시
- Django Firebase Cloud Messaging
- Django Heroku Scheduler
- Flutter Text Gradient
- Sketch 누끼
- 장고 URL querystring
- Flutter 로딩
- flutter deep link
- 플러터 얼럿
- cocoapod
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |