Как сделать фаззинг с Selenium

Я новичок в Selenium, а также Fuzz-тестирование. Я вижу, что Selenium IDE допускает только фиксированные тестовые случаи. Но тогда нечеткое тестирование кажется полезным.

Итак, что стоит за нечетким тестированием, какие тесты предлагает Selenium, это тестирование черного или белого ящика.

Любая помощь будет оценена.

2 ответа

Для краткого ответа:

  • Selenium в основном посвящен тестированию в "черном ящике", но вы также можете провести более белое тестирование и с Selenium.
  • Selenium RC дает вам гораздо больше свободы для проведения фазз-тестирования, чем Selenium IDE.

Подробный ответ см. Ниже:

В этой статье я постараюсь объяснить концепцию случайного тестирования вашего веб-приложения с использованием Selenium RC.

Как правило, методика " черного ящика", такая как Selenium, дает вам хорошую свободу

  • (1) Введите любое значение в определенное поле
  • (2) Выберите любое поле для проверки в определенной форме HTML
  • (3) Выберите любой порядок выполнения / шаг для проверки определенного набора полей.

В основном вы

  • используйте (1), чтобы протестировать определенное поле в вашей HTML-форме (вы выбрали правильную максимальную длину для поля), ваш JavaScript обрабатывает значение этого поля (например, переводит "t" в сегодняшнюю дату, превращает "+1" в завтрашнюю). дата), и ваша внутренняя база данных обрабатывает эту переменную (длина VARCHAR, преобразование числовой строки в числовое значение, ...).
  • используйте (2) для проверки ВСЕХ возможных полей
  • используйте (3) для проверки взаимодействия полей друг с другом: появляется ли предупреждение JavaScript, если поле имени пользователя не было введено до поля пароля, есть ли триггер базы данных (например, Oracle), "всплывающий" при определенных условиях не встретил

Обратите внимание, что тестирование ВСЕГО (все состояния вашей программы, построенные из возможных комбинаций всех переменных) невозможно даже теоретически (например: рассмотрите возможность тестирования вашей маленькой функции, используемой для анализа строки, тогда сколько возможных значений имеет строка?), Таким образом, в действительности, имея ограниченный ресурс (время, деньги, люди), вы хотите протестировать только "наиболее важные" пути выполнения вашего веб-приложения. Путь называется более "критическим", если он имеет больше свойств: (а) выполняется часто, (б) отклонение от спецификации приводит к серьезным потерям.

К сожалению, трудно понять, какие случаи выполнения являются критическими, если вы не записали все варианты использования своего приложения и не выбрали наиболее частые из них, что занимает очень много времени. Более того, даже некоторые ошибки в наименее выполненном сценарии использования могут вызвать много проблем, если это дыра в безопасности (например, кто-то крадет пароль всех клиентов из-за крошечной ошибки в обработке URL-адреса некоторой страницы PHP).

Вот почему вам нужно случайным образом сканировать пространство тестирования (т. Е. Пространство значений, используемое в этих сценариях использования) с надеждой выполнить что-то и отсканировать все. Это называется нечетким тестированием.

Используя Selenium RC, вы можете легко выполнить все фазы (1), (2) и (3): протестировать любое значение в любом поле на любом этапе выполнения, выполнив некоторое программирование на поддерживаемом языке, таком как Java, PHP, CSharp, Ruby, Perl Python.

Ниже приведены шаги для выполнения всех этих этапов (1), (2) и (3):

  • Создайте список ваших полей HTML, чтобы вы могли легко перебирать их. Если ваши HTML-поля недостаточно структурированы (традиционная причина), подумайте о добавлении нового атрибута, который содержит определенный идентификатор, например, selenium-id, к вашему HTML-элементу, чтобы (1) упростить формирование XPath, (2) ускорить разрешение XPath и (3) чтобы избежать проблем с переводом. При выборе значения для этого недавно добавленного селена-идентификатора вы можете свободно выполнять итерации при фаззировании, используя (a) использование последовательных чисел, (b) использование имен, образующих согласованность.
  • Создайте случайную переменную для управления шагом, скажем, rand_step
  • Создайте случайную переменную для управления полем, скажем, rand_field
  • В конце концов, создайте случайную переменную для управления значением, введенным в определенное поле, например, rand_value.
  • Теперь внутри вашего алгоритма фаззинга итерируйте сначала значения rand_step, затем при каждой такой итерации повторяйте rand_field, а затем, наконец, повторяйте rand_value.

Тем не менее, нечеткое тестирование помогает сканировать пространство значений вариантов использования всего приложения после ограниченного времени выполнения. Говорят, что " возникла чума новых уязвимостей, которые затронули популярные клиентские приложения, включая Microsoft Internet Explorer, Microsoft Word и Microsoft Excel; значительная часть этих уязвимостей была обнаружена с помощью фаззинга "

Но нечеткое тестирование не обходится без недостатка. Одним из них является способность воспроизводить контрольный пример с учетом всех этих случайностей. Но вы можете легко преодолеть это ограничение, выполнив одно из следующих действий:

  • Генерация тестовых примеров перед запуском в пакетный файл, который будет использоваться в течение определенного периода времени, и постепенное применение этого файла
  • Генерация тестовых случаев на лету, а также регистрация этих случаев
  • Ведение журнала только неудачных случаев.

Чтобы ответить больше о том, если Selenium черный или белый ящик.

Определения о черном и белом ящиках

  • Черный ящик: проверяет, доставляет ли один ящик (обычно все приложение) правильные выходные данные при подаче входных данных. Теоретически, ваше приложение не содержит ошибок, если проверены ВСЕ возможные пары ввода-вывода.
  • Белая коробка: проверяет поток управления источником. Теоретически, ваше приложение не содержит ошибок, если ВСЕ пути выполнения посещаются без проблем.

Но в реальной жизни вы не можете делать ВСЕ пары ввода-вывода или ВСЕ пути выполнения, потому что у вас всегда есть ограниченные ресурсы в

  • Время
  • Деньги
  • люди

С селеном: вы имитируете пользователя, вводя значение или совершая определенный щелчок по веб-приложению, и ждете, пока браузер даст вам желаемое поведение. Вы не знаете и не заботитесь о том, как на самом деле работает внутренняя функциональность веб-приложения. Вот почему типичное тестирование Selenium - это тестирование черного ящика

Другие вопросы по тегам