Django test tools. Django >= 1.8
Наборы стандартных проверок для Django-форм
Пример теста tests/tests_for_project.py
GlobalTestMixIn
название поля | значение по умолчанию | описание | пример использования |
---|---|---|---|
all_unique | None | не использовать | |
choice_fields_values | {} | варианты значений для select, multiselect полей | choice_fields_values = {'field1': (value1, value2)} |
custom_error_messages | {} | Кастомные сообщения для определенных полей | custom_error_messages = {'field1': {message_type: u"Текст сообщения об ошибке."}} |
errors | [] | не переопределять (хранит значения ошибок для текущего теста) | |
files | [] | список файлов в текущем тесте (используется для закрытия файлов в конце каждого теста) | f = open(filename); self.fields.append(f) |
maxDiff | None | unittest.TestCase.maxDiff | |
non_field_error_key | '__all__' | поле, в котором возвращаются общие (не привязанные к конкретному полю) для формы ошибки | |
unique_fields | None | список уникальных полей | unique_fields = ('field1', ('field2', 'field3'), 'field4') |
unique_with_case | () | Список уникальных полей, для которых при проверке униклаьности учитывается регистр | unique_with_case = ('field1', ) |
FormTestMixIn(GlobalTestMixIn)
название поля | значение по умолчанию | описание | пример использования | включает проверки |
---|---|---|---|---|
obj | None | модель, для котороый выполняются все проверки. Является необходимым для запуска любого теста | ||
additional_params | {} | Дополнительные параметры для всех выполняющихся в тестах запросов | additional_params = {'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest'} | |
all_fields | default_params.keys() | Список всех полей, которые должны присутствовать на форме. | all_fields = ('field1', 'field2') | Проверка наличия полей на форме. Все поля заполнены (исключаются указанные в one_of_fields) |
all_fields_add | all_fields or default_params_add.keys() | Список всех полей, которые должны присутствовать на форме создания | all_fields_add = ('field1', 'field2') | |
all_fields_edit | all_fields or default_params_edit.keys() | Список всех полей, которые должны присутствовать на форме редактирования | all_fields_edit = ('field1', 'field2') | |
check_null | None | Включать ли проверки на NULL байт? | check_null = True | NULL байт в строковых полях и именах файлов |
check_null_file_positive | False, если установлено check_null | check_null_file_positive = True | NULL байт вырезается из имен файлов при сохранении | |
check_null_file_negative | True, если установлено check_null | check_null_file_negative = True | NULL байт в именах файлов. Ожидается сообщение об ошибке | |
check_null_str_positive | False, если установлено check_null | check_null_str_positive = True | NULL байт вырезается из строковых полей при сохранении | |
check_null_str_negative | True, если установлено check_null | check_null_str_negative = True | NULL байт в строковых полях. Ожидается сообщение об ошибке | |
choice_fields | [] | Список select полей | choice_fields = ('field1', 'field2') | Невалидные значения в полях (строка, число) |
choice_fields_add | choice_fields | Список select полей на форме создания | choice_fields_add = ('field1', 'field2') | |
choice_fields_edit | choice_fields | Список select полей на форме редактирования | choice_fields_edit = ('field1', 'field2') | |
choice_fields_with_value_in_error | [] | Список select полей, при вводе невалидного значения в которых сообщение об ошибке содержит введенное значение | choice_fields_with_value_in_error = ('field1', 'field2') | Невалидные значения в полях (строка, число) |
choice_fields_add_with_value_in_error | choice_fields_with_value_in_error | Список select полей на странице создания, при вводе невалидного значения в которых сообщение об ошибке содержит введенное значение | choice_fields_add_with_value_in_error = ('field1', 'field2') | |
choice_fields_edit_with_value_in_error | choice_fields_with_value_in_error | Список select полей на странице создания, при вводе невалидного значения в которых сообщение об ошибке содержит введенное значение | choice_fields_edit_with_value_in_error = ('field1', 'field2') | |
default_params | {} | Параметры по умолчанию, которые используются при создании/редактировании объекта | default_params = {'field1': value1, 'field2: value2} | |
default_params_add | default_params | Параметры по умолчанию, которые используются при создании объекта | default_params_add = {'field1': value1, 'field2: value2} | |
default_params_edit | default_params | Параметры по умолчанию, которые используются при редактировании объекта | default_params_edit = {'field1': value1, 'field2: value2} | |
date_fields | Ключи из default_params_add, default_params_edit, значения из all_fields_add, all_fields_edit, содержащие в названии 'date' | Названия полей, содержащих даты | date_fields = ('field1', 'field2') | |
datetime_fields | () | Названия полей, содержащих datetime | datetime_fields = ('field1', 'field2') | |
digital_fields | None | Названия полей, содержащих числа | digital_fields = ('field1', 'field2') | Позитивные: Максимальные, минимальные числовые значения. Негативные: Значения больше максимального, меньше минимального, строки |
digital_fields_add | digital_fields или default_params_add.keys(), для которых значения являются числами и не указаны в choice_fields_add, choice_fields_add_with_value_in_error | Названия полей на форме создания, содержащих числа | digital_fields_add = ('field1', 'field2') | |
digital_fields_edit | digital_fields или default_params_edit.keys(), для которых значения являются числами и не указаны в choice_fields_edit, choice_fields_edit_with_value_in_error | Названия полей на форме редактирования, содержащих числа | digital_fields_edit = ('field1', 'field2') | |
disabled_fields | None | Названия полей, выводящихся на форме, но недоступных для редактирования | disabled_fields = ('field1', 'field2') | Наличие полей на форме. Попытка передать значения в недоступных полях при сохранении |
disabled_fields_add | disabled_fields | Названия полей, выводящихся на форме создания, но недоступных для редактирования | disabled_fields_add = ('field1', 'field2') | |
disabled_fields_edit | disabled_fields | Названия полей, выводящихся на форме редактирования, но недоступных для редактирования | disabled_fields_edit = ('field1', 'field2') | |
email_fields | None | Названия полей для ввода email | email_fields = ('field1', 'field2') | Невалидные (строка, не являющаяся email'ом) значения в полях |
email_fields_add | email_fields или ключи из default_params_add, содержащие в названии 'email' | Названия полей для ввода email на форме создания | email_fields_add = ('field1', 'field2') | |
email_fields_edit | email_fields или ключи из default_params_edit, содержащие в названии 'email' | Названия полей для ввода email на форме редактирования | email_fields_edit = ('field1', 'field2') | |
exclude_from_check | [] | Названия полей, которые нужно исключить из проверки значений во всех тестах. Актуально, например, для полей, содержащих дату обновления объекта | exclude_from_check = ('field1', 'field2') | |
exclude_from_check_add | exclude_from_check | Названия полей, которые нужно исключить из проверки значений в тестах создания объекта | exclude_from_check_add = ('field1', 'field2') | |
exclude_from_check_edit | exclude_from_check | Названия полей, которые нужно исключить из проверки значений в тестах редактирования объекта | exclude_from_check_edit = ('field1', 'field2') | |
fields_helptext | None | Хелптекст в полях формы | fields_helptext = {'url': 'For example "http://example.com/test"'} |
Проверка наличия хелптекста в соответствующих полях формы |
fields_helptext_add | fields_helptext | Хелптекст в полях формы | fields_helptext_add = {'url': 'For example "http://example.com/test"'} |
Проверка наличия хелптекста в соответствующих полях формы создания |
fields_helptext_edit | fields_helptext | Хелптекст в полях формы | fields_helptext_edit = {'url': 'For example "http://example.com/test"'} |
Проверка наличия хелптекста в соответствующих полях формы редактирования |
file_fields_params | {} | Параметры файловых полей | file_fields_params = {'field_name': {'extensions': ('jpg', 'txt'), 'max_count': 3, 'one_max_size': '3Mb', 'wrong_extensions': ('rar', 'zip'), 'min_width': 200, 'min_height': 100, 'max_width': 300, 'max_height': 200}} |
|
file_fields_params_add | file_fields_params | Параметры файловых полей на форме создания | ||
file_fields_params_edit | file_fields_params | Параметры файловых полей на форме редактирования | ||
filter_params | None | Названия параметров для фильтрации списка объектов | filter_params = ('filter_name1', ('filter_name2', 'any_valid_value'), ) | Для тестов должен быть задан также url_list. Проверка с пустым, либо указанным в параметрах значением. Проверка со случайными значениями. В любом случае ожидается ответ 200 |
hidden_fields | None | Названия полей, выводящихся на форме в скрытом виде | hidden_fields = ('field1', 'field2') | Проверка наличия полей на форме |
hidden_fields_add | hidden_fields | Названия полей, выводящихся на форме создания в скрытом виде | hidden_fields_add = ('field1', 'field2') | |
hidden_fields_edit | hidden_fields | Названия полей, выводящихся на форме редактирования в скрытом виде | hidden_fields_edit = ('field1', 'field2') | |
int_fields | None | Названия полей, содержащих целые числа | int_fields = ('field1', 'field2') | см. digital_fields |
int_fields_add | int_fields или поля из digital_fields_add, для которых значения полей в default_params_add целочисленные | Названия полей на форме создания, содержащих целые числа | int_fields_add = ('field1', 'field2') | |
int_fields_edit | int_fields или поля из digital_fields_edit, для которых значения полей в default_params_edit целочисленные | Названия полей на форме редактирования, содержащих целые числа | int_fields_edit = ('field1', 'field2') | |
intervals | None | Существующие на форме временные интервалы | intervals = (('field1', field2'), ('field3, 'field4', '>=')) |
Окончание интервала больше, меньше, равно началу интервала |
max_blocks | None | Словарь количества строка в инлайн блоках | max_blocks = {'inline_block_1': 10} | Максимальное число строк, число строк больше максимального |
max_fields_length | {} | Словарь максимальной допустимой длины значений (для текстовых) или максимального допустимого значения (для числовых) в полях | max_fields_length = {'string_field_name': 100, 'digital_field_name': 99999} | Максимальные значения (для файловых полей в тестах редактирования сохранение и проверка выполняется дважды). Значения больше максимальных. |
min_fields_length | {} | Словарь минимальной допустимой длины значений (для текстовых) или минимального допустимого значения (для числовых) в полях | min_fields_length = {'string_field_name': 5, 'digital_field_name': -1} | Минимальные значения. Значения меньше минимальных |
multiselect_fields | None | Список multiselect полей | multiselect_fields = ('field1', 'field2') | Невалидные значения (число) |
multiselect_fields_add | multiselect_fields или default_params_add.keys() если значения для них являются списками | Список multiselect полей на форме создания | multiselect_fields_add = ('field1', 'field2') | |
multiselect_fields_edit | multiselect_fields или default_params_edit.keys() если значения для них являются списками | Список multiselect полей на форме редактирования | multiselect_fields_edit = ('field1', 'field2') | |
not_empty_fields | None | Обязательные для заполнения поля | not_empty_fields = ('field1', ('field2', 'field3')) | Заполнены только обязательные поля. Одно из обязательных полей (выполняется для всех) не заполнено. |
not_empty_fields_add | not_empty_fields или required_fields_add или default_params_add.keys() | Обязательные для заполнения поля на форме создания | not_empty_fields_add = ('field1', ('field2', 'field3')) | |
not_empty_fields_edit | not_empty_fields или required_fields_edit или default_params_edit.keys() | Обязательные для заполнения поля на форме редактирования | not_empty_fields_edit = ('field1', ('field2', 'field3')) | |
only_if_value | None | Поля, доступные для в зависимости от значения в другом поле | only_if_value = {'field1': {'field2': 'value1'}} | Указано значение, включающее поле. Указано другое значение, поле заполнено. |
one_of_fields | None | Список наборов полей, которые могут быть заполнены только отдельно друг от друга | one_of_fields = (('field1', 'field2'), ('field1', 'field3', 'field4')) | Заполнено одно из группы. Одновременно заполненные поля (если связанных полей больше трех, разбиваются также попарно) |
one_of_fields_add | one_of_fields | Список наборов полей, которые могут быть заполнены только отдельно друг от друга на форме создания | one_of_fields_add = (('field1', 'field2'), ('field1', 'field3', 'field4')) | |
one_of_fields_edit | one_of_fields | Список наборов полей, которые могут быть заполнены только отдельно друг от друга на форме редактирования | one_of_fields_edit = (('field1', 'field2'), ('field1', 'field3', 'field4')) | |
required_fields | None | Поля, которые должны присутствовать в запросе. | required_fields = ('field1', ('field2', 'field3')) | Заполнены только обязательные поля. Одно из обязательных полей (выполняется для всех) отсутствует |
required_fields_add | required_fields или default_params_add.keys() | Обязательные для заполнения поля на форме создания | required_fields_add = ('field1', ('field2', 'field3')) | |
required_fields_edit | required_fields или default_params_edit.keys() | Обязательные для заполнения поля на форме редактирования | required_fields_edit = ('field1', ('field2', 'field3')) | |
required_if | None | Поля, обязательные для заполнения, если заполнено другое поле | required_if = {'field1': 'field2', 'field2': ('field1', 'field3')} |
Заполнено основное, но не заполнено зависимое. Не заполнены основное и зависимое. Заполнено и основное, и зависимое. |
required_if_value | None | Поля, обязательные для заполнения в зависимости от значения в другом поле | required_if_value = {'field1': {'field2': 'value1'}} | Указано значение, включающее обязательность: поле заполнено, поле не заполнено. Указано другое значение: поле заполнено, поле не заполнено. |
required_if_add | required_if или {} | Поля, обязательные для заполнения, если заполнено другое поле на форме создания | required_if_add = {'field1': 'field2', 'field2': ('field1', 'field3')} |
|
required_if_edit | required_if или {} | Поля, обязательные для заполнения, если заполнено другое поле на форме редактирования | required_if_edit = {'field1': 'field2', 'field2': ('field1', 'field3')} |
|
status_code_error | 200 | Статус ответа при наличии ошибок | ||
status_code_not_exist | 404 | Статус ответа при манипуляциях с несуществующим объектом | ||
status_code_success_add | 200 | Статус ответа при успешном создании объекта | ||
status_code_success_edit | 200 | Статус ответа при успешном редактировании объекта | ||
unique_fields | None | список уникальных полей | unique_fields = ('field1', ('field2', 'field3'), 'field4') | Объект с такими полями уже существует. Для текстовых полей проверяется также в uppercase |
unique_fields_add | unique_fields (учитывается наличие в all_fields_add) | Cписок уникальных полей на форме создания | unique_fields_add = ('field1', ('field2', 'field3'), 'field4') | |
unique_fields_edit | unique_fields (учитывается наличие в all_fields_edit) | Cписок уникальных полей на форме редактирования | unique_fields_edit = ('field1', ('field2', 'field3'), 'field4') | |
url_list | URL, на котором находится список объектов, например, в админке. Включает все тесты, связанные со списком | url_list = 'modelname:url_name' или url_list = '/path/to/list/' | ||
with_captcha | Наличие поля 'captcha' в all_fields или в all_fields_add или в all_fields_edit | Используется ли капча на форме. Если True, во всех тестах отправляемые параметры дополняются полями капчи |
file_fields_params
название поля | описание | включает проверки |
---|---|---|
extensions | разрешенные расширения | Все валидные расширения. Невалидные расширения. |
wrong_extensions | дополнительные невалидные расширения | Добавляет значения для проверки в тесте невалидных расширений |
max_count | максимальное количество файлов (для полей с множественным выбором файлов) | Максимальное число файлов. Число файлов больше максимального |
one_max_size | максимальный размер файла (одного файла для полей с множественным выбором файлов) | Максимальный размер файла. Размер файла больше максимального |
min_width | минимальная ширина изображения | Изображение с минимальной шириной. Изображение с шириной меньше минимальной |
min_height | минимальная высота изображения | Изображение с минимальной высотой. Изображение с высотой меньше минимальной |
max_width | максимальная ширина изображения | Изображение с максимальной шириной. Изображение с шириной меньше максимальной |
max_height | максимальная высота изображения | Изображение с максимальной высотой. Изображение с высотой меньше максимальной |
custom_error_messages (То же используется в settings.ERROR_MESSAGES)
название | описание |
---|---|
required |
|
without_required | Отсутствует обязательное поле |
empty_required | Не заполнено обязательное поле |
max_length |
|
max_length_digital | Превышено максимальное значение в числовом поле |
max_length_file | Превышена максимальная длина имени файла |
min_length |
|
min_length_digital | Числовое значение меньше минимального |
wrong_value | В селект/мультиселект поле указано невалидное значение |
wrong_value_int | В целочисленном поле указано не целое число |
wrong_value_digital | В числовом поле указано не число |
wrong_value_email | В поле адреса электронной почты указано невалидное значение |
unique | Объект с указанными уникальными параметрами уже существует |
delete_not_exists | Удаляемый объект не существует |
recovery_not_exists | Восстанавливаемый из корзины объект не существует |
empty_file | Пустой файл |
max_count_file | В поле со множественной загрузкой загружено больше допустимого количества файлов |
max_size_file | Превышен максимальный размер файла |
max_sum_size_file | В поле со множественной загрузкой файлов превышен допустимый суммарный размер файлов |
wrong_extension | Загружен файл с недопустимым расширением |
min_dimensions | Размеры загруженного изображения меньше, чем минимальные допустимые |
one_of | Поля, которые могут быть заполнены только по отдельности, заполнены вместе |
max_block_count | Превышено максимальное число инлайн-полей в блоке |
not_exist | Объект не существует (используется для проверки message в тестах редактирования и удаления) |
FormAddTestMixIn(FormTestMixIn)
название поля | значение по умолчанию | описание | пример использования |
---|---|---|---|
url_add | '' | URL, по которому добавляются объекты. Включает все тесты на добавление | url_add = 'modelname:url_name_add' или url_add = '/path/to/add/' |
FormEditTestMixIn(FormTestMixIn)
название поля | значение по умолчанию | описание | пример использования |
---|---|---|---|
second_save_available | True | Доступно ли повторное сохранение объекта при редактировании. Позволяет выключить проверки повторного сохранения, если после редактирования объект меняет статус или по другим причинам становится нередактируемым | second_save_available = False |
url_edit | '' | URL, по которому редактируются объекты. Включает все тесты на редактирование | url_edit = 'modelname:url_name_change' или url_edit = '/path/to/edit/1/' (в этом случае по умолчанию для редактирования будет браться объект с pk=1) |
FormDeleteTestMixIn(FormTestMixIn)
название поля | значение по умолчанию | описание | пример использования |
---|---|---|---|
url_delete | '' | URL, по которому удаляются объекты | url_delete = 'modelname:url_name_delete' или url_delete = '/path/to/delete/1/' |
FormRemoveTestMixIn(FormTestMixIn)
Тесты для объектов, удаление которых происходит в корзину
название поля | значение по умолчанию | описание | пример использования |
---|---|---|---|
url_delete | '' | URL, по которому удаляются объекты | url_delete = 'modelname:url_name_remove' или url_delete = '/path/to/remove/1/' |
url_recovery | '' | URL, по которому выполняется восстановление объекта | url_recovery = 'modelname:url_name_recovery' или url_recovery = '/path/to/recovery/1/' |
url_edit_in_trash | '' | URL, по которому открывается страница редактирования объекта в корзине | url_edit_in_trash = 'modelname:url_name_trash_edit' или url_edit_in_trash = '/path/to/trash/edit/1/' |
ChangePasswordMixIn(GlobalTestMixIn, LoginMixIn)
Тесты смены пароля пользователя
название поля | значение по умолчанию | описание | пример использования |
---|---|---|---|
current_password | 'qwerty' | Пароль редактируемого пользователя | current_password = 'qwerty' |
field_old_password | None | Поле для ввода старого пароля | field_old_password = 'old_password' |
field_password | None | Поле для ввода нового пароля | field_password = 'password1' |
field_password_repeat | None | Поле для ввода подтверждения нового пароля | field_password_repeat = 'password2' |
password_max_length | 128 | Максимальная допустимая длина пароля | password_max_length = 128 |
password_min_length | 6 | Минимальная допустимая длина пароля | password_min_length = 6 |
password_params | default_params или {field_old_password: current_password, field_password: some_new_value, field_password_repeat: some_new_value} | Параметры по умолчанию, которые используются для смены пароля | password_params = {'password1': 'qwe123', 'password2': 'qwe123'} |
obj | None | Модель пользователя | obj = User |
password_positive_values | [get_randname(10, 'w') + str(randint(0, 9)), str(randint(0, 9)) + get_randname(10, 'w'), get_randname(10, 'w').upper() + str(randint(0, 9)), ] | Допустимые значения для пароля | password_positive_values = ['qwe+', 'qwe*', 'QwE1'] |
password_similar_fields | None | Поля в модели пользователя, на значения которых не должен быть похож новый пароль | password_similar_fields = ('email', 'first_name') |
password_wrong_values | ['йцукенг', ] | Недопустимые значения для пароля (с допустимой длиной) | password_wrong_values = ['qwerty', 'йцукен', '123456'] |
url_change_password | '' | URL, по которому выполняется смена пароля. Если не содержит pk пользователя, задавать как /url/, иначе - можно задавать через urlname | url_change_password = 'admin:auth_user_password_change' |
LoginTestMixIn
Тесты логина пользователя
название поля | значение по умолчанию | описание | пример использования |
---|---|---|---|
blacklist_model | None | Модель объекта, в котором хранится информация о некорректных логинах с ip | blacklist_model = BlackList |
default_params | {self.field_username: self.username, self.field_password: self.password} | Параметры по умолчанию, которые используются для логина пользователя | default_params = {'username': '[email protected]', 'password': 'qwerty'} |
field_password | 'password' | Поле для ввода пароля | field_password = 'password' |
field_username | 'username' | Поле для ввода юзернейма | field_username = 'username' |
password | 'qwerty' | Пароль тестируемого пользователя | password = 'qwerty' |
passwords_for_check | [] | Пароли для проверки (будут проверены все) | passwords_for_check = ['qwerty', 'йцукен', '123456'] |
obj | None | Модель пользователя | obj = User |
username | None | Юзернейм тестируемого пользователя | username = '[email protected]' |
url_login | '' | URL для логина | url_login = 'admin:login' |
url_redirect_to | '' | URL на который выполняется редирект после логина | url_redirect_to = 'accounts:cabinet' |
urls_for_redirect | ['/', ] | Урлы, доступные пользователю (будет выбран один для проверки редиректа) | urls_for_redirect = ['accounts:profile',] |
Дополнительные настройки
Могут быть переопределены в django settings
Название | Значение по умолчанию | Описание |
---|---|---|
CAPTCHA_TYPE | 'simplecaptcha' | тип используемой в проекте капчи. 'supercaptcha' или 'simplecaptcha' |
COLORIZE_TESTS | False | раскраска вывода результатов тестов |
LOGIN_URL_NAME | 'login' | url, по которому выполняется логин |
LOGOUT_URL_NAME | 'auth_logout' | url, по которому выполняется логаут |
ERROR_MESSAGES | {} | переопределение сообщений об ошибках для всего проекта |
SIMPLE_TEST_EMAIL | False | генерация случайных значений адресов электронной почты исключая спецсимволы |
TEST_DATE_INPUT_FORMAT | settings.DATE_INPUT_FORMATS[0] | формат входных значений дат |
TEST_DATETIME_INPUT_FORMAT | settings.DATETIME_INPUT_FORMATS[0] | формат входных значений в datetime-полях |
TEST_TIME_INPUT_FORMAT | settings.TIME_INPUT_FORMATS[0] | формат входных значений времени |
TEST_GENERATE_REAL_SIZE_FILE | True | генерация файлов с указанным размером. При False для обработки файлов используется FakeSizeMemoryFileUploadHandler |
TEST_REAL_FORM_FIELDS | False | получение полей из ответа сервера из content, а не context |
TEST_SPEEDUP_EXPERIMENTAL | False | ускоряет выполнение тестов путем ранней обработки декораторов |
TEST_TRACEBACK_LIMIT | None | глубина трейсбека в результатах тестов |
TEST_USE_REAL_SETTINGS | False | если True, не переопределяются номера баз редиса, используются реальные пути для сохранения файлов |