Yuta NakataのBlog

Python / AWS / ITについて役立つ情報を発信します

【サンプルコード有】今日から始めるpytest

背景

Pythonユーザー初級〜中級者の方にとって、

書いたコードの正しさを効率的にテストしたい

と考えるのではないでしょうか。

Pythonには、テストフレームワークはいくつもありますが、pytestの人気が高いことは明らかです。

そこで、今回は今すぐ始められるpytestの使い方について紹介します。

サンプルコード

まずは、サンプルコードです。

github.com

以下のようなディレクトリ構成があるとします。

src/
┣ scripts/
┃  ┣ __init__.py
┃  ┗ main.py
┣ tests/
┃  ┣ __init__.py
┃  ┗ test_main.py
┗README.md

また、main.py

def f(x: int):
    if x < 0:
        return None
    return x** 2 + 2*x + 1


if __name__ == '__main__':
    result = f(4)
    print(f'resut is {result}')

今回は、def f()をテストしたいです。

このとき、pytestは下記のように書きます。

from scripts import main

# pytestを実行するには、関数の始まりの語句をtestにする必要があります
def test_f_pattern1():
    # 'assert'を使って、正しさをチェックできます
    assert main.f(1) == 4
    assert main.f(0) == 1
    assert main.f(-1) == None


def test_f_pattern2():
    assert main.f(1) != 1

pytestを実行するにあたって、大事なポイントは、

  • 実行コマンドは、pytest test_main.py -s -v
  • 関数名の始まりは、test_で始める
  • assertを使って、試験したい関数の計算結果が意図通りかを確認する
  • __init__.pyを書く

です。

まずは、cloneして雰囲気を掴んで貰えると嬉しいです。

更に知りたい方向け

testについてもっと知りたい方向けに名著が2つあるので、ご紹介します。

テスト駆動Python 第2版

完全にpytestの使い方に解説してくれている本です。 pytestの大体の機能はこれでOKです。

https://www.amazon.co.jp/%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95Python-%E7%AC%AC2%E7%89%88-Brian-Okken/dp/4798177458/ref=sr_1_1?adgrpid=140756830458&dib=eyJ2IjoiMSJ9.Qrwjs3RodEkYP1bOfix1WSPbrlOxrY8B8eo6VqoM4QeTvrzbi0MhFD2TQ7etw3dkNqgsYvC7m0_Ho0Zv1-uD-svLwXXlC9wwS-j7qOoLQM7ctACRF6gFeRsYNw3KcLudzDPpNBSlV44Zg3Vnn8bEikearDEGGbETaRGhovpes4EVN91fqaXoVEGgyxfOMwsC.sibNyqSqr2UWoFmKghq7lXeccGxE8PN4tS_Cc4z996M&dib_tag=se&hvadid=678960061884&hvdev=c&hvlocphy=1009253&hvnetw=g&hvqmt=e&hvrand=2670193312268713035&hvtargid=kwd-1718974312486&hydadcr=1794_13656998&jp-ad-ap=0&keywords=%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95python+%E7%AC%AC2%E7%89%88&qid=1718423648&sr=8-1

テスト駆動開発

テストに興味のある方は、テスト駆動開発がなにかにも興味があるのではないでしょうか? TDD(Test Driven Development)について学ぶのであればこちらがおすすめです。

https://www.amazon.co.jp/%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA-Kent-Beck/dp/4274217884/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=1SPZS3CJDVLBR&dib=eyJ2IjoiMSJ9.Pk4ofweQS507cMVk6LHoAnB93GfG3b4np1OnUaykpcKzQssPEUezA05l1FpyMNuJVDIN_wZCGOHxOY5Cs6g4gPlToAkXaTMzV2oVOQUwm357ZE6AoyGV9-pn3xZt3ZQcqictisDFODmgWPxNoRc5VCtPX2IDvMSGL6fT42RBcx_6_RPiVkBvk00vTL6KMgjm6kjdM1OxbHvReMZcl3S2lLF0yRW6-civ3djS6qAE80-_9tCZ9SBkQLZzMuQc8cJDEXfwmwjXMxuw_hc3X0weCesOYP6U9qT7OMyR_qpdxfM.qoXCbJad2ayiIyR6ykiWwTzH9jcLuSMeEbctyqJpJgY&dib_tag=se&keywords=%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA&qid=1718423713&sprefix=%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA%2Caps%2C260&sr=8-1