CircleCI+PHPUnit으로 분석한 코드 커버리지의 변화를 Redash+Amazon Athena로 그래프로 표시
그래서 최근 v2.0.0이 릴리스되어 Amazon Athena와의 연계가 간단해진 Redash를 사용하여 빌드 간의 코드 커버리지(라인 커버리지)의 추이를 그래프화해 보았습니다.
S3
버킷에 /phpunit/coverage/line/
라는 폴더를 만들었습니다.
이 폴더에 코드 커버리지 보고서를 저장하고 Athena에서 처리합니다.
CircleCI
Athena가 지원하는 파일 형식으로 PHPUnit 코드 커버리지 보고서를 출력 할 수 없으므로 명령 줄 옵션 --coverage-xml
를 사용하여 XML 형식으로 코드 커버리지 보고서를 출력합니다.
그 후, 아래와 같이 잡히 XML 형식에서 JSON 형식으로 변환합니다.
php -r '$xml=simplexml_load_file("/tmp/coverage.xml/index.xml");$attr=$xml->project->directory->totals->lines->attributes();$json=json_encode(["timestamp"=>time(),"total"=>(int)$attr["total"],"comments"=>(int)$attr["comments"],"code"=>(int)$attr["code"],"executable"=>(int)$attr["executable"],"executed"=>(int)$attr["executed"],"percent"=>(string)$attr["percent"]]);echo$json;' > /tmp/line_coverage.json
라인 커버리지 정보만 필요하므로 라인 커버리지 정보만 포함한 JSON으로 하고 있습니다.
Athena가 JSON 형식을 지원한다고는 해도, 복잡한 구조의 JSON에 대응하는 테이블을 작성하는 것은 번거롭기 때문에, 필요 최소한의 요소만을 포함한 JSON에 미리 가공해 두는 것이 좋다고 생각합니다.
JSON은 Athena로 정렬 할 때 사용할 타임 스탬프를 제공합니다.
Athena에서 쿼리를 실행할 때 JSON 키에 @
가 포함되어 있으면 오류가 발생하기 때문에 키도 직접 정의합니다.
그리고이 JSON 파일을 S3에 업로드합니다.
aws s3 cp /tmp/line_coverage.json s3://{バケット名}/phpunit/coverage/line/line_coverage_`date +%Y%m%d_%H%M%S`.json
Athena
S3에 업로드한 JSON 파일을 처리하기 위한 테이블을 만듭니다.phpunit_line_coverage_logs
라는 테이블로 만들었습니다.
테이블의 컬럼명과 형태는 아래와 같습니다.
열 이름
금형
timestamp
timestamp
total
int
comments
int
code
int
executable
int
executed
int
percent
문자열
테이블을 작성하는 방법에 대해서는 이 기사 가 참고가 되었습니다.
Redash
Redash와 Athena를 협력합니다.
제휴 방법에 대해서는 이 기사 가 참고가 되었습니다.
링크 된 기사는 Redash v1.0.0에 대해 작성되었지만 v2.0.0에서도 같은 방식으로 설정할 수있었습니다.
Athena에 작성한 테이블에 대해 아래와 같은 쿼리를 실행하면 코드 커버리지의 추이를 얻을 수 있습니다.
SELECT *
FROM {データベース名}.phpunit_line_coverage_logs
ORDER BY TIMESTAMP ASC LIMIT 100;
이것을 시각화하고 그래프화합니다.
코드 커버리지의 변화를 그래프로 표현할 수 있었습니다.
코드 커버리지가 늘어나는 모습이 가시화되면 테스트를 쓰는 동기 부여가 올라가 좋네요.
참고
Athena가 지원하는 파일 형식으로 PHPUnit 코드 커버리지 보고서를 출력 할 수 없으므로 명령 줄 옵션
--coverage-xml
를 사용하여 XML 형식으로 코드 커버리지 보고서를 출력합니다.그 후, 아래와 같이 잡히 XML 형식에서 JSON 형식으로 변환합니다.
php -r '$xml=simplexml_load_file("/tmp/coverage.xml/index.xml");$attr=$xml->project->directory->totals->lines->attributes();$json=json_encode(["timestamp"=>time(),"total"=>(int)$attr["total"],"comments"=>(int)$attr["comments"],"code"=>(int)$attr["code"],"executable"=>(int)$attr["executable"],"executed"=>(int)$attr["executed"],"percent"=>(string)$attr["percent"]]);echo$json;' > /tmp/line_coverage.json
라인 커버리지 정보만 필요하므로 라인 커버리지 정보만 포함한 JSON으로 하고 있습니다.
Athena가 JSON 형식을 지원한다고는 해도, 복잡한 구조의 JSON에 대응하는 테이블을 작성하는 것은 번거롭기 때문에, 필요 최소한의 요소만을 포함한 JSON에 미리 가공해 두는 것이 좋다고 생각합니다.
JSON은 Athena로 정렬 할 때 사용할 타임 스탬프를 제공합니다.
Athena에서 쿼리를 실행할 때 JSON 키에
@
가 포함되어 있으면 오류가 발생하기 때문에 키도 직접 정의합니다.그리고이 JSON 파일을 S3에 업로드합니다.
aws s3 cp /tmp/line_coverage.json s3://{バケット名}/phpunit/coverage/line/line_coverage_`date +%Y%m%d_%H%M%S`.json
Athena
S3에 업로드한 JSON 파일을 처리하기 위한 테이블을 만듭니다.phpunit_line_coverage_logs
라는 테이블로 만들었습니다.
테이블의 컬럼명과 형태는 아래와 같습니다.
열 이름
금형
timestamp
timestamp
total
int
comments
int
code
int
executable
int
executed
int
percent
문자열
테이블을 작성하는 방법에 대해서는 이 기사 가 참고가 되었습니다.
Redash
Redash와 Athena를 협력합니다.
제휴 방법에 대해서는 이 기사 가 참고가 되었습니다.
링크 된 기사는 Redash v1.0.0에 대해 작성되었지만 v2.0.0에서도 같은 방식으로 설정할 수있었습니다.
Athena에 작성한 테이블에 대해 아래와 같은 쿼리를 실행하면 코드 커버리지의 추이를 얻을 수 있습니다.
SELECT *
FROM {データベース名}.phpunit_line_coverage_logs
ORDER BY TIMESTAMP ASC LIMIT 100;
이것을 시각화하고 그래프화합니다.
코드 커버리지의 변화를 그래프로 표현할 수 있었습니다.
코드 커버리지가 늘어나는 모습이 가시화되면 테스트를 쓰는 동기 부여가 올라가 좋네요.
참고
Redash와 Athena를 협력합니다.
제휴 방법에 대해서는 이 기사 가 참고가 되었습니다.
링크 된 기사는 Redash v1.0.0에 대해 작성되었지만 v2.0.0에서도 같은 방식으로 설정할 수있었습니다.
Athena에 작성한 테이블에 대해 아래와 같은 쿼리를 실행하면 코드 커버리지의 추이를 얻을 수 있습니다.
SELECT *
FROM {データベース名}.phpunit_line_coverage_logs
ORDER BY TIMESTAMP ASC LIMIT 100;
이것을 시각화하고 그래프화합니다.
코드 커버리지의 변화를 그래프로 표현할 수 있었습니다.
코드 커버리지가 늘어나는 모습이 가시화되면 테스트를 쓰는 동기 부여가 올라가 좋네요.
참고
Reference
이 문제에 관하여(CircleCI+PHPUnit으로 분석한 코드 커버리지의 변화를 Redash+Amazon Athena로 그래프로 표시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ngmy/items/944941f4fc16634c7dc4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)