Как я должен подтвердить HTML в шаблонах Django во время процесса разработки?
-
28-09-2019 - |
Вопрос
Я еще не использовал Django и Python, построенный в построении тестируемых возможностей, но я хочу, наконец начать ... и одну из самых очевидных вещей, которые я хотел бы продолжать проверять в течение всего процесса разработки, состоит в том, что все мои страницы проверяют во всех возможных сценариях.
Какой лучший способ сделать это?
Решение
Хороший вопрос. Я не делал этого сам, поэтому, надеюсь, будут некоторые лучшие ответы, но вы можете посмотреть на промежуточное программное обеспечение Validation HTML:
- http://djangosnippets.org/snippets/1312/
- http://lukeplant.me.uk/resources/djangoliDator/
- http://bstpierre.org/projects/htmlvalidatormiddleware/
«Во всех возможных сценариях» может быть слишком много, чтобы попросить, в зависимости от вашего приложения. Например, если вы делаете следующий Facebook, и, таким образом, принимая огромные суммы пользовательских данных каждый день, что-то придет в какой-то момент, который нарушает обоснованность страницы на вашем сайте.
Поскольку ошибки проверки не склонны уничтожать функциональность, может быть приемлемый подход для проверки с некоторыми ограничиваемыми тестовыми данными, затем реагируют на ошибки, когда они появляются. Я считаю, что это известно как Глуповое тестирование.
Другие советы
В качестве альтернативы, ваша собственная подход к проверке страниц на вашем сайте во время вашего обычного процесса тестирования подразделений будет выглядеть что-то подобное:
- Пройти через тебя
urls.py
и генерировать как можно больше возможных URL для сайта, как вы можете - Использовать Встроенный тестовый клиент Django Чтобы получить каждый из этих URL
- Подтвердить их как-то (см. Возможно Validate (x) HTML в Python)
Не уверен, что кто-нибудь сделает любую работу над этим, является многоразовым способом.
Одним из решений состоит в том, чтобы сделать сценарий, который отображает все шаблоны на основе входного словаря переменных тестовых значений.
Основная логика для получения списка переменных, определенных в шаблонах, заключается в следующем:
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'))
Затем скрипт проверяет, что переменные, определенные в шаблонах, либо в настройках проекта, либо в Dict, предоставляемых пользователем в качестве тестового ввода.
/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
Подробнее В этом блоге пост.