Преобразование карты сайта в список адресов для siege

Использование XSL-преобразований для перевода XML в текст

Siege — утилита для нагрузочного тестирования web-серверов, целью которой является дать разработчикам возможность проверить быстродействие/ресурсоёмкость кода в условиях, максимально приближенных к реальным.

В режимах регрессионного тестирования и «имитации Internet» siege использует текстовый файл со списком адресов для тестирования.

В качестве такого файла очень удобно было бы использовать карту сайта (sitemap), но, к сожалению, siege не понимает . В данной статье рассмотрено одно из возможных решений по преобразованию карты сайта из в текстовый формат.

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

Самый надёжный способ — использование «родных» для -преобразований. В отличие от регулярных выражений -преобразования будут правильно работать даже в том случае, если используется расширенный формат карты (с элементами из других пространств имён).

Для преобразования понадобится данный -файл:

[-]
Download sitemap2txt.xml
<?xml version="1.0" encoding="utf-8"?>
<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>&#x000A;</xsl:text>
    </xsl:template>
</xsl:stylesheet>

Элемент <xsl:output> задаёт формат результата (обычный текст), <xsl:strip-space elements="*"/> указывает, что у всех элементов нужно удалять лишние пробельные символы, а секция <xsl:template/> делает выборку по всем блокам <url> и собирает значения элементов <loc>, добавляя новую строку (<xsl:text>&#x000A;</xsl:text>) после каждого адреса.

Загружаем файл и натравливаем xsltproc на сайтмап (например, sitemap.):

[-]
View Code Bash
xsltproc sitemap2txt.xml sitemap.xml -o urls.txt

Вуаля, список готов. важно, чтобы карта сайта не содержала директив <?xml-stylesheet ?>.

Помимо -преобразований есть еще способ с использованием потокового редактора sed, но способ достаточно хрупкий. Представляет собой типичный пример использования чёрной магии.

[-]
Download sitemap2list.sh
#! /bin/sh

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> и, наконец, удаляются лишние пробелы и выводится результат.

Работает так:

[-]
View Code Bash
sitemap2list.sh sitemap.xml > list.txt

Не будет работать, если пространство имён по умолчанию не http://www.sitemaps.org/schemas/sitemap/0.9, а также если блок <loc></loc> располагается на нескольких строках. XSLT всё-таки лучше.

Добавить в закладки

Связанные записи

Автор: Vladimir; опубликовано в: Linux; метки: Linux, XML, XSL
11
Дек
2009

RSS Комментарии к статье «Преобразование карты сайта в список адресов для siege» (1)  »

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

Оставить комментарий к записи «Преобразование карты сайта в список адресов для siege»

Вы можете использовать данные тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Изображения должны быть включены!

Оставляя комментарий, вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя