вторник, 10 сентября 2013 г.

Генерация случайных валидных Urls

Гоняя тесты на одних и тех же данных, мы каждый день видим зеленный билд. И что? Стабильность? Застой?

Верное утверждение, что тесты должны гоняться постоянно, т.е. круглосуточно, или 24*7. Но если тесты используют одни и те же данные, то они врядли будут падать, если не повторяются старые ошибки.

Что делать?


Многие тестировщики используют средства генерации данных для своих тестов - есть даже такой вид автоматизированного тестирования - Динамическое автоматизированное тестирование, - одна из статей Алексея Булата об этом. ссылка

Программы генерируют строки, даты, числа и даже картинки определенного размера (об этом мы уже писали раньше). И с этим все понятно. Но как сгенерировать url, так чтобы он был валидный, и чтобы вел к реальному ресурсу: картинке, видео, документу pdf или просто сайту.

Ответ напрашивается сам собой - использовать API поисковых систем.
Итак, что есть на "рынке":

Из четырех этих сервисов, только гугл позволяет пользоваться своим апи без регистрации. Правда есть лимит на результат - 32 ссылки в одном овтете от сервера, но этого хватает.

Постановка задачи: реализовать получение случайной и валидной url для следующих источников.
  • Случайная ссылка на картинку
  • Случайная ссылка на видео
  • Случайная ссылка на сайт
  • Случайная ссылка на документ pdf
Язык реализации - C#.

Реализация:

Ссылка которая будет достаточной для поиска выглядит так 


и содержит параметры

web - тип сервиса для поиска
Полный список сервисов


       service   address
        -------   ------------------------------------------------------
        WEB       http://ajax.googleapis.com/ajax/services/search/web
        VIDEO     http://ajax.googleapis.com/ajax/services/search/video
        NEWS      http://ajax.googleapis.com/ajax/services/search/news
        LOCAL     http://ajax.googleapis.com/ajax/services/search/local
        IMAGES    http://ajax.googleapis.com/ajax/services/search/images
        BOOKS     http://ajax.googleapis.com/ajax/services/search/books
        BLOGS     http://ajax.googleapis.com/ajax/services/search/blogs
        PATENT     http://ajax.googleapis.com/ajax/services/search/patent



v - версия протокола
q - выражение для поиска 
start - необязательный аргумент,  задающий индекс для первого результата поиска (проще говоря номер страницы)

Полный список аргументов можно посмотреть в официальной документации (раздел Standard URL Arguments)

Ответ приходит в json формате из которого необходимо достать нужную информацию


{

}

В нашем случае это unescapedUrl.

Теперь алгоритм такой:
  1. Формируем строку для Get запроса подставляя слово для поиска и номер страницы
  2. Получаем ответ от сервера
  3. Парсим его и получаем значение unecapedUrl
  4. Используем url для своих нужд!
Конечно, все значения должны быть случайными:
Номер страницы - случайное число
unescapedUrl - случайный элемент из массива results
Слово для поиска - случайное слово из словаря.

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


Полный листинг кода на GitHub

Комментариев нет:

Отправить комментарий