API 개발에서 프로덕션으로 - 섹션 7 - 코드 오버레이

시리즈 소개


이 블로그 시리즈의 일곱 번째 부분에 오신 것을 환영합니다. 이것은 가장 기본적인 예로부터 시작됩니다.net5 웹api 및 개발에서 생산까지의 과정.Azure, Docker, GitHub, GitHub 작업을 사용하여 CI/C 배치를 진행하고 인프라 시설을 Pulumi를 사용하는 코드로 사용할 것입니다.
이 문서에서 주목할 사항은 다음과 같습니다.
  • 코드 커버율
  • TL;박사 01 명


    우리는 코드 커버율이 중요한 지표라는 것을 이해하지만, 이것은 고립적으로 보아서는 안 되는 지표이다.

    Achieving a high percentage of code coverage is a great goal to shoot for, but it should be paired with having a robust, quality, high-value test suite.


    우리는 Coverlet 출력 코드 커버율 파일(lcov 형식)을 사용하여Codecov를 설정하고 설정하며 Dockerfile과 GitHub 작업 흐름을 업데이트하여 코드 커버율을 실현한다. 마지막으로 Codecov 설정 파일에 대해 깊이 있게 파악하여 목표를 설정한다.

    Codecov.io is was a great solution and easy to integrate, I can highly recommend the product; I set it up in less than 10 minutes!


    GitHub 저장소


    방울방울 / 견본일기예보 제7부분


    이 저장소는 블로그 글 시리즈의 일부로 API가 개발에서 생산에 이르기까지 개발에 관한 7부분이다.표준에 기초하다.net 표준 날씨 API 샘플.


    소개하다.


    우리는 모두 완벽하고 버그가 없는 코드를 쓰기를 원하지만, 우리는 현실에서 이런 일이 일어나지 않을 것을 안다. 어쨌든 우리는 사람이기 때문이다.따라서 우리는 테스트를 작성하여 하나의 장면을 배정하고 집행하며 단언한다. 반대로 이것은 우리의 코드를 사용할 것이다. 이런 코드는 생산 과정에서 효과적으로 운행되고 고객의 수요를 만족시킬 것이다.추적의 좋은 지표는 코드 커버율이다. 이것은 우리가 테스트 세트의 품질을 평가하는 데 도움을 줄 수 있다.우리의 테스트 중 몇 개의 실제 실행 코드 줄(그리고 더 많은)이 고객의 이러한 수요를 만족시킬 수 있습니까?
    코드 덮어쓰기율은 어떤 코드 줄을 실행했는지 테스트하는 데 사용되는 도량입니다.일반적으로 세 개의 주요 용어를 사용하여 집행하는 모든 줄을 묘사한다.
  • Hit는 소스 코드가 테스트에 의해 실행되었음을 나타냅니다.
  • Partial은 a 테스트에서 소스 코드가 완전히 실행되지 않았음을 나타냅니다.아직 실행되지 않은 지점이 있습니다.
  • 미명중은 테스트가 실행되지 않은 원본 코드를 표시합니다.
  • 많은 제품들이 해결 방안을 제공하는데, 여기서 우리는 그 중의 하나를 연구할 것이다. 그것은 무료로 공급되는 제품이며, 물론 비용을 지불하는 계획도 있다.

    나의 목표 범위는 얼마나 되어야 합니까?


    아마 나에게 나쁜 소식이 있을 거야...신기한 공식이나 은탄은 없다.만약 응용 프로그램의 일부 관건적인 부분을 덮어쓰지 않았거나, 테스트가 건장하지 않아서 실행할 때 포획에 실패하면 덮어쓰는 확률이 높아도 문제가 있을 수 있습니다.로컬 또는 CI의 일부로
    그럼에도 불구하고, 몇몇 보편적인 견해는 이것이 약 80퍼센트라는 것이다. 그러나, 너는 이것이 목표라는 것을 깨달아야 한다. 목표를 달성하기 위해 즉각 실현하고 지름길로 가는 것이 아니라는 것을 깨달아야 한다.일부 제품 팀은 스트레스를 느낄 수 있기 때문에 목표를 실현하고 광범위한 테스트를 만들어서 이러한 목표를 실현해야 한다.이 함정에 빠지지 마라. laser focus가 줄마다 코드를 공격하려고 하지 않도록 하고, 반대로 응용 프로그램의 업무 수요에 중점을 두어야 한다.

    코드 덮어쓰기 보고서


    본고에서 보듯이 코드 커버율 보고서는 식별 테스트에서 관건적인 미명중 방법을 제공합니다.API/애플리케이션에는 여러 가지 테스트가 있을 수 있으며, 때로는 탐색이 어려울 수도 있으며, 몇 가지 테스트 실패만 알 수 있습니다. 다음은 목록입니다.코드 커버율 보고서는 세부 사항을 발굴하고 취할 행동을 찾는 방법을 제공한다.테스트를 거치지 않은 것들을 찾아내다.

    코드 덮어쓰기율이 좋은 테스트와 같지 않습니다


    코드가 테스트를 포함하고 있기 때문에 모든 것이 좋다는 것은 아니라는 것을 명심해라.만약에 테스트가 정확한 테스트가 아니라면, 테스트가 정확한 방식으로 정확한 요소를 테스트하지 않았다면, 테스트의 질과 가치가 비교적 낮다는 것을 의미합니다.하지만, 당신의 코드 커버율은 매우 높습니다...그럼 어때요?봐라, 코드 커버율은 하나의 지표로서, 반드시 다른 지표와 다른 실천과 함께 보아야 한다.

    Achieving a high percentage of code coverage is a great goal to shoot for, but it should be paired with having a robust, quality, high-value test suite.


    요구 사항


    우리는 우리가 중간에서 끝낸 곳을 계속할 것이다. 이것은 당신이 GitHub Repo - Part 6의 최종 결과로부터 시작해야 한다는 것을 의미한다.
    만약 당신이 이 시리즈에 계속 관심을 가지고 있다면, 나는 당신을 격려할 것입니다. 그러나 이전의 댓글이 당신에게 이미 지식이 되었다면, 필요 없습니다.

    시트


    Coverlet은 크로스플랫폼 코드의 커버율을 높이는 첫 번째 방식이다.NET, 행, 브랜치 및 메소드 무시를 지원합니다.그것은 너와 함께 일할 수 있다.NET 프레임워크는 Windows 및NET 커널은 지원되는 모든 플랫폼에서 실행됩니다.요컨대, 정말 훌륭하다!
    우리 프로젝트에 그것을 설정하자.

    첫걸음


    프로젝트에 Coverlet을 추가하려면 단원 테스트 프로젝트에 coverlet.msbuild 패키지를 추가해야 합니다.
    terminal, cd를 단원 테스트 항목이 있는 폴더에 열고 다음 명령을 실행합니다.
    dotnet add package coverlet.msbuild
    

    If you're using Visual Studio you can simply add a new reference using the UI.


    이 명령은 Nuget을 사용하여 다음과 같이 .csproj 파일을 업데이트합니다.
        <PackageReference Include="coverlet.msbuild" Version="3.0.2">
          <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
          <PrivateAssets>all</PrivateAssets>
        </PackageReference>
    

    두 번째 단계


    코드 범위의 지표를 수집하기 위해 dotnet test 명령을 업데이트합니다.
    -p:CollectCoverage=true \
    -p:CoverletOutput="TestResults/coverage.info" \
    -p:CoverletOutputFormat=lcov
    

    Dockerfile-[Unit test runner] 섹션


    이것은 우리가 수정한 단원 테스트 실행 프로그램의 현재 모습입니다. 코드 커버율의 추가 인자가 포함되어 있습니다.
    # Unit test runner
    FROM build AS unit-test
    WORKDIR /code/test/Samples.WeatherForecast.Api.UnitTest
    ENTRYPOINT dotnet test \
        -c Release \
        --runtime linux-musl-x64 \
        --no-restore \
        --no-build \
        --logger "trx;LogFileName=test_results_unit_test.trx" \
        -p:CollectCoverage=true \
        -p:CoverletOutput="TestResults/coverage.info" \
        -p:CoverletOutputFormat=lcov
    

    We have chosen the lcov format simple because the tools we are going to use next require this format.

    You can output other formats and even multiple formats at the same time.


    간단한 예를 들어 lcov와 Opencover 형식을 출력하고 싶으면 마지막 두 줄을 수정할 수 있습니다.
    -p:CoverletOutput="TestResults/" \
    -p:CoverletOutputFormat=\"lcov,opencover\"
    

    세 번째 단계


    우리는 현재 로컬에서 구축해야 한다. 우리는 .\unit-test.ps1 스크립트를 가지고 있으며, 그것을 실행해야 한다. 코드 커버율에 Coverlet의 출력이 있어야 한다. 우리는 다시 한 번 확인해서 확보해야 한다./TestResults 디렉터리를 보면 coverage.info이라는 추가 파일이 있을 것이다.

    코드코프


    만약 당신이 우아한 해결 방안을 찾고 있다면 Codecov이 당신을 덮어씌울 것입니다.쌍관어아직도 거기P
    Codecov를 설정합니다.
    Codecov으로 이동하여 등록

    I've used my GitHub account.


    연결하면 다음 화면 캡처와 같이 저장소 설정이 표시되지 않습니다.

    고르다→ 저장소 추가
    이 예에 대해 나는 선택할 것이다
    견본WeatherForecast-Part-7 저장소.

    새로운 걸음


    GitHub 운영의 위력인 GitHub 운영의 위력인 Gidecov는 미리 구축된 운영을 통해 Gidecov에 보도 결과를 올리는 새로운 절차를 추가해야 합니다.

    For more information, please see, GitHub Action for Codecov.

    Unit test [publish] 단계가 끝나면 다음 코드와 함께 새 단계를 추가합니다.
    - name: Code coverage [codecov]
      uses: codecov/[email protected]
      with:
        files: ${{ github.workspace }}/path/to/artifacts/testresults/coverage.info
        verbose: true
    

    Codecov 제출 시간


    만약 저처럼 로컬에서 이 연습을 실행했다면, coverage.info을 실행해서 .\unit-test.ps1을 생성해야 합니다.
    변경 사항을 제출할 때가 되었습니다. 구축이 시작되었을 것입니다. Codecov는 이 모든 것을 알고 있어야 합니다.
    구축 작업이 Codecov 작업을 수행한 경우 결과는 Codecov 플랫폼에서 확인할 수 있습니다.

    코드를 심도 있게 분석하면 다음과 같은 내용을 볼 수 있습니다.

    우리의 코드 커버율을 보면 이것은 결코 좋은 것이 아니다. 전체적으로 말하자면 우리는 이미 36% 를 실현했지만, 적어도 우리는 약간의 행동을 취할 수 있다.우리는 우리의 샘플 단원 테스트를 가지고 있는데 이것은 매우 기본적인 것이다. 우리가 program.csstartup.cs을 덮어쓰지 않은 것을 감안하면 우리의 전체 커버율을 손상시킬 것이다.

    코드 덮어쓰기 배지


    모든 사람은 자신의 자술 서류에 휘장을 붙이는 것을 좋아한다.md, Cocodev bage에 가입하십시오.
    아래 코드를 readme.md 파일에 추가합니다. 물론 제 코드와 약간 다릅니다.
    [![codecov](https://codecov.io/gh/peteking/Samples.WeatherForecast-Part-7/branch/main/graph/badge.svg?token=KZW5MORPPY)](https://codecov.io/gh/peteking/Samples.WeatherForecast-Part-7)
    

    Where can I get the code you need, well, that's easy...

    Navigate to your project in Codecov

    ClickSettings (top-right)

    In the Sidebar ClickBadges



    Codecov 저장소 구성


    먼저 다음 링크를 사용하여 GitHub에 Codecov Bot을 설치합니다.
    GitHub App - Codecov Bot

    다양한 구성으로 Codecov 를 구성할 수 있습니다. 자세한 내용은 About the Codecov yaml 참조
    여기서 우리는 30퍼센트의 목표 범위를 설정했다. 우리가 알고 있는 바와 같이, 이것은 상당히 낮지만, 이것은 단지 그것이 어떻게 작동하는지 설명하는 예일 뿐이다.
    당신의 코드를 제출하고 결과가 나오기를 기다리면 모두 순조롭게 통과할 수 있을 것입니다.
    coverage:
      status:
        project:
          default:
            target: 30%    # the required coverage value
            threshold: 1%  # the leniency in hitting the target
    

    We will take advantage of the above settings in the next blog post :)


    저희가 뭘 배웠죠?


    우리는 API에 코드 덮어쓰기, 특히 Codecov.io을 추가하는 방법을 배웠다.이러한 결과를 실현하기 위해서, 우리는 Coverlet을 추가하고 덮어쓰기 범위 파일 (특히 lcov) 을 출력하는 방법을 이해했다.Dockerfile, GitHub 작업 흐름을 조정하고 코드 덮어쓰기 목표(덮어쓰기가 낮음에도 불구하고)를 설정했으며 GitHub 메모리 라이브러리 자술 파일에 표시를 추가했습니다.

    📄 UPDATE - CodeCov.io
    We end up removing CodeCov.io from our API in , however, it's still worthwhile going through this process. Even so, CodeCov.io could be OK for you, don't let me stop you! 👍


    다음


    이 시리즈에서는 다음을 설명합니다.
  • 더 많은 코드 커버율 - 우리는 현실적인 코드 커버율 목표를 설정할 것이다.
  • GitHub 상태 점검 - 코드를 어떻게 보호합니까?
  • 추가 정보

  • https://www.azure.com
  • https://dotnet.microsoft.com/
  • https://www.github.com
  • https://www.docker.com
  • https://www.pulumi.com
  • https://github.com/coverlet-coverage/coverlet
  • https://www.codecov.io
  • 좋은 웹페이지 즐겨찾기