概要
pytest-order というライブラリを使って実現します
pytest は基本的には上から実行されます
ファイルが別の場合は名前順に実行されます
またテストに親クラスが設定されている場合は親クラスから順番に実行されます
例えば親クラスにあるテストを後からテストしたい場合には pytest.mark.order というデコレータを使います
環境
- macOS 11.7.10
- Python 3.11.6
- pytest 8.0.2
- pytest-order 1.2.0
pytest-order なしの場合
-
vim test.py
import pytest
# Testxxx だと2度実行されてしまうので xxxTest という名前にする
class BaseTest:
def test_two(self):
print("two")
assert 2 == 2
def test_three(self):
print("three")
assert 3 == 3
class TestNumer(BaseTest):
def test_one(self):
print("one")
assert 1 == 1
two
three
one
pytest-order ありの場合
import pytest
# Testxxx だと2度実行されてしまうので xxxTest という名前にする
class BaseTest:
@pytest.mark.order(2)
def test_two(self):
print("two")
assert 2 == 2
@pytest.mark.order(3)
def test_three(self):
print("three")
assert 3 == 3
class TestNumer(BaseTest):
@pytest.mark.order(1)
def test_one(self):
print("one")
assert 1 == 1
one
two
three
最後に
順番を制御したい場合には便利です
ただ 1 -> 2 -> 3 という order で 2 と 3 の間に入れたい場合は番号を一つずつインクリメントする必要があるので大変です
そんな場合には整数以外の order も設定できるので 1 -> 2 -> before 3 -> 3 という感じで設定することもできます
import pytest
# Testxxx だと2度実行されてしまうので xxxTest という名前にする
class BaseTest:
@pytest.mark.order(2)
def test_two(self):
print("two")
assert 2 == 2
@pytest.mark.order(3)
def test_three(self):
print("three")
assert 3 == 3
@pytest.mark.order(before="test_three")
def test_two_point_five(self):
print("two_point_five")
assert 2.5 == 2.5
class TestNumer(BaseTest):
@pytest.mark.order(1)
def test_one(self):
print("one")
assert 1 == 1
one
two
two_point_five
three
もしくは事前に整数を飛ばして間にテストが入っても良いようにしておきましょう
0 件のコメント:
コメントを投稿