За последние 24 часа нас посетили 17828 программистов и 1613 роботов. Сейчас ищут 1447 программистов ...

Использование рыбы в тестировании

Тема в разделе "Решения, алгоритмы", создана пользователем Clone, 1 мар 2008.

  1. Clone

    Clone Guest

    Написал небольшую статейку: http://angerslave.org.ru/2008/03/01/para-slov-o-rybalke
    Прошу оценить.
    Выдержка:
    И непосредственно код скрипта:
    PHP:
    1. <?php
    2.  
    3. function process_urls($urls)
    4. {
    5.   $errno = 0;
    6.   $errstr = '';
    7.   $texts = array();
    8.   $ids = array();
    9.   $eofs = array();
    10.   $counter = 0;
    11.   while (in_array(false, $ids) || (count($urls) != 0 && count($ids) == 0))
    12.   {
    13.     foreach ($urls as $id => $href)
    14.     {
    15.       if (!isset($ids[$id]) || $ids[$id] === false)
    16.       {
    17.         if ($counter != 0 && ceil($counter / 100) == $counter / 100)
    18.           sleep(1);
    19.         $counter ++;
    20.         $href = parse_url($href);
    21.         $ids[$id] = fsockopen('213.180.204.20', 80, $errno, $errstr, 5);
    22.         if ($ids[$id])
    23.         {
    24.           $out = "GET ".$href['path']."?".$href['query']." HTTP/1.1\r\n";
    25.           $out .= "Host: ".$href['host']."\r\n";
    26.           $out .= "Connection: Close\r\n\r\n";
    27.           fwrite($ids[$id], $out);
    28.           $eofs[$id] = false;
    29.           $texts[$id] = '';
    30.         }
    31.       }
    32.     }
    33.   }
    34.   while (in_array(false, $eofs))
    35.   {
    36.     foreach ($eofs as $id => $eof)
    37.     {
    38.       if ($eof == false)
    39.       {
    40.         $texts[$id] .= fread($ids[$id], 4096);
    41.         $eofs[$id] = feof($ids[$id]);
    42.       }
    43.     }
    44.   }
    45.   foreach ($ids as $id => $id_val)
    46.     fclose($ids[$id]);
    47.  
    48.   foreach ($texts as $id => $href)
    49.   {
    50.     $text = $texts[$id];
    51.     $text = str_replace(array("\n", "\r", '', $text);
    52.     preg_match(
    53.       '#<h1 style="color\:black\; margin\-left\:0\;">Тема\: \«([^»]+)»</h1>((<p>[^<]+>/p<+)</div></td>#Sim',
    54.       $text, $matches);
    55.     preg_match_all('#<p>([^<]+)</p>#Sim', $matches[2], $matches2);
    56.       'INSERT DELAYED INTO data (title, textdata) VALUES ("'.mysql_escape_string($matches[1]).
    57.       '", "'.mysql_escape_string(implode("\r\n", $matches2[1])).
    58.       '"');
    59.   }
    60. }
    61.  
    62.  
    63. mysql_connect('localhost', 'root', 'root');
    64. mysql_query('CREATE TABLE IF NOT EXISTS `data` (
    65. `title` VARCHAR( 255 ) NOT NULL ,
    66. `textdata` TEXT NOT NULL
    67. );');
    68. mysql_query('TRUNCATE TABLE `data`');
    69.  
    70. $themes = array('astronomy', 'geology', 'gyroscope', 'literature', 'marketing', 'mathematics', 'music', 'polit',
    71. 'agrobiologia', 'law', 'psychology', 'geography', 'physics', 'philosophy', 'chemistry', 'estetica');
    72. $urls = array();
    73.  
    74. for ($i = 0; $i <= 50000; $i++)
    75. {
    76.   $themes_copy = $themes;
    77.   $use_themes = array();
    78.   do
    79.   {
    80.     $rand_index = array_rand($themes_copy);
    81.     $use_themes[] = $themes_copy[$rand_index];
    82.     unset($themes_copy[$rand_index]);
    83.   } while (count($themes_copy) && rand(0, 5));
    84.   $urls[] = 'http://referats.yandex.ru/all.xml?mix='.implode('%2c', $use_themes).'&'.implode('=on&', $use_themes).'=on';
    85. }
    86.  
    87. while (count($urls))
    88. {
    89.   process_urls(array_splice($urls, -10));
    90. }
    91.  
    Обсудим? ;)
     
  2. Anonymous

    Anonymous Guest

    Хм. Мысль неплохая. :)
     
  3. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    а яндекс не против?
     
  4. Clone

    Clone Guest

    antonn, думаю что против, но в статье написал - только в целях тестирования. Да и после где-то 1000 запросов автоматически блочится сервис(для заданного IP похоже), так что особо-то и не получится прям аж наворовать нагенеренного ничего не значащего контента. Да и никаких "все права на тексты принадлежат яндекс инк., ссылка на источник обязательно, иначе сикирь башка" нет, даже есть
    , но
    Тестирование сайта на нагрузку в пределах веб-сервера, имхо, отнюдь не предоставление в массовое пользование.
     
  5. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    :) не знаю, я обычно "бренчу" по клавиатуре, как по пианино :) Нафиг еще целую функцию городить, парсить яндекс бедный :))) Мы как-нибудь своими силами.
     
  6. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    во это и ест рыба. чего еще гадо-то?
    =)

    буду ее теперь использовать.
     
  7. Clone

    Clone Guest

    Elkaz, есть определённые ограничения, связаные с русским языком. Определённые концентрации букв, определённое среднее количество букв в слове и т.д. А бить по клаве ничем не лучше for ($i = 0; $i <= 100000; $i++) { echo chr((int)rand(112, 255)); }. Как я написал в статье, это будет не очень приближено к боевым условиям.
     
  8. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Clone
    Мб =) Я и не спорю, что это лучше.
    Просто мне лень :)
     
  9. Clone

    Clone Guest

    Elkaz, а рандомно тыкать по клаве не лень?;) Чтобы нагенерить символов этак тысяч 50, сколько удёт времени и сил? Уж не проще ли пропарсить яндекс?;)
     
  10. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Clone
    Пока не было задач для генерации такого количества символов :)))

    Опять же :) по клаве можно стучать кулаками - сразу несколько символов в секунду :))))))
    Ну для моих задач пока вполне хватает. Если понадобится - заюзаю этот парсер :) пасиба

    З.ы
    И зачем рандомно? :)) Берем вводим ~100 символов, потом CTRL+A -> CTRL+C, потом пару раз CTRL+V, повторим, начиная с CTRL+A - и вот уже достаточно большое количество символов ))))
     
  11. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    А исчо можно головой.

    Сорри, не удержался. :)
     
  12. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    RomanBush
    Головой медленее :) Пытался пару раз :) Когда очередной баг ускользал )
     
  13. Clone

    Clone Guest

    Ещё думаю описать используемую мной систему подсчёта статистики... Интересно кому?
     
  14. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Clone
    Интересно.
    А что за статистика?
     
  15. Clone

    Clone Guest

    Elkaz, по сути аналог логирования apache + быстрый сбор статистики, которую можно показать юзерам + возможность расширить до полномасштабного анализа.
     
  16. antonn

    antonn Активный пользователь

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    по сути фраза напоминает рыбу %)
     
  17. Clone

    Clone Guest

    Анализ 750000 записей в пределах 15 секунд, кеширование. То есть минимум нагрузки при добавлении, минимум нагрузки при анализе.
    Пока лишь отдаётся статистика за месяц, за год и распределние по часам(0-23) юзерам используя amline. В планах - глубокий анализ(рефералы, хосты, страны, поисковые запросы и т.д.) для админа.
     
  18. Anonymous

    Anonymous Guest

    Clone, ты в блоге приделай rss и нормальное отображение кода :)
     
  19. Clone

    Clone Guest

    Горбунов Олег, http://angerslave.org.ru/rss
    Надо будет поправить... То желания нет, то времени... Спасибо за предложение:)
     
  20. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Clone
    Как раз нужна такая статистика, но писать лень :) Другим занят. Был бы рад.
    Особенно рефераллы + поисковые запросы интересуют.
    Готовые решение 50+ Кб с многокилометровыми копирайтами и мусором совсем не нравяться :)
     
  21. Clone

    Clone Guest

    Горбунов Олег, хм, а опера 9.2 несмотря на все ошибки вырвала фид:) Про поправить я и говорил, что поправить все ошибки...
     
  22. Anonymous

    Anonymous Guest

    ну, это у нее не отнять - правильный браузер. :)
     
  23. sword dancer

    sword dancer Активный пользователь

    С нами с:
    17 фев 2008
    Сообщения:
    295
    Симпатии:
    0
  24. Clone

    Clone Guest

    sword dancer, почему бы не 2.0 сразу? Просто блог ставил давно, особо не копался, да и сейчас желания особо нет.