(自動在測試開始前創建一個臨時目錄,并在測試結束后刪除該目錄))
Fixture 的本質是把“測試環境的搭建和銷毀”從測試邏輯中解耦出來。 沒有它你的測試要么充滿重復代碼要么因為資源未清理/狀態污染而變得不可靠。它是 pytest 最核心的設計哲學之一。示例代碼importpytestpytest.fixturedeftmp_dir(tmpdir):# 使用內置的 tmpdir fixturereturntmpdir.mkdir(test_data)deftest_tmp_dir(tmp_dir):filetmp_dir.join(test.txt)file.write(Hello)assertfile.read()Hello參考文章pytest介紹python測試框架pytest.mark.parametrize、pytest.fixtures文章目錄**代碼解析**1. **導入 pytest 模塊**2. **定義自定義 fixturetmp_dir**3. **測試函數test_tmp_dir****調用流程****如何運行代碼****關鍵概念總結****擴展示例**這段代碼使用了pytest的內置tmpdirfixture 來創建臨時目錄并驗證其功能。下面是對代碼的逐行解釋和調用流程的說明代碼解析1.導入 pytest 模塊importpytest導入pytest模塊這是使用pytest測試框架的基礎。2.定義自定義 fixturetmp_dirpytest.fixturedeftmp_dir(tmpdir):# 使用內置的 tmpdir fixturereturntmpdir.mkdir(test_data)作用創建一個臨時目錄test_data并將其返回給測試函數使用。關鍵點tmpdir是pytest提供的內置 fixture它會自動在測試開始前創建一個臨時目錄并在測試結束后刪除該目錄。tmpdir.mkdir(test_data)在臨時目錄下創建一個名為test_data的子目錄。返回值tmp_dir是一個py.path.local對象表示test_data目錄。3.測試函數test_tmp_dirdeftest_tmp_dir(tmp_dir):filetmp_dir.join(test.txt)file.write(Hello)assertfile.read()Hello作用在臨時目錄test_data中創建一個文件test.txt寫入內容并驗證內容是否正確。關鍵點tmp_dir是上一步定義的 fixture它會自動傳入當前測試函數。tmp_dir.join(test.txt)在test_data目錄下創建一個文件test.txt。file.write(Hello)向文件寫入字符串Hello。assert file.read() Hello驗證文件內容是否匹配預期值。調用流程運行測試時pytest會自動發現以test_開頭的測試函數如test_tmp_dir。執行test_tmp_dir時pytest會先調用tmp_dirfixture。tmp_dirfixture 的執行pytest自動調用內置的tmpdirfixture無需手動調用。tmpdir.mkdir(test_data)創建臨時目錄test_data。返回test_data目錄對象給test_tmp_dir函數。測試函數的執行test_tmp_dir使用tmp_dir參數即test_data目錄。創建文件test.txt并寫入內容最后驗證內容是否正確。測試結束后的清理測試完成后pytest會自動刪除臨時目錄test_data及其所有子目錄和文件包括test.txt。如何運行代碼保存代碼到文件將代碼保存為test_tmp.py。運行測試在終端中執行以下命令pytest test_tmp.py-v-v表示輸出詳細的測試信息。如果測試通過你會看到類似test_tmp.py::test_tmp_dir PASSED的輸出。驗證臨時目錄的自動清理測試運行時pytest會生成一個臨時目錄路徑類似/tmp/pytest-of-username/.../test_data。測試結束后該目錄及其內容會被自動刪除無需手動清理。關鍵概念總結tmpdirfixture自動創建臨時目錄測試結束后自動刪除。可用于存放測試過程中需要的臨時文件。Fixture 的作用將測試的準備工作如創建臨時目錄與測試邏輯分離提高代碼的可讀性和可維護性。斷言驗證使用assert驗證文件內容是否符合預期確保測試的正確性。擴展示例如果你需要更復雜的臨時文件管理可以結合tmpdir_factory會話級臨時目錄或tempfile模塊。例如importpytestimporttempfilepytest.fixturedefsession_tmp_dir(tmpdir_factory):returntmpdir_factory.mktemp(session_data)deftest_session_tmp_dir(session_tmp_dir):filesession_tmp_dir.join(session_file.txt)file.write(Session Data)assertfile.read()Session Datatmpdir_factory的作用范圍是整個測試會話session適合需要跨多個測試共享的臨時目錄。