2010-06-21 11 views

Respuesta

7

Buena pregunta. No he hecho esto por mí mismo, por lo que se espera que haya algunas respuestas mejores, pero es posible que desee ver en la validación HTML middleware:

“ en todos los escenarios posibles "puede ser demasiado pedir, dependiendo de su aplicación. Por ejemplo, si haces el siguiente Facebook y, por lo tanto, aceptas grandes cantidades de datos de usuario todos los días, algo llegará en algún momento que interrumpe la validez de una página en tu sitio.

Como los errores de validación no tienden a destruir la funcionalidad, podría ser un enfoque aceptable para verificar con algunos datos de prueba limitados, y luego reaccionar a los errores a medida que surgen. Creo que esto se conoce como stupidity-driven testing.

+0

Gracias :) Lo investigaré. He visto el enlace del fragmento antes, pero el resto es nuevo para mí (y me encanta el concepto de prueba impulsado por la estupidez: D). Sí, supongo que "todos los escenarios posibles" es pedir demasiado; solo el uso de páginas planas puede introducir un montón de HTML no válido en un sitio. Sin embargo, todavía tengo curiosidad de saber si hay soluciones en la veta nombre_aplicación de la prueba manage.py y cómo se compara la practicidad de ese enfoque vs el middleware. Aunque me encanta tu respuesta :) –

+0

Claro, doblala en tu proceso de prueba. No estoy seguro si alguien ha hecho el trabajo duro, pero supongo que necesita una forma de revisar sus URL.py' y generar tantas URL posibles para el sitio como sea posible. Luego puede usar [el cliente de prueba de Django incorporado] (http://docs.djangoproject.com/en/dev/topics/testing/#module-django.test.client) para buscar todas esas URL, y [algo más para validarlos] (http://stackoverflow.com/questions/35538/validate-xhtml-in-python). –

+0

Gracias, creo que sus dos respuestas son todo lo que necesito :) Ahora depende de mí probar lo que funciona mejor para mí y en qué situaciones :) –

2

Como alternativa, un enfoque para liar su propia para la validación de páginas en su sitio durante el proceso de prueba de la unidad habitual sería algo como esto:

  1. Ir a través de su urls.py y generar el mayor número de direcciones URL posibles para el sitio como se puede
  2. uso the built-in Django test client a buscar a cada una de esas direcciones URL
  3. validarlos alguna manera (Ver quizá Validate (X)HTML in Python)

No estoy seguro si alguien ha hecho algo del trabajo en esto es una forma reutilizable.

1

Una solución es hacer un script que represente todas las plantillas basadas en un diccionario de entrada de valores de prueba de variables.

La lógica principal para recuperar la lista de variables definidas en las plantillas es la siguiente:

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

La secuencia de comandos comprueba que las variables definidas en las plantillas están ya sea en la configuración del proyecto o en el dict siempre por el usuario como entrada de prueba.

/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 

Más detalles in this blog post.

Cuestiones relacionadas