Преобразование карты сайта в список адресов для siege
Использование XSL-преобразований для перевода XML в текст
Siege — утилита для нагрузочного тестирования web-серверов, целью которой является дать разработчикам возможность проверить быстродействие/ресурсоёмкость кода в условиях, максимально приближенных к реальным.
В режимах регрессионного тестирования и «имитации Internet» siege использует текстовый файл со списком адресов для тестирования.
В качестве такого файла очень удобно было бы использовать карту сайта (sitemap), но, к сожалению, siege не понимает XML. В данной статье рассмотрено одно из возможных решений по преобразованию карты сайта из XML в текстовый формат.
Как уже было отмечено, карта сайта представляет собой XML-файл, формат которого подробно описан здесь. Задача заключается в преобразовании XML-файла в текстовый формат (каждый адрес в отдельной строке и без лишних пробелов).
Самый надёжный способ — использование «родных» для XML XSL-преобразований. В отличие от регулярных выражений XSL-преобразования будут правильно работать даже в том случае, если используется расширенный формат карты (с элементами из других пространств имён).
Для преобразования понадобится данный XSL-файл:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:x="http://www.sitemaps.org/schemas/sitemap/0.9">
<xsl:output method="text" media-type="text-plain" indent="no"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/x:urlset/x:url">
<xsl:value-of select="x:loc" disable-output-escaping="yes"/>
<xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
Элемент <xsl:output> задаёт формат результата (обычный текст), <xsl:strip-space elements="*"/> указывает, что у всех элементов нужно удалять лишние пробельные символы, а секция <xsl:template/> делает выборку по всем блокам <url> и собирает значения элементов <loc>, добавляя новую строку (<xsl:text>
</xsl:text>) после каждого адреса.
Загружаем файл и натравливаем xsltproc на сайтмап (например, sitemap.xml):
Вуаля, список готов. важно, чтобы карта сайта не содержала директив <?xml-stylesheet ?>.
Помимо XSL-преобразований есть еще способ с использованием потокового редактора sed, но способ достаточно хрупкий. Представляет собой типичный пример использования чёрной магии.
sed -r 's/<loc/\n<loc/g; s!</loc>!</loc>\n!g' $1 | sed -r -n '/<loc>.*?<\/loc>/! D; /<loc>.*?<\/loc>/ s!</?loc>!!g; s!\s+!!g; P'
Работает эта магия следующим образом: перед всеми открывающими тэгами и после всех закрывающих тэгов </loc> добавляется символ новой строки — это делается для того, чтобы все адреса гарантированно располагались на разных строках. Результат отдаётся второму sed, работающему в «бесшумном» режиме. Удаляется всё, что не находится внутри тэгов <loc>…</loc>, затем удаляются сами тэги <loc> и, наконец, удаляются лишние пробелы и выводится результат.
Работает так:
Не будет работать, если пространство имён по умолчанию не http://www.sitemaps.org/schemas/sitemap/0.9, а также если блок <loc>…</loc> располагается на нескольких строках. XSLT всё-таки лучше.
Связанные записи
Автор: Vladimir; опубликовано в: Linux; метки: Linux, XML, XSLДек
2009
Комментарии к статье «Преобразование карты сайта в список адресов для siege» (1) »
Оставить комментарий к записи «Преобразование карты сайта в список адресов для siege»
Вы должны быть авторизованы, чтобы иметь возможность оставить комментарий.

Меня зовут Владимир, я программист-фрилансер, специализирующийся на Web-программировании и програмировании под Linux.
По совместительству занимаюсь администрированием LAMP/LNMP-серверов и техническим переводом.






[...] тестирования осталась прежней: карта сайта преобразовывалась в список адресов, на этот список натравливался siege, а я присматривал за [...]