Flask 的测试该怎么组织 fixture?为什么要用应用工厂?共享一个应用会出什么问题?每个测试新建应用慢不慢?这篇用真实的 pytest 把每种写法的结果跑出来。
test_a.py::test_add_one PASSED [ 33%] test_a.py::test_starts_empty PASSED [ 66%] test_a.py::test_config_override PASSED [100%] ============================== 3 passed in 0.02s ===============================
上一篇:test_client() 与真实 HTTP 请求差异;下一篇:测试数据库事务。
SETUP F app
SETUP F client (fixtures used: app)
test_a.py::test_add_one (fixtures used: app, client) .
TEARDOWN F client
TEARDOWN F app test_a.py::test_add_one PASSED [ 33%]
test_a.py::test_starts_empty FAILED [ 66%]
test_a.py::test_config_override PASSED [100%]
> assert client.get("/items").get_json()["count"] == 0
E assert 1 == 0
test_a.py:4: AssertionError
FAILED test_a.py::test_starts_empty - assert 1 == 0
========================= 1 failed, 2 passed in 0.03s ==========================
(按文件里的顺序,test_add_one 先加了一行,test_starts_empty 看到了它留下的数据)test_a.py::test_starts_empty PASSED [ 50%] test_a.py::test_add_one PASSED [100%] ============================== 2 passed in 0.01s ===============================
函数级 app(每个测试新建) 200 passed in 0.48s | 总耗时(含启动 pytest)0.79 秒 会话级 app,每个测试清空数据 200 passed in 0.24s | 总耗时(含启动 pytest)0.56 秒