2010-06-21 2 views

Répondre

7

Bonne question. Je ne l'ai pas fait moi-même, alors je espère qu'il y aura des meilleures réponses, mais vous pourriez regarder dans le middleware de validation HTML:

« dans tous les scénarios possibles "pourrait être trop demander, en fonction de votre application. Par exemple, si vous faites le prochain Facebook, et acceptez donc d'énormes quantités de données d'utilisateur chaque jour, quelque chose viendra à un moment donné qui viole la validité d'une page sur votre site. Comme les erreurs de validation n'ont pas tendance à détruire les fonctionnalités, il peut être acceptable de vérifier certaines données de test limitées, puis de réagir aux erreurs lorsqu'elles surviennent. Je crois que ceci est connu comme stupidity-driven testing.

+0

Merci :) Je vais y jeter un coup d'oeil. J'ai vu le lien de l'extrait avant, mais le reste est nouveau pour moi (et j'aime le concept de test axé sur la stupidité: D). Oui, je suppose que "tous les scénarios possibles" demande trop - l'utilisation de flatpages peut introduire beaucoup de code HTML invalide dans un site. Cependant, je suis toujours curieux de savoir s'il y a des solutions dans la veine manage.py test app_name et comment la praticité de cette approche par rapport à l'approche middleware compare. Aimez votre réponse si :) –

+0

Bien sûr, pliez-le dans votre processus de test. Je ne sais pas si quelqu'un a fait le dur travail, mais je suppose que vous avez besoin d'un moyen de passer par vos urls.py' et générer autant d'URL possibles pour le site que vous le pouvez. Ensuite, vous pouvez utiliser [le client de test Django intégré] (http://docs.djangoproject.com/fr/dev/topics/testing/#module-django.test.client) pour récupérer toutes ces URL, et [quelque chose sinon pour les valider] (http://stackoverflow.com/questions/35538/validate-xhtml-in-python). –

+0

Merci, je pense que vos deux réponses sont tout ce dont j'ai besoin :) Maintenant c'est à moi d'essayer ce qui fonctionne le mieux pour moi et dans quelles situations :) –

2

Alternativement, une approche à rouler propre à la validation de pages sur votre site au cours de votre processus de test habituel unité ressemblerait à quelque chose comme ceci:

  1. Passez par votre urls.py et de générer autant d'URL possibles pour le site comme vous pouvez
  2. Utilisez the built-in Django test client pour aller chercher chacun de ces urls
  3. les valident en quelque sorte (voir peut-être Validate (X)HTML in Python)

Je ne sais pas si quelqu'un a fait un travail sur ce sujet est une façon réutilisable.

1

Une solution consiste à créer un script qui restitue tous les modèles en fonction d'un dictionnaire d'entrée de valeurs de test de variables.

La logique principale pour récupérer la liste des variables définies dans les modèles est la suivante:

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')) 

Le script vérifie ensuite que les variables définies dans les modèles sont soit dans les paramètres du projet ou dans le dict fourni par l'utilisateur comme entrée de test.

/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 

Plus de détails in this blog post.

Questions connexes