簡體   English   中英

你會如何在Python中模擬一個Web應用程序(用於測試Django項目)

[英]How would you mock a web app in Python (for testing a Django project)

我在Django中的應用程序從另一個應用程序的HTML中刪除和導入數據。 我測試了每個解析函數,並希望測試將通過其他應用程序的爬蟲。 在此之后,我想進行一些集成測試。 為了使測試盡可能容易運行,我想通過創建一個小的Web應用程序來模擬導入的Web應用程序,該應用程序提供一些硬編碼的HTML並具有我將要經歷的所有路徑。

編輯 :此外,我的模擬必須有一些小動態行為 - 例如,測試失敗和成功登錄。 所以我不能只提供靜態文件。

你會如何創建這樣的模擬應用程序? BaseHTTPServer子類化嗎? CGI? 使用一些框架(斜紋,使用Quixote)? 或者使用Django是合理的嗎? 這是我正在考慮使用的解決方案,但Django對於這樣的問題似乎太復雜了; OTOH,另一個框架對於這樣的小需求將是一個過於依賴的依賴,並且BaseHTTPServerBaseHTTPServer

第二次編輯 :我對嘲笑課程,請求等不感興趣。這不是我想要使用的方法,並且使用這種方法的建議不是我的答案(盡管我很感激善良的人們建議我, 直到現在 )。 如果是太難思考我的問題,只是忘了我談到的測試-你會如何粗暴地模擬一般使用Python的web應用程序?

我認為你在嘲笑錯誤的程度。 您的單元測試不應該完全依賴於外部Web服務器,即使您專門為測試運行它也是如此。 您應該將urllib2.Request對象(或者您正在使用的任何實際HTTP調用)替換為僅返回預先封裝數據的對象,包括無效登錄的相關響應。

我將使用wget -r (遞歸下載)下載參考頁面,然后使用Apache,Nginx或您用作網絡服務器的任何內容將下載的頁面作為靜態頁面提供。

除非您需要查看Web應用程序的動態更改...

聽起來你需要使用python mock 這允許您例如patch現有命令(可能正在調用外部URL)並將自己的測試數據添加到其中。

對於測試,我覺得你永遠不應該打外部服務。 您應該在自己的夾具中提供您期望從該服務獲得的數據,並測試您的響應處理程序正在執行其工作。

我試圖關注@Gagandeep Singh解決方案。 這似乎是最好的,在其他情況下可能是一個很好的解決方案,但它對我不起作用。

問題是我在另一個Django應用程序的測試目錄中有一個Django應用程序。 當我使用manage.py test myapp運行我的應用程序的manage.py test myapp ,使用的settings.py是整個項目中的一個,而不是我的模擬應用程序的文件。 通過管理API啟動Django並使用multiprocessing ,所以我打賭我的部分問題來自於如此復雜的交互。 也許我可以解決它,但我剛剛決定采用另一種策略。

我決定覆蓋BaseHTTPServer並得到一些可接受的結果。 這不是一件容易的事,但我成功開始了我的模擬應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM