Search Results for ""

コード カバレッジ メトリクスの生成

コード カバレッジは、アプリケーションがどの程度テストされたかを示します。

CircleCI は、組み込みの CircleCI 機能をオープンソース ライブラリと組み合わせて、またはパートナーのサービスを使用して、コード カバレッジ レポートのさまざまなオプションを提供しています。

CircleCI でのカバレッジの表示

コード カバレッジ レポートを直接 CircleCI にアップロードできます。 最初に、プロジェクトにカバレッジ ライブラリを追加し、CircleCI のアーティファクト ディレクトリにカバレッジ レポートを書き込むようにビルドを構成します。 コード カバレッジ レポートはビルド アーティファクトとして、参照またはダウンロード可能な場所に保存されます。 カバレッジ レポートへのアクセス方法の詳細については、ビルド アーティファクトに関するドキュメントを参照してください。

[Artifacts (アーティファクト)] タブのスクリーンショット

言語別にカバレッジ ライブラリを構成する例をいくつか示します。

Ruby

SimpleCov は、よく使用される Ruby コード カバレッジ ライブラリです。 最初に、simplecov gem を Gemfile に追加します。

gem 'simplecov', require: false, group: :test

テスト スイートの開始時に simplecov を実行します。 SimpleCov を Rails と共に使用する場合の構成例を以下に示します。

require 'simplecov'        # << simplecov が必要です
SimpleCov.start 'rails'    # << "Rails" プリセットを使用して SimpleCov を起動します

ENV['RAILS_ENV'] ||= 'test'
require_relative '../config/environment'
require 'rails/test_help'

class ActiveSupport::TestCase
  # すべてのテストの test/fixtures/*.yml にあるすべてのフィクスチャをアルファベット順にセットアップします
  fixtures :all
  # すべてのテストで使用されるヘルパー メソッドをここに追加します...
end

次に、カバレッジ レポートをアップロードするために .circleci/config.yaml を設定します。

version: 2
jobs:
  build:
    docker:
      - image: circleci/ruby:2.5.3-node-browsers
        environment:
          RAILS_ENV: test
      - image: circleci/postgres:9.5-alpine
        environment:
          POSTGRES_USER: circleci-demo-ruby
          POSTGRES_DB: rails_blog
          POSTGRES_PASSWORD: ""
    steps:
      - checkout
      - run:
          name: バンドル インストール
          command: bundle check || bundle install
      - run:
          name: DB の待機
          command: dockerize -wait tcp://localhost:5432 -timeout 1m
      - run:
          name: データベースのセットアップ
          command: bin/rails db:schema:load --trace
      - run:
          name: テストの実行
          command: bin/rails test
      - store_artifacts:
          path: coverage

SimpleCov README に、さらに詳細な説明があります。

Python

Coverage.py は、Python でコード カバレッジ レポートを生成する際によく使用されるライブラリです。 最初に、以下のように Coverage.py をインストールします。

pip install coverage
# これまでは、たとえば以下のように Python プロジェクトを実行していました
python my_program.py arg1 arg2

# ここでは、コマンドにプレフィックス "coverage" を付けます
coverage run my_program.py arg1 arg2

このでは、以下のコマンドを使用してカバレッジ レポートを生成できます。

coverage run -m pytest
coverage report
coverage html  # ブラウザーで htmlcov/index.html を開きます

生成されたファイルは htmlcov/ 下にあり、設定ファイルの store_artifacts ステップでアップロードできます。

version: 2
jobs:
  build:
    docker:
    - image: circleci/python:3.7-node-browsers-legacy
    steps:
    - checkout
    - run:
        name: テスト環境のセットアップ
        command: |
          pip install '.[test]' --user
          echo $HOME
    - run:
        name: テストの実行
        command: |
          $HOME/.local/bin/coverage run -m pytest
          $HOME/.local/bin/coverage report
          $HOME/.local/bin/coverage html  # ブラウザーで htmlcov/index.html を開きます
    - store_artifacts:
        path: htmlcov
workflows:
  version: 2
  workflow:
    jobs:
    - build

Java

JaCoCo は、Java コード カバレッジによく使用されるライブラリです。 ビルド システムの一部に JUnit と JaCoCo を含む pom.xml の例を以下に示します。

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.foo</groupId>
    <artifactId>DemoProject</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>DemoProject</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.6</maven.compiler.source>
        <maven.compiler.target>1.6</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.3</version>
                <executions>
                    <execution>
                        <id>prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>report</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>post-unit-test</id>
                        <phase>test</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                        <configuration>
                            <!-- 実行データを含むファイルのパスを設定します -->

                            <dataFile>target/jacoco.exec</dataFile>
                            <!-- コード カバレッジ レポートの出力ディレクトリを設定します -->
                            <outputDirectory>target/my-reports</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
                <configuration>
                    <systemPropertyVariables>
                        <jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile>
                    </systemPropertyVariables>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

mvn test を実行するとコード カバレッジ レポート (exec) ファイルが生成され、他の多くのカバレッジ ツールと同様に、このファイルが html ページにも変換されます。 上記の Pom ファイルは target ディレクトリに書き込みを行い、これを CircleCI config.yml ファイルでアーティファクトとして保存できます。

上記の例に対応する最小の CI 構成は以下のとおりです。

version: 2
jobs:
  build:
    docker:
      - image: circleci/openjdk:11.0-stretch-node-browsers-legacy
    steps:
      - checkout
      - run : mvn test
      - store_artifacts:
          path:  target

JavaScript

Istanbul は、JavaScript プロジェクトでコード カバレッジ レポートの生成によく使用されるライブラリです。 人気のテスト ツールである Jest でも、Istanbul を使用してレポートを生成します。 以下のコード例を参照してください。

version: 2
jobs:
  build:
    docker:
      - image: circleci/node:10.0-browsers
    steps:
      - checkout
      - run: npm install
      - run:
          name: "Jest の実行とカバレッジ レポートの収集"
          command: jest --collectCoverage=true
      - store_artifacts:
          path: coverage

PHP

PHPUnit は、よく使用される PHP のテスト フレームワークです。 PHP 5.6 以前のバージョンを使用している場合、コード カバレッジ レポートの生成には、PHP Xdebug のインストールが必要になります。PHP 5.6 以降では、phpdbg ツールにアクセスでき、phpdbg -qrr vendor/bin/phpunit --coverage-html build/coverage-report コマンドを使用してレポートを生成できます。

以下に示した基本の .circleci/config.yml では、設定ファイルの末尾にある store_artifacts ステップでカバレッジ レポートをアップロードしています。

version: 2
jobs:
  build:
    docker:
      - image: circleci/php:7-fpm-browsers-legacy
    steps:
      - checkout
      - run:
          name: "テストの実行"
          command: phpdbg -qrr vendor/bin/phpunit --coverage-html build/coverage-report
      - store_artifacts:
          path:  build/coverage-report

Golang

Go には、コード カバレッジ レポートを生成する機能が組み込まれています。 レポートを生成するには、-coverprofile=c.out フラグを追加します。 これでカバレッジ レポートが生成され、go tool を使用して html に変換できます。

go test -cover -coverprofile=c.out
go tool cover -html=c.out -o coverage.html

.circleci/config.yml の例は以下のとおりです。

version: 2.1

jobs:
  build:
    docker:

      - image: circleci/golang:1.11
    steps:
      - checkout
      - run: go build
      - run:
          name: "アーティファクト用の一時ディレクトリの作成"
          command: |
            mkdir -p /tmp/artifacts
      - run:
          command: |
            go test -coverprofile=c.out
            go tool cover -html=c.out -o coverage.html
            mv coverage.html /tmp/artifacts
      - store_artifacts:
          path: /tmp/artifacts

コード カバレッジ サービスの使用

Codecov

Codecov には、カバレッジ レポートのアップロードを簡単に行うための Orb があります。

version: 2.1
orbs:
  codecov: codecov/codecov@1.0.2
jobs:
  build:
    steps:
      - codecov/upload:
          file: 

Codecov の Orb の詳細については、CircleCI ブログへの寄稿記事を参照してください。

Coveralls

Coveralls のユーザーは、カバレッジ統計のセットアップ ガイドを参照してください。CircleCI の環境変数COVERALLS_REPO_TOKEN を追加する必要があります。

Coveralls は、並列ビルドのカバレッジ統計を自動的にマージします。