お試し プログラム 技術

pytestから始めるPythonテスト

今回はpytestを使用したテスト方法を紹介します

名称バージョン
Python3.12.3
pytest8.4.2

pytestでテストするための準備

pytestには実施するためにいくつか決まり事があります

  • その1・・・関数名はtest_で始める必要がある
  • その2・・・結果の確認にはassert文を使う必要がある
  • その3・・・ファイル名はtest_で始めるか、_testで終わる必要がある

上記3つの決まり事を守ったうえでテストスクリプトを実装する必要があります
特にファイル名は始まりと終わりどちらにtestを入れても問題ありませんが、関数は必ずtest_で始まる必要がありますので注意してください

実際にテストを実施してみる

簡単なテスト

とりあえず、簡単な内容で実装してpytestを実施してみます

def multiplication(a, b):
    return a * b

# テスト対象
def test_multiplication():
    assert multiplication(1, 2) == 2

上記スクリプトを書いたら、pytestがインストールされている環境フォルダ上で「pytest」と入力するとテストが実施されます

コマンドを実行してすべて問題なく終了すると上記画像のような表示になります

assertで想定していた結果が違うと上記画像のようになります

複数の入力値でテスト

テスト関数に対して、複数の値とテスト結果を持たせて実施する方法となります。その際にテスト関数の引数名と@pytest.mark.parametrizeのパラメーター名は同じにしないとエラーとなるので注意が必要です

import pytest

# テスト対象の関数
def is_even(n: int) -> bool:
    # 偶数かどうかを判定
    return (n % 2) == 0

# 複数の入力値と期待値をパラメータとして与える
@pytest.mark.parametrize("val, result", [
    (2, True),
    (3, False),
    (0, True),
    (-1, False),
])

def test_is_even(val, result):
    assert is_even(val) == result

例外に対するテスト

最後に例外をテストする方法となります。raisesというプロパティを使用して確認する方法となります

import pytest

def divide(x, y):
    # yが0の場合にZeroDivisionErrorを発生させる
    if y == 0:
        raise ZeroDivisionError("division by zero")
    return x / y

def test_zero():
    # ZeroDivisionError が発生することをテスト
    with pytest.raises(ZeroDivisionError):
        result = divide(4, 0)

今回はPythonで自動でテストする方法を紹介しました。テストを自動化できればある程度楽になるので他の言語でも取りいれていきたいですね

会社紹介

私が所属しているアドバンスド・ソリューション株式会社(以下、ADS)は一緒に働く仲間を募集しています

会社概要
「技術」×「知恵」=顧客課題の解決・新しい価値の創造

この方程式の実現はADSが大切にしている考えで、技術を磨き続けるgeekさと、顧客を思うloveがあってこそ実現できる世界観だと思っています
この『love & geek』の精神さえあれば、得意不得意はno problem!
技術はピカイチだけど顧客折衝はちょっと苦手。OKです。技術はまだ未熟だけど顧客と知恵を出し合って要件定義するのは大好き。OKです
凸凹な社員の集まり、色んなカラーや柄の個性が集まっているからこそ、常に新しいソリューションが生まれています

ミッション
私たちは、テクノロジーを活用し、業務や事業の生産性向上と企業進化を支援します

ホームページ
アドバンスド・ソリューション株式会社|ADS Co., Ltd.
アドバンスド・ソリューション株式会社|ADS Co., Ltd.

Microsoft 365/SharePoint/Power Platform/Azure による DX コンサル・シス ...

サイトへ移動

PR

-お試し, プログラム, 技術
-