亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

動態運行時 PyTest 返回不正確的結果

動態運行時 PyTest 返回不正確的結果

慕桂英3389331 2023-09-12 16:44:53
我試圖在代碼提交到 Flask 應用程序時自動運行測試,但不知何故 PyTest 返回錯誤的結果。我嘗試禁用緩存、刪除緩存文件夾并刪除 .pyc 文件,但問題仍然存在。這是該問題的玩具再現。目錄結構:app.pyright/    main.py    test_solution1.pywrong/    main.py    test_solution2.pyapp.pyimport pytestfrom flask import Flaskapp = 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.pydef subtract(a, b):    return a - b右/test_solution1.pyimport maindef test_subtract():    assert main.subtract(5, 3) == 2錯誤/main.pydef subtract(a, b):    return b - a錯誤/test_solution2.pyimport maindef 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 服務器確實可以解決該問題。
查看完整描述

1 回答

?
鴻蒙傳說

TA貢獻1865條經驗 獲得超7個贊

這是因為在Python中,如果你嘗試導入同一個模塊兩次,Python將不會第二次在文件系統中搜索。它將使用第一次導入的模塊。您正嘗試導入兩次該模塊main。即使您認為這是兩個不同的模塊,從 Python 的角度來看,您也會嘗試導入同一個模塊兩次(因為它們都被命名為main)。您可以在文檔中閱讀有關模塊緩存系統的更多詳細信息。


根據您想要做什么,可能有很多解決方案。這是兩個:


解決方案1

您可以簡單地將主模塊的名稱更改為不同的名稱:


app.py

right/

    main1.py

    test_solution1.py

wrong/

    main2.py

    test_solution2.py

test_solution.py


import main1


def test_subtract():

    assert main1.subtract(5, 3) == 2

test_solution2.py


import main2


def test_subtract():

    assert main2.subtract(5, 3) == 2

解決方案2

您保留相同的文件名,但指定要導入的子模塊:


test_solution.py


from right import main


def test_subtract():

    assert main.subtract(5, 3) == 2

test_solution2.py


from wrong import main


def test_subtract():

    assert main.subtract(5, 3) == 2

這是可行的,因為 Python 在搜索模塊時會在本地目錄中查找,并且您在 和 文件夾所在的相同位置啟動app.pyPython 。rightwrong


查看完整回答
反對 回復 2023-09-12
  • 1 回答
  • 0 關注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號