我试图在代码提交到 Flask 应用程序时自动运行测试,但不知何故 PyTest 返回错误的结果。我尝试禁用缓存、删除缓存文件夹并删除 .pyc 文件,但问题仍然存在。这是该问题的玩具再现。
目录结构:
app.py
right/
main.py
test_solution1.py
wrong/
main.py
test_solution2.py
app.py
import pytest
from flask import Flask
app = Flask(__name__)
@app.route("/")
def submit():
pytest.main(["right", "-p", "no:cacheprovider"])
pytest.main(["wrong", "-p", "no:cacheprovider"])
return "OK"
if __name__ == "__main__":
app.run("0.0.0.0")
右/main.py
def subtract(a, b):
return a - b
右/test_solution1.py
import main
def test_subtract():
assert main.subtract(5, 3) == 2
错误/main.py
def subtract(a, b):
return b - a
错误/test_solution2.py
import main
def test_subtract():
assert main.subtract(5, 3) == 2
如果我加载应用程序并localhost:5000在浏览器中访问,它会按预期触发每个目录中的测试,但两个结果是相同的。它说所有测试都通过了,尽管 的测试wrong应该失败。
如果我交换 Flask 应用程序中测试的触发顺序,那么两个项目的测试都会失败,即使第二个项目应该通过。
修改了submit()路线app.py(现在首先运行“错误”的项目)
@app.route("/", methods=["GET","POST"])
def submit():
pytest.main(["wrong", "-p", "no:cacheprovider"])
pytest.main(["right", "-p", "no:cacheprovider"])
return "OK"
现在,尽管“正确”的项目没有问题,但两项测试都显示失败。
如何确保 pytest 完全运行目录中的代码?我认为它以某种方式缓存结果,就好像名称main.py不冲突一样,它工作得很好。
在运行测试之间删除__pycache__类似的目录和文件没有帮助。在运行测试之间停止并重新加载 Flask 服务器确实可以解决该问题。
鸿蒙传说
相关分类