2012-03-06 138 views
2

通過實例化已知好的或已知錯誤的字典的表單對象,可以很容易地測試表單清理。可以通過採用這些相同的字典並使用測試客戶端來測試關聯的視圖邏輯。django表單提交的單元測試

但是,我們仍然留下了實際HTML表單元素的基本問題。如果我使用了錯誤的方法怎麼辦?或者我的行爲有錯字?或者我忘記了CSRF_Token?我如何編寫實際測試用戶可能遇到的行爲的單元測試?

我真的需要使用機械化嗎?

或者人們使用.get(url)解析表單元素並查看響應的html內容?有沒有更乾淨的方法來做到這一點?

+0

測試複雜行爲不是單元測試,而是集成測試。看到django-sane-testing項目,它封裝了幾乎所有可能的測試用例 – yedpodtrzitko 2012-03-06 22:58:18

+0

好吧,單獨測試「頁面上的表單,填充了與my_good_post相同的信息,創建一個等於my_good_post的對象」是一個單元,以我的想法。我希望能夠在我的單元測試套件中測試這個確切簡單的行爲。 – jMyles 2012-03-06 23:36:11

回答

1

這不僅與Django HTML測試有關,而且與您需要測試HTML行爲的任何其他應用程序有關。

您可以使用庫(如requests)使用不同的方法(GET/POST/etc)從瀏覽器的角度測試表單。

對於更多用戶交互測試,您可以使用Selenium但是我個人更喜歡Splinter。在分裂你實例化這個東西稱爲browser你可以用作一個真正的瀏覽器。然後在瀏覽器中可以填充文本框,按鈕等,然後測試行爲。

這裏是分裂的網站的代碼片段:

from splinter.browser import Browser 
browser = Browser() 
# Visit URL 
url = "http://www.google.com" 
browser.visit(url) 
browser.fill('q', "#cobrateam") 
# Find and click the 'search' button 
button = browser.find_by_css(".lsb") 
# Interact with elements 
button.click() 
if browser.is_text_present("did not match any documents"): 
    print "nobody likes us =(" 
else: 
    print "we're popular =)" 

在那裏的瀏覽器將打開,將導航到谷歌,填補在Q字段中,單擊搜索按鈕,然後進行測試的搜索結果。正如您所看到的,該庫使用起來非常簡單,您可以使用它進行相當複雜的測試。

+0

當然,但這確實是一個集成測試,因爲它測試了應用程序的實際實例服務器實例。在使用django測試環境(和測試數據庫)時如何做到這一點? – jMyles 2012-03-07 15:57:23

+0

並不真正關注你的問題,但如果你運行django測試服務器,那麼你可以使用這些庫來測試數據。這有幫助嗎? – miki725 2012-03-07 22:34:10