通過實例化已知好的或已知錯誤的字典的表單對象,可以很容易地測試表單清理。可以通過採用這些相同的字典並使用測試客戶端來測試關聯的視圖邏輯。django表單提交的單元測試
但是,我們仍然留下了實際HTML表單元素的基本問題。如果我使用了錯誤的方法怎麼辦?或者我的行爲有錯字?或者我忘記了CSRF_Token?我如何編寫實際測試用戶可能遇到的行爲的單元測試?
我真的需要使用機械化嗎?
或者人們使用.get(url)解析表單元素並查看響應的html內容?有沒有更乾淨的方法來做到這一點?
通過實例化已知好的或已知錯誤的字典的表單對象,可以很容易地測試表單清理。可以通過採用這些相同的字典並使用測試客戶端來測試關聯的視圖邏輯。django表單提交的單元測試
但是,我們仍然留下了實際HTML表單元素的基本問題。如果我使用了錯誤的方法怎麼辦?或者我的行爲有錯字?或者我忘記了CSRF_Token?我如何編寫實際測試用戶可能遇到的行爲的單元測試?
我真的需要使用機械化嗎?
或者人們使用.get(url)解析表單元素並查看響應的html內容?有沒有更乾淨的方法來做到這一點?
這不僅與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字段中,單擊搜索按鈕,然後進行測試的搜索結果。正如您所看到的,該庫使用起來非常簡單,您可以使用它進行相當複雜的測試。
測試複雜行爲不是單元測試,而是集成測試。看到django-sane-testing項目,它封裝了幾乎所有可能的測試用例 – yedpodtrzitko 2012-03-06 22:58:18
好吧,單獨測試「頁面上的表單,填充了與my_good_post相同的信息,創建一個等於my_good_post的對象」是一個單元,以我的想法。我希望能夠在我的單元測試套件中測試這個確切簡單的行爲。 – jMyles 2012-03-06 23:36:11