2010-06-21 55 views

回答

7

好問題。我沒有做這個自己,所以希望會有一些更好的答案,但你可能想看看HTML驗證的中間件:

「在所有可能的情況下「可能太多要求,取決於您的應用程序。例如,如果您製作下一個Facebook,並因此每天都接受大量的用戶數據,則某些內容會突破網站頁面的有效性。由於驗證錯誤並不傾向於破壞功能,所以用一些有限的測試數據進行檢查可能是一種可接受的方法,然後在出現錯誤時做出反應。我相信這被稱爲stupidity-driven testing

+0

謝謝:)我會研究它。我以前看過片段鏈接,但其餘部分對我來說是新的(我喜歡愚蠢驅動的測試概念:D)。是的,我想「所有可能的場景」都是要求太多 - 只是使用flatpages會導致大量無效的HTML進入網站。但是,我仍然很好奇manageypy測試app_name中是否有任何解決方案,以及與中間件方法的實用性比較。儘管愛你的答案:) – 2010-06-22 11:27:10

+0

當然,把它摺疊到你的測試過程中。不確定是否有人完成了這項艱苦的工作,但我想你需要一種方法來瀏覽你的「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

+0

謝謝,我認爲你的兩個答案都是我需要的:)現在,我來試試什麼對我最適合以及在什麼情況下最適合:) – 2010-06-22 16:47:38

2

另外,輥你自己的方式在你平時的單元測試過程中驗證網站上的網頁會是這個樣子:

  1. 通過你的urls.py,併爲現場的許多可能的網址你可以
  2. 使用the built-in Django test client獲取每個這些網址
  3. 驗證它們以某種方式(見也許Validate (X)HTML in Python

不確定是否有人對此做過任何工作是可重用的方式。

1

一個解決方案是製作一個腳本,該腳本根據變量測試值的輸入字典呈現所有模板。

主要邏輯檢索的在模板中定義的變量列表如下:

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

相關問題