суббота, 16 июля 2011 г.

Чит-лист: Тестирование контролов

Очередной чит-лист, который может помочь при тестировании различного рода контролов. В этой статье приведен список типовых проверок для типовых контролов.

Контролы
Textbox
  • #Тексты (кроме раздела перенос строки)
  • #Security
  • Enter срабатывает, как Submit
Text area
  • #Тексты
  • #Security
  • Enter обрабатывается, как перенос строки
Password field
  • Большая часть за обработку отображения звездочек зависит от браузера (устройства)
  • Русские пароли
  • Длина пароля
  • Разнообразие символов в пароле
  • Совпадение 2-х паролей в форме регистрации
  • #Тексты
Email
  • !!!Найти!!!
Search field
  • Уточнить язык поисковых запросов?
    • И ИЛИ НЕ
    • Строгое соответствие
    • Поиск по подстроке (в результатах поиска должны быть документы, начинающиеся с или заканчивающиеся тем, что указал пользователь при поиске)
    • Какие символы игнорируются?
    • Wildcard и прочие regexp'ы (.*, *., ?, *)
    • Разделители слов
  • #Тексты
  • Ищется ли по цифрам. Являются ли цифры разделителями слов (не должны являться)
  • Ищутся ли слова с различными "сложными" символами вроде '+' (например, c++)
  • Ищется ли по словоформам (например, "систему" и "система" - поиск может считать за одно слово)
  • Поиск по нескольким словам, разбросанным по записи (то есть не идущим последовательно друг за другом)
  • Поиск с учетом порядка слов ( "Вася сказал" и "сказал Вася" - результат должен быть одинаковый)
  • Вести текст в другой кодировке (например, Óèêèïåäèÿ å ìíîãîåçè÷íà åëåêòðîííà)
  • Е и Ё
  • Вместо " может искаться quot
Числовое поле ввода
  • Корректное значение
  • Граничные значения
  • Значения выходящие за заданный диапазон
  • Пустое значение
  • Не должно принимать буквы и спецсимволы
  • 0
  • Отрицательные числа
  • Дробные числа с разным разделителем (0.0001 или 0,0001)
  • Числа с запятыми или пробелами (1,234,567 или 1 000 000)
  • Европейский стиль (1.234.567,89)
  • #Продвинутые числа
Ввод времени
Популярные виды контролов
  • HH:MM:SS
  • HH:MM
  • AM PM или 24h
Лучшая практика для реализации форм времени – минимум проверок и валидаций, максимум подсказок (хинтинга)
  • Корректное время (12:00:04)
  • 00:00:00
  • Пусто
  • Пусто после редактирования
  • Указано только одно из полей (например, указаны только часы 00:MM:SS)
  • Отрицательное время -12
  • Буквы
  • Пробелы
  • Copy-Paste некоторый текст
  • Больше или меньше цифр, чем нужно
  • Разное время между машинами
  • Различные временные зоны
  • Сброс времени вперед или назад
Ввод даты
  • Високосный день
  • Некорректная дата (30 февраля)
  • 29 февраля в не високосном году
  • Различные форматы (Июнь 5, 2001; 60/05/2001; 06/05/01; 05-05-01; 6/5/2001 12:34)
  • Перевод на летнее и зимнее время
  • Перевод даты вперед-назад
Интервал (дат или времени)
Иногда оба календаря должны разрешать ставить даты только ДО сегодняшнего дня включительно, а иногда даты могут быть любыми относительно сегодняшнего дня
Иногда требуется валидация на то, что дата «с» раньше, чем дата «по»:
  • если пользователь сперва указал дату «с», то даты для «по» должны ограничиваться датой «с» снизу (включительно)
  • если пользователь сперва указал дату «по», то даты для «с» должны ограничиваться дату «по» снизу (включительно)
  • если пользователь несколько раз редактирует даты, то они должны работать адекватно!
Каждый из контролов в отдельности должен обрабатываться, как отдельный контрол для ввода даты или времени.
Другие популярные проверки для интервалов времени и дат:
  • A < B
  • A = B
  • A > B
  • Только А
  • Только B
  • Ни А, ни B
Здесь А - это начальное время, B - конечное время интервала.

Файлы
  • Длинное имя файла (> 255 знаков)
  • Название с русскими буквами
  • Специальные символы в имени (пробел, * ? / \ | < > , . ( ) [ ] { } ; : ' " ! @ # $ % ^ &)
  • Не существующий
  • Уже существующий
  • Нет свободного места на диске
  • Доступность хранилища куда грузим файл
  • Минимальное место на диске
  • Защищенное на запись
  • Запись на несуществующий диск
  • Запись на заблокированный диск
  • Запись на удаленную машину
  • Запись на испорченный диск или флешку


Возможные значения для типов данных
Тексты
  • Длинные строки (255, 256, 257, 1000, 1024, 2000, 2048 или более знаков)
  • Символы со знаками ударения (àáâãäåçèéêëìíîðñòôõöö, etc.)
  • Общие разделители и специальные символы (" ' ` | / \ , ; : & < > ^ * ? Tab « »)
  • «Достаточно плохое» строковое значение: "[|]'~<!--@/*$%^&#*/()?>,.*/\
  • "Плохие символы" (♣ ☺ ♂)
  • Пустая строка
  • Пустая строка после редактирования
  • Пробелы
    • Одиночный пробел
    • Только пробелы
    • Строка, начинающаяся и заканчивающаяся с пробелов
    • Чаще всего лишние пробелы будут удаляться (стрипяться)
  • Конец строки (^M, \n, \r)
  • Действия (Cut, Copy, Paste, etc.)
  • Перенос строки
    • Один перенос строки
    • Только переносы строк
    • Начало и окончание текста с переноса строки
  • Чувствительность к регистру символов
  • Иероглифы
Продвинутые числа
  • Степени двойки
    • 32768 (2^15)
    • 32769 (2^15 + 1)
    • 65536 (2^16)
    • 65537 (2^16 + 1)
    • 2147483648 (2^31)
    • 2147483649 (2^31 + 1)
    • 4294967296 (2^32)
    • 4294967297 (2^32 + 1)
  • Научная запись чисел (1Е-16)
  • Вычисляемые выражения (2+3)
  • В шестнадцатеричной системе счисления (F0)


Security
SQL иньекции
  • Кавычка: '
  • ' OR '1'='1'
    • ' or '1'='1' -- '
    • ' or '1'='1' ({ '
    • ' or '1'='1' /* '
  •  !!!Найти!!!
XSS
  • http://ha.ckers.org/xss.html
  • <script>alert("xss!")</script>
  • <script>document.getElementByID("...").disabled=true</script>
  • <input onclick="javascript:alert('xss');">
  • <b onmouseover="alert('xss!')">Hello</b>
HTML инъекции
  • </body> или </body></body>
  • <textarea />
  • <input></input>
  • <form action="http://live.hh.ru"><input type="submit"></form>
  •  !!!Найти!!!
Корректный SQL запрос
  • DROP TABLE user;
  • SELECT * FROM blog WHERE code LIKE 'a%';
Корректный Ruby код, Сфинкс
  • !!!Найти!!!
Прочее
  • Комментарий <!--
  • "${code}";
  • '';!--"<CSS_Check>=&{()}
PS. Чит-лист выкладывается для нужд участников #QAforum2011.
Некоторые пункты будут дополнены в будущем.

13 комментариев:

  1. 1) Если тут написано, что "Очередной чит-лист", то дайте ссылку на предыдущий материал
    2) И интересно, эту инструкцию в жизни кто нибудь применяет (речь идет о ручном тестировании)?

    ОтветитьУдалить
  2. Леш, привет.
    В предыдущий раз я писал о тестировании страниц в целом: http://ap-test-team.blogspot.com/2011/05/gui.html . Этот чит-лист посвящен контролам. Чит-листы распространены при иследовательском тестированнии, когда тесты заранее не пишутся, и чтобы что-то не забыть и не пропустить при тестировании используют эти инструкции - чит-листы. В них собраны наиболее типичные проверки.

    ОтветитьУдалить
  3. Почему чит лист, а не чек лист? Первый раз встречаюсь с таким термином.

    ОтветитьУдалить
  4. Чек-листы составляются для конкретных проектов. Например, проверить ту или иную функцию на проекте.
    А этот список типовых проверок (чит-лист) независит от проекта, и может быть использован где угодно. Своего рода "читерство".
    В иностранной литературе подобные списки называют cheat sheets.

    ОтветитьУдалить
  5. "В иностранной литературе подобные списки называют cheat sheets"
    Не подскажете книгу(ги)?
    Спасибо

    ОтветитьУдалить
  6. Для тестов поля e-mail есть такие варианты:
    Варианты левой части адреса (до собачки):
    - прописные англ символы
    - заглавные англ символы
    - кириллические символы
    - спец. символы (! # $ % & ' * + - / = ? ^ _ ` { | } ~) - должны работать корерктно
    - пустая строка
    - цифры
    - двухбайтные символы
    - символ точки:
    1. в начале строки (некорректно)
    2. один раз в середине строки (корректно)
    3. несколько раз подрят (некорректно)
    4. несколько раз не подрят (некорректно)

    Варианты правой части адреса (после собачки):
    - прописные англ символы
    - заглавные англ символы
    - домен в несуществующей зоне
    - несуществующий домен
    - домен в зоне .РФ
    - формат записи типа: [IP]
    - пустая строка

    ОтветитьУдалить
    Ответы
    1. что за слово такое "по'дрят"? кто-то кого-то подрит,или в каком смысле?

      Удалить
  7. к предыдущему комментарию можно добавить для e-mail мы проверяем
    -допустимые в адресах электронной почты символы по RFC2822
    -точка перед @(-)
    -адрес без @(-)
    -адрес с двумя и более @ подряд (-)
    -адрес с двумя и более @ не подряд (-)
    -доменная часть адреса с несколькими точками подряд (-)
    - доменная часть адреса с пробелами
    - trim пробелов до\после\до и после адреса электронной почты
    -непечатные символы форматирования текста(перенос строки, табуляция...) до\после адреса.
    - минимальное\максимальное количество символов(но это уже для поля)

    ОтветитьУдалить
  8. А есть еще вот такой рфц:
    http://tools.ietf.org/html/rfc5322

    ОтветитьУдалить
  9. да, с выходом RFC5322 RFC2822 устарело, но не думаю, что изменения очень радикально затронули e-mail адреса.

    ОтветитьУдалить
  10. для числового ввода "001" нули по идее должны удаляться.

    ОтветитьУдалить
  11. Что значит # (н-р, #Тексты)?
    Заранее спасибо.

    ОтветитьУдалить