17

Django と Python の組み込みのテスト機能はまだ使用していませんが、ようやく始めたいと思っています...そして、開発プロセス全体でチェックしておきたい最も明白なことの 1 つは、すべてのページが検証されることです。考えられるすべてのシナリオで。

これを行う最善の方法は何ですか?

4

5 に答える 5

7

良い質問。私はこれを自分で行っていないので、より良い答えが得られることを願っていますが、HTML 検証ミドルウェアを調べることをお勧めします。

アプリによっては、「考えられるすべてのシナリオで」というのは多すぎるかもしれません。たとえば、次の Facebook を作成し、毎日膨大な量のユーザー データを受け入れている場合、ある時点で、サイトのページの有効性を損なう何かが発生します。

検証エラーによって機能が破壊されることはあまりないため、限られたテスト データでチェックし、エラーが発生した場合に対応することは、受け入れられるアプローチかもしれません。これは愚かさ主導のテストとして知られていると思います。

于 2010-06-21T17:06:38.763 に答える
2

または、通常の単体テスト プロセス中にサイトのページを検証する独自のアプローチは、次のようになります。

  1. あなたurls.pyを調べて、サイトの可能な限り多くの URL を生成します
  2. 組み込みの Django テスト クライアントを使用して、これらの URL をそれぞれフェッチします。
  3. 何らかの方法でそれらを検証します (おそらくValidate (X)HTML in Pythonを参照)

誰かがこれに関する作業を行ったかどうかはわかりませんが、これは再利用可能な方法です。

于 2010-06-22T15:47:13.667 に答える
2

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

詳細については、このブログ投稿を参照してください。

于 2015-04-19T13:42:11.617 に答える
0

Django Check HTML ミドルウェアは、HTML のタイプミスを検出できます。

https://github.com/guettli/django-check-html-middleware

于 2021-05-01T19:46:15.793 に答える