å¹ççã§ä¿å®ãããããã¹ãã®ããã«pytestãã£ã¯ã¹ãã£ãç¿åŸããŸããããäŸåæ§æ³šå ¥ã®ååãšå®è·µçãªäŸãåŠã³ãå ç¢ã§ä¿¡é Œæ§ã®é«ããã¹ããäœæããŸãã
Pytest Fixtures: å ç¢ãªãã¹ãã®ããã®äŸåæ§æ³šå ¥
ãœãããŠã§ã¢éçºã®é åã«ãããŠãå ç¢ã§ä¿¡é Œæ§ã®é«ããã¹ãã¯æãéèŠã§ãã人æ°ã®Pythonãã¹ããã¬ãŒã ã¯ãŒã¯ã§ããPytestã¯ããã¹ãã®ã»ããã¢ãããšãã£ã¢ããŠã³ãç°¡çŽ åããã³ãŒãã®åå©çšæ§ãä¿é²ãããã¹ãã®ä¿å®æ§ãåäžããã匷åãªæ©èœã§ãããã£ã¯ã¹ãã£ãæäŸããŸãããã®èšäºã§ã¯ãpytestãã£ã¯ã¹ãã£ã®æŠå¿µãæ·±ãæãäžããäŸåæ§æ³šå ¥ã«ããããã®åœ¹å²ãæ¢ãããã®æå¹æ§ã瀺ãå®è·µçãªäŸãæäŸããŸãã
Pytestãã£ã¯ã¹ãã£ãšã¯ïŒ
æ¬è³ªçã«ãpytestãã£ã¯ã¹ãã£ã¯ããã¹ããä¿¡é Œæ§é«ãç¹°ãè¿ãå®è¡ãããããã®åºå®ãããããŒã¹ã©ã€ã³ãæäŸãã颿°ã§ãããããã¯äŸåæ§æ³šå ¥ã®ã¡ã«ããºã ãšããŠæ©èœããè€æ°ã®ãã¹ã颿°ããç°¡åã«ã¢ã¯ã»ã¹ã§ããåå©çšå¯èœãªãªãœãŒã¹ãæ§æãå®çŸ©ããããšãå¯èœã«ããŸãããã¹ããæ£ããå®è¡ãããããã«å¿ èŠãªç°å¢ãæºåãããã¡ã¯ããªã ãšèããŠãã ããã
åŸæ¥ã®ã»ããã¢ããããã³ãã£ã¢ããŠã³ã¡ãœããïŒunittest
ã®setUp
ãtearDown
ãªã©ïŒãšã¯ç°ãªããpytestãã£ã¯ã¹ãã£ã¯ããé«ãæè»æ§ãã¢ãžã¥ãŒã«æ§ãããã³ã³ãŒãæŽçãæäŸããŸããããã«ãããäŸåé¢ä¿ãæç€ºçã«å®çŸ©ãããã®ã©ã€ããµã€ã¯ã«ãã¯ãªãŒã³ãã€ç°¡æœãªæ¹æ³ã§ç®¡çã§ããŸãã
äŸåæ§æ³šå ¥ãšã¯
äŸåæ§æ³šå ¥ã¯ãã³ã³ããŒãã³ããäŸåé¢ä¿ãèªåèªèº«ã§äœæããã®ã§ã¯ãªããå€éšãœãŒã¹ããåãåããã¶ã€ã³ãã¿ãŒã³ã§ããããã«ããççµåãä¿é²ãããã³ãŒããããã¢ãžã¥ãŒã«åããããã¹ããããããä¿å®ãããããªããŸãããã¹ãã®æèã§ã¯ãäŸåæ§æ³šå ¥ã«ãããå®éã®äŸåé¢ä¿ãã¢ãã¯ãªããžã§ã¯ãããã¹ãããã«ã«ç°¡åã«çœ®ãæããããšãã§ããåã ã®ã³ãŒããŠããããåé¢ããŠãã¹ãããããšãå¯èœã«ãªããŸãã
Pytestãã£ã¯ã¹ãã£ã¯ããã¹ã颿°ããã®äŸåé¢ä¿ã宣èšããã¡ã«ããºã ãæäŸããããšã§ãäŸåæ§æ³šå ¥ãã¹ã ãŒãºã«ä¿é²ããŸãããã¹ã颿°ããã£ã¯ã¹ãã£ãèŠæ±ãããšãpytestã¯èªåçã«ãã£ã¯ã¹ãã£é¢æ°ãå®è¡ãããã®æ»ãå€ããã¹ã颿°ã«åŒæ°ãšããŠæ³šå ¥ããŸãã
Pytestãã£ã¯ã¹ãã£ã䜿çšããã¡ãªãã
ãã¹ãã¯ãŒã¯ãããŒã§pytestãã£ã¯ã¹ãã£ã掻çšããããšã§ãæ°å€ãã®ã¡ãªãããåŸãããŸãã
- ã³ãŒãã®åå©çšæ§ïŒãã£ã¯ã¹ãã£ã¯è€æ°ã®ãã¹ã颿°ã§åå©çšã§ããã³ãŒãã®éè€ãæé€ããäžè²«æ§ãä¿é²ããŸãã
- ãã¹ãã®ä¿å®æ§ïŒäŸåé¢ä¿ãžã®å€æŽã¯åäžã®å ŽæïŒãã£ã¯ã¹ãã£å®çŸ©ïŒã§è¡ããããããšã©ãŒã®ãªã¹ã¯ãæžãããä¿å®ãç°¡çŽ åããŸãã
- å¯èªæ§ã®åäžïŒãã£ã¯ã¹ãã£ã¯äŸåé¢ä¿ãæç€ºçã«å®£èšããããããã¹ã颿°ã®å¯èªæ§ãé«ããçŠç¹ãæç¢ºã«ããŸãã
- ã»ããã¢ãããšãã£ã¢ããŠã³ã®ç°¡çŽ åïŒãã£ã¯ã¹ãã£ã¯ã»ããã¢ãããšãã£ã¢ããŠã³ã®ããžãã¯ãèªåçã«åŠçãããã¹ã颿°ã«ãããå®åçãªã³ãŒããåæžããŸãã
- ãã©ã¡ãŒã¿åïŒãã£ã¯ã¹ãã£ã¯ãã©ã¡ãŒã¿åã§ããç°ãªãå ¥åããŒã¿ã»ããã§ãã¹ããå®è¡ã§ããŸãã
- äŸåé¢ä¿ã®ç®¡çïŒãã£ã¯ã¹ãã£ã¯äŸåé¢ä¿ã管çããããã®æç¢ºã§æç€ºçãªæ¹æ³ãæäŸãããã¹ãç°å¢ã®çè§£ãšå¶åŸ¡ã容æã«ããŸãã
åºæ¬çãªãã£ã¯ã¹ãã£ã®äŸ
ç°¡åãªäŸããå§ããŸããããããŒã¿ããŒã¹ãšããåããã颿°ããã¹ãããå¿ èŠããããšããŸããããŒã¿ããŒã¹æ¥ç¶ãäœæããã³æ§æããããã®ãã£ã¯ã¹ãã£ãå®çŸ©ã§ããŸãã
import pytest
import sqlite3
@pytest.fixture
def db_connection():
# Setup: create a database connection
conn = sqlite3.connect(':memory:') # Use an in-memory database for testing
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
name TEXT,
email TEXT
)
""")
conn.commit()
# Provide the connection object to the tests
yield conn
# Teardown: close the connection
conn.close()
def test_add_user(db_connection):
cursor = db_connection.cursor()
cursor.execute("INSERT INTO users (name, email) VALUES (?, ?)", ('John Doe', 'john.doe@example.com'))
db_connection.commit()
cursor.execute("SELECT * FROM users WHERE name = ?", ('John Doe',))
result = cursor.fetchone()
assert result is not None
assert result[1] == 'John Doe'
assert result[2] == 'john.doe@example.com'
ãã®äŸã§ã¯ïŒ
@pytest.fixture
ãã³ã¬ãŒã¿ã¯ãdb_connection
颿°ããã£ã¯ã¹ãã£ãšããŠããŒã¯ããŸãã- ãã£ã¯ã¹ãã£ã¯ã€ã³ã¡ã¢ãªSQLiteããŒã¿ããŒã¹æ¥ç¶ãäœæãã
users
ããŒãã«ãäœæããæ¥ç¶ãªããžã§ã¯ããè¿ããŸãã yield
ã¹ããŒãã¡ã³ãã¯ã»ããã¢ãããšãã£ã¢ããŠã³ã®ãã§ãŒãºãåé¢ããŸããyield
ããåã®ã³ãŒãã¯ãã¹ãã®åã«å®è¡ãããyield
ããåŸã®ã³ãŒãã¯ãã¹ãã®åŸã«å®è¡ãããŸããtest_add_user
颿°ã¯ãåŒæ°ãšããŠdb_connection
ãã£ã¯ã¹ãã£ãèŠæ±ããŸãã- Pytestã¯ãã¹ãã®å®è¡åã«
db_connection
ãã£ã¯ã¹ãã£ãèªåçã«å®è¡ããããŒã¿ããŒã¹æ¥ç¶ãªããžã§ã¯ãããã¹ã颿°ã«æäŸããŸãã - ãã¹ããå®äºããåŸãpytestã¯ãã£ã¯ã¹ãã£å ã®ãã£ã¢ããŠã³ã³ãŒããå®è¡ããããŒã¿ããŒã¹æ¥ç¶ãéããŸãã
ãã£ã¯ã¹ãã£ã¹ã³ãŒã
ãã£ã¯ã¹ãã£ã«ã¯ç°ãªãã¹ã³ãŒããããããããã¯ãã£ã¯ã¹ãã£ãã©ããããã®é »åºŠã§å®è¡ãããããæ±ºå®ããŸãã
- function (ããã©ã«ã)ïŒãã£ã¯ã¹ãã£ã¯ãã¹ã颿°ããšã«1åå®è¡ãããŸãã
- classïŒãã£ã¯ã¹ãã£ã¯ãã¹ãã¯ã©ã¹ããšã«1åå®è¡ãããŸãã
- moduleïŒãã£ã¯ã¹ãã£ã¯ã¢ãžã¥ãŒã«ããšã«1åå®è¡ãããŸãã
- sessionïŒãã£ã¯ã¹ãã£ã¯ãã¹ãã»ãã·ã§ã³ããšã«1åå®è¡ãããŸãã
scope
ãã©ã¡ãŒã¿ã䜿çšããŠãã£ã¯ã¹ãã£ã®ã¹ã³ãŒããæå®ã§ããŸãã
import pytest
@pytest.fixture(scope="module")
def module_fixture():
# Setup code (executed once per module)
print("Module setup")
yield
# Teardown code (executed once per module)
print("Module teardown")
def test_one(module_fixture):
print("Test one")
def test_two(module_fixture):
print("Test two")
ãã®äŸã§ã¯ãmodule_fixture
ã¯ããããããã€ã®ãã¹ã颿°ã«ãã£ãŠèŠæ±ãããŠããã¢ãžã¥ãŒã«ããšã«äžåºŠã ãå®è¡ãããŸãã
ãã£ã¯ã¹ãã£ã®ãã©ã¡ãŒã¿å
ãã£ã¯ã¹ãã£ã¯ãç°ãªãå ¥åããŒã¿ã»ããã§ãã¹ããå®è¡ããããã«ãã©ã¡ãŒã¿åã§ããŸããããã¯ãç°ãªãæ§æãã·ããªãªã§åãã³ãŒãããã¹ãããå Žåã«åœ¹ç«ã¡ãŸãã
import pytest
@pytest.fixture(params=[1, 2, 3])
def number(request):
return request.param
def test_number(number):
assert number > 0
ãã®äŸã§ã¯ãnumber
ãã£ã¯ã¹ãã£ã¯å€1ã2ã3ã§ãã©ã¡ãŒã¿åãããŠããŸããtest_number
颿°ã¯ãnumber
ãã£ã¯ã¹ãã£ã®åå€ã«å¯ŸããŠ1åãã€ãèš3åå®è¡ãããŸãã
pytest.mark.parametrize
ãçŽæ¥äœ¿çšããŠãã¹ã颿°ããã©ã¡ãŒã¿åããããšãã§ããŸãã
import pytest
@pytest.mark.parametrize("number", [1, 2, 3])
def test_number(number):
assert number > 0
ããã¯ãã©ã¡ãŒã¿åããããã£ã¯ã¹ãã£ã䜿çšããã®ãšåãçµæãéæããŸãããåçŽãªã±ãŒã¹ã§ã¯ãã䟿å©ã§ããããšããããããŸãã
`request`ãªããžã§ã¯ãã®äœ¿çš
ãã£ã¯ã¹ãã£é¢æ°ã®åŒæ°ãšããŠå©çšã§ãã`request`ãªããžã§ã¯ãã¯ããã£ã¯ã¹ãã£ãèŠæ±ããŠãããã¹ã颿°ã«é¢ããæ§ã ãªã³ã³ããã¹ãæ å ±ãžã®ã¢ã¯ã»ã¹ãæäŸããŸããããã¯`FixtureRequest`ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã§ããããã£ã¯ã¹ãã£ãããåçã§ãæ§ã ãªãã¹ãã·ããªãªã«é©å¿ã§ããããã«ããŸãã
`request`ãªããžã§ã¯ãã®äžè¬çãªäœ¿çšäŸã¯æ¬¡ã®ãšããã§ãã
- ãã¹ã颿°åãžã®ã¢ã¯ã»ã¹ïŒ
request.function.__name__
ã¯ããã£ã¯ã¹ãã£ã䜿çšããŠãããã¹ã颿°ã®ååãæäŸããŸãã - ã¢ãžã¥ãŒã«ãšã¯ã©ã¹æ
å ±ãžã®ã¢ã¯ã»ã¹ïŒãã¹ã颿°ãå«ãã¢ãžã¥ãŒã«ãšã¯ã©ã¹ã«ã¯ããããã
request.module
ãšrequest.cls
ã䜿çšããŠã¢ã¯ã»ã¹ã§ããŸãã - ãã£ã¯ã¹ãã£ãã©ã¡ãŒã¿ãžã®ã¢ã¯ã»ã¹ïŒãã©ã¡ãŒã¿åããããã£ã¯ã¹ãã£ã䜿çšããå Žåã
request.param
ã§çŸåšã®ãã©ã¡ãŒã¿å€ã«ã¢ã¯ã»ã¹ã§ããŸãã - ã³ãã³ãã©ã€ã³ãªãã·ã§ã³ãžã®ã¢ã¯ã»ã¹ïŒ
request.config.getoption()
ã䜿çšããŠpytestã«æž¡ãããã³ãã³ãã©ã€ã³ãªãã·ã§ã³ã«ã¢ã¯ã»ã¹ã§ããŸããããã¯ããŠãŒã¶ãŒæå®ã®èšå®ã«åºã¥ããŠãã£ã¯ã¹ãã£ãæ§æããã®ã«åœ¹ç«ã¡ãŸãã - ãã¡ã€ãã©ã€ã¶ã®è¿œå ïŒ
request.addfinalizer(finalizer_function)
ã䜿çšãããšããã¹ããæåããã倱æãããã«é¢ãããããã¹ã颿°ãå®äºããåŸã«å®è¡ããã颿°ãç»é²ã§ããŸããããã¯ãåžžã«å®è¡ããå¿ èŠãããã¯ãªãŒã³ã¢ããã¿ã¹ã¯ã«åœ¹ç«ã¡ãŸãã
äŸïŒ
import pytest
@pytest.fixture(scope="function")
def log_file(request):
test_name = request.function.__name__
filename = f"log_{test_name}.txt"
file = open(filename, "w")
def finalizer():
file.close()
print(f"\nClosed log file: {filename}")
request.addfinalizer(finalizer)
return file
def test_with_logging(log_file):
log_file.write("This is a test log message\n")
assert True
ãã®äŸã§ã¯ã`log_file`ãã£ã¯ã¹ãã£ã¯ãã¹ã颿°åã«ç¹æã®ãã°ãã¡ã€ã«ãäœæããŸãã`finalizer`颿°ã¯ã`request.addfinalizer`ã䜿çšããŠã¯ãªãŒã³ã¢ãã颿°ãç»é²ããããšã§ããã¹ãå®äºåŸã«ãã°ãã¡ã€ã«ãéããããããšãä¿èšŒããŸãã
äžè¬çãªãã£ã¯ã¹ãã£ã®äœ¿çšäŸ
ãã£ã¯ã¹ãã£ã¯å€çšéã§ãããæ§ã ãªãã¹ãã·ããªãªã§äœ¿çšã§ããŸããäžè¬çãªäœ¿çšäŸãããã€ãã玹ä»ããŸãã
- ããŒã¿ããŒã¹æ¥ç¶ïŒä»¥åã®äŸã§ç€ºããããã«ããã£ã¯ã¹ãã£ã¯ããŒã¿ããŒã¹æ¥ç¶ã®äœæãšç®¡çã«äœ¿çšã§ããŸãã
- APIã¯ã©ã€ã¢ã³ãïŒãã£ã¯ã¹ãã£ã¯APIã¯ã©ã€ã¢ã³ããäœæããã³æ§æããå€éšãµãŒãã¹ãšå¯Ÿè©±ããããã®äžè²«ããã€ã³ã¿ãŒãã§ãŒã¹ãæäŸã§ããŸããäŸãã°ãã°ããŒãã«ãªEã³ããŒã¹ãã©ãããã©ãŒã ããã¹ãããéãç°ãªãå°åã®APIãšã³ããã€ã³ãïŒäŸ: `api_client_us()`ã`api_client_eu()`ã`api_client_asia()`ïŒçšã®ãã£ã¯ã¹ãã£ãæã€ããšãã§ããŸãã
- æ§æèšå®ïŒãã£ã¯ã¹ãã£ã¯æ§æèšå®ãããŒãããŠæäŸããããšãã§ãããã¹ããç°ãªãæ§æã§å®è¡ããããšãå¯èœã«ããŸããäŸãã°ããã£ã¯ã¹ãã£ã¯ç°å¢ïŒéçºããã¹ããæ¬çªïŒã«åºã¥ããŠæ§æèšå®ãããŒãããããšãã§ããŸãã
- ã¢ãã¯ãªããžã§ã¯ãïŒãã£ã¯ã¹ãã£ã¯ã¢ãã¯ãªããžã§ã¯ãããã¹ãããã«ãäœæããåã ã®ã³ãŒããŠããããåé¢ããŠãã¹ãããããšãå¯èœã«ããŸãã
- äžæãã¡ã€ã«ïŒãã£ã¯ã¹ãã£ã¯äžæãã¡ã€ã«ããã£ã¬ã¯ããªãäœæãããã¡ã€ã«ããŒã¹ã®ãã¹ãã«ã¯ãªãŒã³ã§åé¢ãããç°å¢ãæäŸã§ããŸããç»åãã¡ã€ã«ãåŠçãã颿°ããã¹ãããããšãèããŠã¿ãŠãã ããããã£ã¯ã¹ãã£ã¯ããã¹ãã䜿çšããããã®ç°ãªãããããã£ãæã€ãµã³ãã«ç»åãã¡ã€ã«ïŒäŸ: JPEGãPNGãGIFïŒã®ã»ãããäœæã§ããŸãã
- ãŠãŒã¶ãŒèªèšŒïŒãã£ã¯ã¹ãã£ã¯ããŠã§ãã¢ããªã±ãŒã·ã§ã³ãAPIã®ãã¹ãã«ããããŠãŒã¶ãŒèªèšŒãåŠçã§ããŸãããã£ã¯ã¹ãã£ã¯ããŠãŒã¶ãŒã¢ã«ãŠã³ããäœæãããã®åŸã®ãã¹ãã§äœ¿çšããããã®èªèšŒããŒã¯ã³ãååŸã§ããŸããå€èšèªã¢ããªã±ãŒã·ã§ã³ããã¹ãããå Žåããã£ã¯ã¹ãã£ã¯ç°ãªãèšèªèšå®ãæã€èªèšŒæžã¿ãŠãŒã¶ãŒãäœæããé©åãªããŒã«ã©ã€ãŒãŒã·ã§ã³ãä¿èšŒã§ããŸãã
é«åºŠãªãã£ã¯ã¹ãã£æè¡
Pytestã¯ããã¹ãæ©èœã匷åããããã®ããã€ãã®é«åºŠãªãã£ã¯ã¹ãã£æè¡ãæäŸããŠããŸãã
- Fixture AutouseïŒ
autouse=True
ãã©ã¡ãŒã¿ã䜿çšããŠãã¢ãžã¥ãŒã«ãŸãã¯ã»ãã·ã§ã³å ã®ãã¹ãŠã®ãã¹ã颿°ã«ãã£ã¯ã¹ãã£ãèªåçã«é©çšã§ããŸããæé»çãªäŸåé¢ä¿ã¯ãã¹ããçè§£ãã«ããããå¯èœæ§ããããããæ³šæããŠäœ¿çšããŠãã ããã - ãã£ã¯ã¹ãã£åå空éïŒãã£ã¯ã¹ãã£ã¯åå空éã§å®çŸ©ãããååã®è¡çªãåé¿ãããã£ã¯ã¹ãã£ãè«ççãªã°ã«ãŒãã«æŽçããããã«äœ¿çšã§ããŸãã
- Conftest.pyã§ã®ãã£ã¯ã¹ãã£ã®äœ¿çšïŒ
conftest.py
ã§å®çŸ©ããããã£ã¯ã¹ãã£ã¯ãåããã£ã¬ã¯ããªãšãã®ãµããã£ã¬ã¯ããªå ã®ãã¹ãŠã®ãã¹ã颿°ã§èªåçã«å©çšå¯èœã§ããããã¯ããã䜿çšããããã£ã¯ã¹ãã£ãå®çŸ©ããã®ã«é©ããå Žæã§ãã - ãããžã§ã¯ãéã§ã®ãã£ã¯ã¹ãã£ã®å ±æïŒè€æ°ã®ãããžã§ã¯ãéã§å ±æã§ããåå©çšå¯èœãªãã£ã¯ã¹ãã£ã©ã€ãã©ãªãäœæã§ããŸããããã«ãããã³ãŒãã®åå©çšãšäžè²«æ§ãä¿é²ãããŸããåãããŒã¿ããŒã¹ãšããåãããè€æ°ã®ã¢ããªã±ãŒã·ã§ã³éã§å©çšã§ãããäžè¬çãªããŒã¿ããŒã¹ãã£ã¯ã¹ãã£ã®ã©ã€ãã©ãªãäœæããããšãæ€èšããŠãã ããã
äŸïŒãã£ã¯ã¹ãã£ã䜿ã£ãAPIãã¹ã
æ¶ç©ºã®äŸãçšããŠããã£ã¯ã¹ãã£ã䜿ã£ãAPIãã¹ãã説æããŸããããã°ããŒãã«ãªEã³ããŒã¹ãã©ãããã©ãŒã ã®APIããã¹ãããŠãããšä»®å®ããŸãã
import pytest
import requests
BASE_URL = "https://api.example.com"
@pytest.fixture
def api_client():
session = requests.Session()
session.headers.update({"Content-Type": "application/json"})
return session
@pytest.fixture
def product_data():
return {
"name": "Global Product",
"description": "A product available worldwide",
"price": 99.99,
"currency": "USD",
"available_countries": ["US", "EU", "Asia"]
}
def test_create_product(api_client, product_data):
response = api_client.post(f"{BASE_URL}/products", json=product_data)
assert response.status_code == 201
data = response.json()
assert data["name"] == "Global Product"
def test_get_product(api_client, product_data):
# First, create the product (assuming test_create_product works)
response = api_client.post(f"{BASE_URL}/products", json=product_data)
product_id = response.json()["id"]
# Now, get the product
response = api_client.get(f"{BASE_URL}/products/{product_id}")
assert response.status_code == 200
data = response.json()
assert data["name"] == "Global Product"
ãã®äŸã§ã¯ïŒ
api_client
ãã£ã¯ã¹ãã£ã¯ãããã©ã«ãã®ã³ã³ãã³ãã¿ã€ããæã€åå©çšå¯èœãªãªã¯ãšã¹ãã»ãã·ã§ã³ãäœæããŸããproduct_data
ãã£ã¯ã¹ãã£ã¯ã補åäœæçšã®ãµã³ãã«è£œåãã€ããŒããæäŸããŸãã- ãã¹ãã¯ãããã®ãã£ã¯ã¹ãã£ã䜿çšããŠè£œåãäœæããã³ååŸããã¯ãªãŒã³ã§äžè²«ããAPIã€ã³ã¿ã©ã¯ã·ã§ã³ãä¿èšŒããŸãã
ãã£ã¯ã¹ãã£äœ¿çšã®ãã¹ããã©ã¯ãã£ã¹
pytestãã£ã¯ã¹ãã£ã®ã¡ãªãããæå€§éã«åŒãåºãã«ã¯ã以äžã®ãã¹ããã©ã¯ãã£ã¹ã«åŸã£ãŠãã ããã
- ãã£ã¯ã¹ãã£ãå°ãããçŠç¹ãçµãïŒåãã£ã¯ã¹ãã£ã«ã¯æç¢ºã§å ·äœçãªç®çãæãããã¹ãã§ããããŸãã«å€ãã®ããšãè¡ãè€éããããã£ã¯ã¹ãã£ã®äœæã¯é¿ããŠãã ããã
- æå³ã®ãããã£ã¯ã¹ãã£åã䜿çšããïŒãã£ã¯ã¹ãã£ã®ç®çãæç¢ºã«ç€ºãèšè¿°çãªååãéžæããŠãã ããã
- å¯äœçšãé¿ããïŒãã£ã¯ã¹ãã£ã¯äž»ã«ãªãœãŒã¹ã®ã»ããã¢ãããšæäŸã«çŠç¹ãåœãŠãã¹ãã§ããä»ã®ãã¹ãã«æå³ããªãå¯äœçšãããããå¯èœæ§ã®ããã¢ã¯ã·ã§ã³ã®å®è¡ã¯é¿ããŠãã ããã
- ãã£ã¯ã¹ãã£ãææžåããïŒãã£ã¯ã¹ãã£ã«docstringsã远å ããŠããã®ç®çãšäœ¿çšæ³ã説æããŠãã ããã
- ãã£ã¯ã¹ãã£ã¹ã³ãŒããé©åã«äœ¿çšããïŒãã£ã¯ã¹ãã£ãã©ããããã®é »åºŠã§å®è¡ãããå¿ èŠããããã«åºã¥ããŠãé©åãªãã£ã¯ã¹ãã£ã¹ã³ãŒããéžæããŠãã ããã颿°ã¹ã³ãŒãã®ãã£ã¯ã¹ãã£ã§ååãªå Žåã«ãã»ãã·ã§ã³ã¹ã³ãŒãã®ãã£ã¯ã¹ãã£ã䜿çšããªãã§ãã ããã
- ãã¹ãã®åé¢ãèæ ®ããïŒãã£ã¯ã¹ãã£ããã¹ãéã«ååãªåé¢ãæäŸããå¹²æžãé²ãããšã確èªããŠãã ãããäŸãã°ããã¹ã颿°ãã¢ãžã¥ãŒã«ããšã«åå¥ã®ããŒã¿ããŒã¹ã䜿çšããŠãã ããã
çµè«
Pytestãã£ã¯ã¹ãã£ã¯ãå ç¢ã§ä¿å®ãããããå¹ççãªãã¹ããäœæããããã®åŒ·åãªããŒã«ã§ããäŸåæ§æ³šå ¥ã®ååãåãå ¥ãããã£ã¯ã¹ãã£ã®æè»æ§ã掻çšããããšã§ããœãããŠã§ã¢ã®å質ãšä¿¡é Œæ§ãå€§å¹ ã«åäžãããããšãã§ããŸããããŒã¿ããŒã¹æ¥ç¶ã®ç®¡çããã¢ãã¯ãªããžã§ã¯ãã®äœæãŸã§ããã£ã¯ã¹ãã£ã¯ãã¹ãã®ã»ããã¢ãããšãã£ã¢ããŠã³ãã¯ãªãŒã³ãã€æŽçãããæ¹æ³ã§åŠçããããèªã¿ãããçŠç¹ãçµã£ããã¹ã颿°ãžãšå°ããŸãã
ãã®èšäºã§æŠèª¬ãããŠãããã¹ããã©ã¯ãã£ã¹ã«åŸããå©çšå¯èœãªé«åºŠãªæè¡ãæ¢æ±ããããšã§ãpytestãã£ã¯ã¹ãã£ã®å¯èœæ§ãæå€§éã«åŒãåºãããã¹ãèœåãåäžãããããšãã§ããŸãã广çã§ä¿å®ãããããã¹ãç°å¢ãæ§ç¯ããããã«ãã³ãŒãã®åå©çšæ§ããã¹ãã®åé¢ãæç¢ºãªããã¥ã¡ã³ãäœæãåªå ããããšãå¿ããªãã§ãã ãããpytestãã£ã¯ã¹ãã£ããã¹ãã¯ãŒã¯ãããŒã«çµ±åãç¶ããã«ã€ããŠãããããé«å質ã®ãœãããŠã§ã¢ãæ§ç¯ããããã®äžå¯æ¬ ãªè³ç£ã§ããããšããããã§ãããã
æçµçã«ãpytestãã£ã¯ã¹ãã£ãç¿åŸããããšã¯ããœãããŠã§ã¢éçºããã»ã¹ãžã®æè³ã§ãããã³ãŒãããŒã¹ãžã®ä¿¡é Œãé«ããäžçäžã®ãŠãŒã¶ãŒã«ä¿¡é Œæ§ãšå ç¢æ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ãæäŸããããã¹ã ãŒãºãªéçã«ã€ãªããã§ãããã