【Python】Python のカバレッジツール

■ はじめに

Python の 単体試験のカバレッジツールを調べてみた

目次

【1】coverage
 1)インストール
 2)使い方
 3)VS Codeプラグイン
【2】pytest-cov
 1)インストール
 2)使い方
 3)VS Codeプラグイン

【1】coverage

* unittest の カバレッジツール

1)インストール

pip install coverage

# 確認
pip freeze | grep coverage

2)使い方

テスト実行

coverage run -p -m unittest

coverage run -m unittest 【テストファイル】.py

標準出力レポート

coverage report

# オプション「-m(--show-missing)」
# カバーされていないかを行番号表示
coverage report -m

HTML出力

coverage html

クリア

# テスト結果を保存したファイルを削除
coverage erase

3)VS Codeプラグイン

* Code Coverage Highlighter

【2】pytest-cov

* pytest の カバレッジツール

1)インストール

pip install pytest-cov

# 確認
pip freeze | grep pytest-cov

2)使い方

テスト実行

pytest --cov -v tests

# 
pytest --cov -v 【テストファイル】.py

標準出力レポート

pytest -v --cov=【ディレクトリ】

HTML出力

pytest -v --cov=【ディレクトリ】 --cov-report=html

3)VS Codeプラグイン

* coverage-gutters

https://marketplace.visualstudio.com/items?itemName=ryanluker.vscode-coverage-gutters

参考文献

coverage

https://crimsonality.net/python/unittest-coverage-howto/
https://qiita.com/atsuki_seo/items/2485e7c5fd47ba7eccc0
https://zerofromlight.com/blogs/detail/137/
https://blanktar.jp/blog/2015/03/python-unittest-coverage

pytest-cov

https://qiita.com/mink0212/items/34b9def61d58ab781714
https://blog.serverworks.co.jp/pytest-cov
https://qiita.com/kg1/items/e2fc65e4189faf50bfe6
coverage-gutters
https://qiita.com/takuminoid/items/f7f7fa063f4a1e4df0d8
https://qiita.com/moshi/items/21a6ff0a20cd840f71ea
https://blog.serverworks.co.jp/pytest-cov

関連記事

単体試験 / unittest ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/02/223658
単体試験 / unittest ~ mock編 ~
https://dk521123.hatenablog.com/entry/2021/04/05/165656
単体試験 / unittest ~ あれこれ編 ~
https://dk521123.hatenablog.com/entry/2022/07/30/154233
単体試験 / mox ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/01/19/000000
単体試験 / nose ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/01/20/221014
単体試験 / pytest ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/12/13/224810
単体試験 / unittest ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2021/03/31/000000

【Airflow】Apache Airflow ~ 単体試験 / 環境設定編 ~

■ はじめに

https://dk521123.hatenablog.com/entry/2024/06/13/222403

で、Apache Airflow(MWAA)の単体試験を扱った。
今回は、それをLocalで動かせる環境を構築する

目次

【0】前提条件
【1】構築手順
 0)ディレクトリ構成
 1)docker-compose を作成する
 2)requirements.txt を作成する
【2】コマンド実行例
 1)環境構築する
 2)コンテナ上に入る
 3)テストを実行する

【0】前提条件

* docker compose が動かせる環境であること
 => docker-compose については、以下の関連記事を参照のこと。

Docker compose ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2022/04/28/000000

【1】構築手順

0)ディレクトリ構成

├── docker-compose-test.yml ... 「1)docker-compose を作成する」
├── dags
│   └── hello_world.py ... 「Apache Airflow ~ 単体試験 / 入門編 ~」
├── requirements
│   └── requirements.txt ... 「2)requirements.txt を作成する」
└── tests
    ├── __init__.py
    └── test_hello_world.py ... 「Apache Airflow ~ 単体試験 / 入門編 ~」

Apache Airflow ~ 単体試験 / 入門編 ~
https://dk521123.hatenablog.com/entry/2024/06/13/222403

1)docker-compose を作成する

* 以下の関連記事を元に作成

https://dk521123.hatenablog.com/entry/2021/11/07/132014

docker-compose-test.yml

version: "3"
services:
  postgres:
    image: postgres:13
    environment:
      - POSTGRES_USER=airflow
      - POSTGRES_PASSWORD=airflow
      - POSTGRES_DB=airflow
    ports:
      - "5432:5432"
    logging:
      options:
        max-size: 10m
        max-file: "3"
  local-runner:
    image: amazon/mwaa-local:2_6
    restart: always
    depends_on:
      - postgres
    environment:
      - LOAD_EX=n
      - EXECUTOR=Local
      - DEFAULT_PASSWORD=test
      - AIRFLOW__CORE__SQL_ALCHEMY_CONN=postgresql+psycopg2://airflow:airflow@postgres:5432/airflow
    logging:
      options:
        max-size: 10m
        max-file: "3"
    volumes:
      - "${PWD}/dags:/usr/local/airflow/dags"
      - "${PWD}/plugins:/usr/local/airflow/plugins"
      - "${PWD}/requirements:/usr/local/airflow/requirements"
      - "${PWD}/startup_script:/usr/local/airflow/startup"
      - "${PWD}/tests:/usr/local/airflow/tests"
    ports:
      - "28080:8080"
    command: local-runner
    healthcheck:
      test: ["CMD-SHELL", "[ -f /usr/local/airflow/airflow-webserver.pid ]"]
      interval: 30s
      timeout: 30s
      retries: 3
  # ★オプション(なくてもいい)
  localstack:
    image: localstack/localstack:latest
    container_name: "localstack"
    ports:
      - "4566:4566"
    environment:
      - SERVICES=s3
  # ★オプション(なくてもいい)
  aws-cli:
    image: mesosphere/aws-cli
    container_name: "aws-cli"
    volumes:
      - ./resources:/tmp/resources
    environment:
      - AWS_ACCESS_KEY_ID=dummyaccess
      - AWS_SECRET_ACCESS_KEY=dummysecret
      - AWS_DEFAULT_REGION=us-west-2
    entrypoint: /bin/sh -c
    command: >
      "
        aws --endpoint http://localstack:4566 s3 mb s3://reports
        aws --endpoint http://localstack:4566 s3 mb s3://reports-output
        aws --endpoint http://localstack:4566 s3 cp /tmp/resources/fake-report.json \
        s3://reports/fake-report.json
      "
    depends_on:
      - localstack

2)requirements.txt を作成する

requirements.txt

pytest

【2】コマンド実行例

1)環境構築する

docker compose -f docker-compose-test.yml up -d

2)コンテナ上に入る

docker-compose exec local-runner bash

3)テストを実行する

$ pytest tests
============================= test session starts ==============================
platform linux -- Python 3.10.9, pytest-8.2.2, pluggy-1.5.0
rootdir: /usr/local/airflow
plugins: anyio-3.7.1
collected 1 item                                                               

tests/test_hello_world.py .                                              [100%]

=============================== warnings summary ===============================
...
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
======================== 1 passed, 25 warnings in 2.35s ========================

参考文献

https://takemikami.com/2023/0515-docker-compose.html
https://qiita.com/yaboxi_/items/5000ab8d598d86cfe1f7
https://medium.com/its-tinkoff/testing-of-apache-airflows-dags-with-docker-compose-and-pytest-c75be554b184

関連記事

Apache Airflow ~ 単体試験 / 入門編 ~
https://dk521123.hatenablog.com/entry/2024/06/13/222403
Apache Airflow ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/09/28/135510
Apache Airflow ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2021/07/18/004531
Apache Airflow ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2021/07/24/233012
Apache Airflow ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2021/07/28/234319
MWAA Local ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2021/11/05/233309
MWAA Local ~ 環境構築編 / Docker compose ~
https://dk521123.hatenablog.com/entry/2021/11/07/132014
MWAA Local ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/10/21/233404
単体試験 / pytest ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/12/13/224810
単体試験 / pytest ~ 基本編 / Fixture ~
https://dk521123.hatenablog.com/entry/2021/11/24/163751
単体試験 / pytest ~ 基本編 / pytest-mock ~
https://dk521123.hatenablog.com/entry/2021/11/25/131615
単体試験 / unittest ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/02/223658
単体試験 / unittest ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2021/03/31/000000
Docker compose ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2022/04/28/000000

【Docker】Docker compose ~ WordPress ~

■ はじめに

https://dk521123.hatenablog.com/entry/2022/04/29/000000

で行った WordPress (MySQL+WordPress)を
docker-compose で構築する

以下の本 および 公式ドキュメントのクィックスタートを
参考にしている。

https://docs.docker.jp/compose/wordpress.html

補足1:元ネタとなった図書館で借りた本

目次

【1】docker-compose.yml を作成する
【2】コンテナ作成および起動
【3】動作確認
【4】コンテナ停止

【1】docker-compose.yml を作成する

* docker compose (v2)の場合は、「compose.yaml」が基本

docker-compose.yml

version: '3'

services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - network-for-wordpress
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    volumes:
      - wordpress_data:/var/www/html
    networks:
      - network-for-wordpress
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
networks:
  network-for-wordpress:
volumes:
  db_data:
  wordpress_data:

【2】コンテナ作成および起動

docker-compose up -d
# docker compose up -d

【3】動作確認

* ブラウザで以下にアクセスする

http://localhost:8000

【4】コンテナ停止

# コンテナとデフォルトネットワーク、
# さらに WordPress データベースも削除
docker-compose down --volumes
# docker compose down --volumes

関連記事

Docker compose ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2022/04/28/000000
Docker compose ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2022/05/21/222910
Docker compose ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2020/04/11/000000
Docker compose ~ docker-compose.yml ~
https://dk521123.hatenablog.com/entry/2020/12/18/152949
Docker compose ~ Version 2 ~
https://dk521123.hatenablog.com/entry/2023/01/02/000000
Docker compose ~ PostgreSQL
https://dk521123.hatenablog.com/entry/2023/07/20/025544
Docker compose ~ Pgweb/pgAdmin ~
https://dk521123.hatenablog.com/entry/2023/08/10/111919
Docker compose ~ LocalStack/Glue4.0 ~
https://dk521123.hatenablog.com/entry/2023/03/25/021432
Dockerfile / Docker Compose でシェルを実行する
https://dk521123.hatenablog.com/entry/2023/07/21/234509
Docker ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2020/04/24/160044
Docker ~ 基本編 / docker imageコマンド ~
https://dk521123.hatenablog.com/entry/2020/04/13/000000
Docker ~ 基本編 / docker container コマンド ~
https://dk521123.hatenablog.com/entry/2022/01/20/000000
Docker ~ 基本編 / Data Volume ~
https://dk521123.hatenablog.com/entry/2018/09/08/222100