У меня есть план тестирования jmeter, который идет на страницу сайта sitemap.xml сайта, извлекает каждый URL-адрес на этой странице с помощью XPath Extractor, а затем передает $ {url} в пробоотборщик запроса HTTP в контроллере ForEach для отправки результатов для каждой страницы в файл. Это отлично работает, но я просто понял, что ссылки на этой странице sitemap.xml жестко закодированы. Это проблема, когда я хочу проверить https://staging-website.com, но все ссылки на sitemap.xml - это все страницы www.website.com. Кажется, должен быть способ заменить «www.website.com» в каждом $ {url} на «staging-website.com» с регулярным выражением или что-то в этом роде, но я не смог понять, как это сделать. Любые предложения будут ценны.
ответ
Добавить предварительный процессор BeanShell для управления URL-адресом.
String sUrl = vars.get("url");
String sNewUrl = sUrl.replace("www.website.com", "https://staging-website.com");
log.info("sNewUrl:" + sNewUrl);
vars.put("url", sNewUrl);
Вы также можете попытаться соотнести sitemap.xml с регулярным выражением экстрактора, расположенного до www.website.com так, чтобы извлекать только URL часть данных вместо полного имени хоста. Разве вы не должны это делать, поскольку HTTPSampler позволяет вам вводить сегмент URI, а не имя хоста?
Вы можете использовать __strReplace() функцию, доступную через JMeter Plugins проекта, как:
${__strReplace(${url},${url},staging-website.com,)}
Демо:
Самый простой способ установить JMeter Пользовательские функции (а также любых других плагинов) является с использованием JMeter Plugins Manager
я был в состоянии заменить узел в пределах строки, поставив
${__javaScript('${url}'.replace('www.website'\,'staging.website'))}
на входе пути второго запроса HTTP пробоотборника. Ответы, представленные Селвой и Димитрием, были более изящными, поэтому, если у меня будет время в будущем вернуться к этому, я дам им еще одну попытку. Я очень ценю помощь!
Я новичок в JMeter, и я действительно не понимаю, где поставить предварительный процессор BeanShell, чтобы заменить его на каждом из URL, прежде чем тестировать их. Когда я ставлю его препроцессором для HTTP-запроса в контроллере ForEach, он не работает. Я пропустил шаг? – gallagher
В соответствии с вашим описанием вы используете XPath Extractor для вытягивания URL-адреса. После того, как вы потянули его, вы отправите его в следующем пробоотборнике HTTP-запроса, чтобы получить содержимое этого URL-адреса, полученного из XPath Extractor. В этом втором HTTP-пробоотборнике вам нужно это сделать. – Selva