вторник, 19 ноября 2013 г.

Автоматизация нагрузочного тестирования при помощи инструмента Яндекс.Танк

В ходе тестирования некоторых продуктов компании Positive Technologies наша команда тестировщиков-автоматизаторов столкнулась с необходимостью проведения быстрых стресс-тестов для одного http веб-сервиса. Такие тесты должны были быть простыми и быстрыми в разработке, не требовательными к аппаратным ресурсам, должны давать значительную нагрузку однотипными http-запросами, предоставлять статистические данные для анализа системы под нагрузкой.

Для их реализации мы исследовали и опробовали некоторое количество инструментов, среди которых был и Apache JMeter, о котором было рассказано ранее, и даже сделанный нами самодельный инструмент LogSniper, написанный на Python, который выполнял реплей заранее подготовленных серверных логов с http-запросами на цель.

Использование JMeter-а мы отклонили из-за значительной сложности подготовки и проведения тестов, высоких требований к производительности нагрузочного стенда и довольно малых мощностей нагрузки при этом, хотя это и компенсировалось высокой информативностью показателей собираемой статистики. А LogSniper был отклонён из-за малой мощности генерируемой нагрузки и даже простота подготовки нагрузочных http-пакетов не могла стать большим преимуществом. Другие инструменты также были отклонены по тем или иным причинам.

В итоге мы с моим коллегой Олегом Каштановым остановились на инструменте Яндекс.Танк (yandex-tank), о котором узнали побывав на конференции YAC-2013 и пообщавшись со специалистами Яндекса на эту тему. Этот инструмент полностью отвечал всем нашим требованиям к простоте подготовки теста и к генерируемой нагрузке.

среда, 6 ноября 2013 г.

Pairwise testing: добиваемся оптимального покрытия различных тестовых комбинаций

В тестировании программ очень часто встаёт задача проверки комбинаций входных параметров, от которых зависит итоговый результат программы. Типичный пример - диалоговое окно печати файла: оно имеет множество настроек, полей ввода, различных взаимозависимых опций, от включения или выключения которых итоговый результат может сильно различаться. Если бы даже все опции имели только два режима работы (вкл/выкл), а всего опций было бы 10, то это уже даёт 210 = 1024 их комбинаций.

Конечно, чтобы убедиться в работоспособности программы, в идеале нужно проверить все тестовые наборы, состоящие из всех возможных комбинаций параметров, так как для одной из них она может работать некорректно. Но, во-первых, таких тестовых наборов может получиться достаточно много и будет трудоёмко их все проверить. Во-вторых, при тестировании обычно желают получить не сочетания всех параметров со всеми, ведь в этом случае будет труднее локализовать дефект и воспроизвести проблему, а проверить отдельные пары значений параметров, которые могут привести к проблеме. Для упрощения подбора таких пар используют методику Pairwise testing, которая позволяет выделить комбинации уникальных пар проверяемых значений и одновременно уменьшить число тестовых наборов, по сравнению с полным перебором.


пятница, 1 ноября 2013 г.

Mind-map: использование интеллект-карт при составлении тест-планов

В начале тестирования каждого нового программного продукта всегда возникает множество вопросов: что тестировать, как тестировать, когда тестировать, каковы приоритеты тестирования и т.п. При этом обычно руководство желает узнать ответы на эти вопросы от отдела тестирования как можно быстрее. В таких ситуациях часто не остаётся ничего другого, как использовать технику мозгового штурма (brainstorming). 

В нашей команде автоматизаторов-тестировщиков уже сложилась традиция: использовать для быстрого анализа предметной области так называемые интеллект-карты (Mind Map, диаграмма связей, ассоциативная карта).

четверг, 26 сентября 2013 г.

Crawljax: Автоматизация краулинга web-приложений


Crawljax: Crawling Ajax-based Web Applications - это Java-инструмент с открытым исходным кодом, которое позволит вам протестировать ваше web-приложение фактически имитируя действия пользователя по браузингу сайта. Crawljax может исследовать сайт использующий технологию ajax, при этом автоматически создавая динамический граф состояний DOM.

Для тех кому требуется проводить инвентаризацию сайта, может понравиться возможность снятия скриншотов каждого состояния и странички сайта так, как это выглядит в реальном браузере. Crawljax использует для этого движки реальных браузеров, работая через Selenium WebDriver.

пятница, 31 мая 2013 г.

Python + Selenium WebDriver: фреймворк для тестирования web-приложений

Selenium WebDriver - это набор многофункциональных библиотек, используя которые в вашем проекте вы можете писать GUI-тесты для web-приложений. При этом каждый тест запускается в реальном браузере и команды Selenium позволяют имитировать действия пользователя с web-приложением. Подробнее об установке и настройке Selenium WebDriver можно почитать в статье: "Работа с Selenium Web Driver". А в этой будет показано, как можно написать свой фреймворк на Python для GUI-тестирования используя WebDriver.

понедельник, 13 мая 2013 г.

Общие подходы и критерии тестирования сканеров безопасности web-приложений

Сканеры информационной безопасности (или сканеры уязвимостей это программно-аппаратные средства мониторинга и контроля информационной безопасности сетевой инфраструктуры. Сканеры информационной безопасности (ИБ) позволяют проверять  информационные системы: компьютерные сети, отдельные компьютеры и установленные на них приложения на наличие уязвимостей, эксплуатация которых злоумышленниками может нанести ущерб организации, которой принадлежит данная инфосистема. Большинство сканеров безопасности позволяют детектировать уязвимости описанные классификатором WASC Threat Classification

С тестированием ИБ и основными определениями в этой области можно ознакомиться в нашей прошлой статье: "Основы тестирования безопасности web-приложений". В данной статье попытаемся рассмотреть вопросы, связанные с тестированием сканеров информационной безопасности web-приложений как программных продуктов.

понедельник, 4 марта 2013 г.

Подходы к оценке качества релизов программного обеспечения

В современных компаниях по разработке программного обеспечения (ПО), обычно используется подход итеративного создания, развития и улучшения программ, включающий в себя этапы:
  • анализ запросов (analysis) заказчика 
  • планирование и постановка задач разработчикам для очередного цикла разработки (planning);
  • разработка ПО (develop) программистами;
  • тестирование (testing) решенных программистами задач;
  • релиз (release) – итог очередной итерации разработки ПО;
  • передача, внедрение (update) и апробация релиза у заказчика.

Нагрузочное тестирование при помощи JMeter

Структура статьи:

Основы тестирования безопасности web-приложений

Работа с Selenium Web Driver

Разработка функциональных тестов при помощи RobotFramework

Разработка функциональных тестов при помощи Selenium

Структура статьи:
    1.1 План разработки автоматических функциональных тестов.

воскресенье, 3 марта 2013 г.

Общие сведения о тестировании web-приложений

Структура статьи:

xPath: идентификация элементов на web-форме

Язык запросов xPath служит для упрощения доступа к элементам web-формы, расположенным в DOM. Очень часто его используют в таких средствах автоматизации тестирования, как Selenium IDE и Selenium WebDriver.

Аутентификация в Linux с помощью ключевой пары

Задача: требуется аутентифицировать машину Клиента (user: client_username, host: client_host) на машине Сервера (remote user: server_username, host: server_host). 
Решение:

среда, 27 февраля 2013 г.

Настройка git pre-commit hook под Windows

Задача: запретить коммиты кода в git-е под Windows, если для Python-проекта не прошли все указанные юнит-тесты.
Решение: настроить файл git pre-commit hook.

суббота, 23 февраля 2013 г.

Контроль целостности кода функций

В ходе разработки сложной многокомпонентной системы для автоматизированного тестирования сканера безопасности, возникла проблема контроля целостности и проведения ревизий кода отдельных тестовых функций. Функциональных тестов, запускаемых системой, было написано уже около 2 сотен и их число продолжает увеличивается. В нашем случае один функциональный тест - это одна функция. Как правило, после разработки теста и постановки ему статуса "готов" в некотором трекере, о нём забывают и надолго. Однако, в процессе разработки других тестовых функций часто возникает необходимость проведения рефакторинга, которая по невнимательности тестировщика-автоматизатора может затронуть и уже готовые, отлаженные тесты.

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

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