我還沒有使用Django和Python內置的測試功能,但是我想最終開始......在整個開發過程中,我希望保留的最明顯的事情之一是,我所有的頁面在所有可能的場景中驗證。我應該如何在開發過程中驗證Django模板中的HTML?
這樣做的最好方法是什麼?
我還沒有使用Django和Python內置的測試功能,但是我想最終開始......在整個開發過程中,我希望保留的最明顯的事情之一是,我所有的頁面在所有可能的場景中驗證。我應該如何在開發過程中驗證Django模板中的HTML?
這樣做的最好方法是什麼?
好問題。我沒有做這個自己,所以希望會有一些更好的答案,但你可能想看看HTML驗證的中間件:
「在所有可能的情況下「可能太多要求,取決於您的應用程序。例如,如果您製作下一個Facebook,並因此每天都接受大量的用戶數據,則某些內容會突破網站頁面的有效性。由於驗證錯誤並不傾向於破壞功能,所以用一些有限的測試數據進行檢查可能是一種可接受的方法,然後在出現錯誤時做出反應。我相信這被稱爲stupidity-driven testing。
另外,輥你自己的方式在你平時的單元測試過程中驗證網站上的網頁會是這個樣子:
urls.py
,併爲現場的許多可能的網址你可以不確定是否有人對此做過任何工作是可重用的方式。
一個解決方案是製作一個腳本,該腳本根據變量測試值的輸入字典呈現所有模板。
主要邏輯檢索的在模板中定義的變量列表如下:
from django.template.loader import get_template
def extract_required_vars(node):
if not hasattr(node, 'nodelist'):
return []
var_names = []
for child_node in node.nodelist:
if isinstance(child_node, VariableNode):
var_names.append(child_node.filter_expression.token)
elif isinstance(child_node, ForNode):
var_names.append(child_node.sequence.var.var)
elif isinstance(child_node, ExtendsNode):
template = get_template(child_node.parent_name.var)
var_names.extend(extract_required_vars(template))
elif isinstance(child_node, IncludeNode):
template = get_template(child_node.template.var)
var_names.extend(extract_required_vars(template))
var_names.extend(extract_required_vars(child_node))
return var_names
required_vars = extract_required_vars(get_template('index.html'))
然後,該腳本將檢查在模板中定義的變量要麼在項目設置,或在字典提供由用戶作爲測試輸入。
/path/to/project/templates/templates/allusers.html
-> ok: users, STATIC_URL
/path/to/project/templates/entrer-en-contact.html
-> ok: contactform, STATIC_URL
/path/to/project/templates/dest-summary.html
-> ok: STATIC_URL
-> missing: dest_username
更多詳細信息in this blog post。
謝謝:)我會研究它。我以前看過片段鏈接,但其餘部分對我來說是新的(我喜歡愚蠢驅動的測試概念:D)。是的,我想「所有可能的場景」都是要求太多 - 只是使用flatpages會導致大量無效的HTML進入網站。但是,我仍然很好奇manageypy測試app_name中是否有任何解決方案,以及與中間件方法的實用性比較。儘管愛你的答案:) – 2010-06-22 11:27:10
當然,把它摺疊到你的測試過程中。不確定是否有人完成了這項艱苦的工作,但我想你需要一種方法來瀏覽你的「urls」。py'併爲您的網站生成儘可能多的網址。然後你可以使用[內置的Django測試客戶端](http://docs.djangoproject.com/en/dev/topics/testing/#module-django.test.client)來獲取所有這些url,[something否則驗證他們](http://stackoverflow.com/questions/35538/validate-xhtml-in-python)。 – 2010-06-22 15:43:38
謝謝,我認爲你的兩個答案都是我需要的:)現在,我來試試什麼對我最適合以及在什麼情況下最適合:) – 2010-06-22 16:47:38