pytestの備忘録
概要
pytestの記事なんてたくさんありますが、好みのまとまりになっているものはなかったので、個人用備忘録。
基本
pytestの基本的な書き方としては以下の通りとします。「test_main.py」というファイル中に「test_test1」関数があったとして、これがテスト時に実行されるされます。この中には、1つのassertが含まれており、これがテスト時で確認すべきものになります。
test_main.py
def test_test1():
value1 = "inu"
value2 = "inu"
assert value1 == value2
その後、以下のコマンドを打つと、結果が表示されます。この時、実行されるのは関数名の頭に「test_」があるものです。
> pytest ./test_main.py
複数のテストケースを実行(pytest.mark.parametrize)
先ほどの関数に、複数のテストケースを実行させる場合は、以下のように改造します。コマンドは先ほどと同じです。
test_main.py
import pytest
@pytest.mark.parametrize("value1,value2", [
"inu", "inu",
"inu", "dog",
"dog", "cane",
])
def test_test1(value1, value2):
assert value1 == value2
実行すると、テストケース1はOKですが、他がNGになると思います。
テスト時に前処理・後処理を実行(pytest.fixture)
テストに前処理・後処理を実行する際は、以下のように改造します。
test_main.py
import pytest
@pytest.fixture
def fixture1():
print("@fixture1 start")
yield
print("@fixture1 end")
@pytest.fixture
def fixture2():
print("@fixture2 start")
yield
print("@fixture2 end")
@pytest.mark.parametrize("value1,value2", [
"inu", "inu",
"inu", "dog",
"dog", "cane",
])
@pytest.mark.usefixtures("fixture1,fixture2")
def test_test1(value1, value2):
assert value1 == value2
これは以下のような記述もできます。
test_main.py
import pytest
@pytest.fixture
def fixture1():
print("@fixture1 start")
yield
print("@fixture1 end")
@pytest.fixture
def fixture2():
print("@fixture2 start")
yield
print("@fixture2 end")
@pytest.mark.parametrize("value1,value2", [
"inu", "inu",
"inu", "dog",
"dog", "cane",
])
def test_test1(value1, value2, fixture1,fixture2):
# この場合、fixture_value = fixture1.getValue()といったよう使用できる。
# これはyieldで値を返していた場合、その値を戻り値として取得することが出来る。
assert value1 == value2
おわりに
ひとまず書いてみました。自己流で調べただけなので、もっとうまいやり方があると思いますが、記録まで。
参考
- ゼロから学ぶPython:https://rinatz.github.io/python-book/ch08-02-pytest/
Author And Source
この問題について(pytestの備忘録), 我々は、より多くの情報をここで見つけました https://zenn.dev/straydog/articles/0f00ea14bcfd1b31a7b4著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol