Skip to content

pefremova/ttoolly

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ttoolly

Build Status

Coverage Status

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': 'test@test.test', '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 = 'test@test.test'
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, не переопределяются номера баз редиса, используются реальные пути для сохранения файлов