Я хочу получить контент с веб-страницы с помощью JMeter.
данные Я ищу находится внутри яваскрипта блока:Jtidy StringIndexOutOfBoundsException в Jmeter
(...)
<map id="id1">
<script type="text/javascript">
var name="Lionel Richie";
var song="Hello";
var lyrics="Is it me you're looking for ?";
</script>
(...)
<script type="text/javascript">
var name="Waldo";
</script>
</map>
(...)
Допустим, я хочу, чтобы значение переменной name
внутри блока сценария в карте ID = ID1,
где есть также a song
переменная.
Я использую XPath экстрактор, чтобы получить содержание сценария (CSS/Jquery не получит яваскрипт содержания, как это не чистый HTML):
.//map[@id='id1']/script[contains(.,'song')]
XPath не найти данные, потому что мой HTML загрязнен (некоторые дикие вещи с отсутствующим тегом заканчивается, и так далее ...), поэтому мне нужно, чтобы очистить его с помощью Jtidy (Использовать «Tidy (терпим анализатор)» опции)
Примечания:
- Я не владею веб-страницей, которую обрабатываю. Мне приходится иметь дело с этим отвратительным HTML.
- есть много maps
элементов в веб-страницы каждого из них, имеющего сценарий с song
переменной: Я не могу напрямую использовать регулярное выражение (насколько я знаю)
Проблема:
Проблема это: мой HTML содержит странные международные символы HÀ бееее WE ... (да, французский, жаль, что) и Jtidy не обрабатывает должным образом этот конкретный случай: bug #205 StringIndexOutOfBoundsException while lexing script content
в результате Xpath экстрактор терпит неудачу, и все моиплан тестирования застрял.
Я отказался от пользовательского решения, но считаю это немного сложным. Возможно, я смогу справиться с этим лучше.
Мое решение:
Я использовал библиотеку TagSoup Java, чтобы очистить вывод HTML и сохранить его в переменной JMeter, который затем обрабатывается через Xpath («переменную JMeter» отметить опцию в «Применить») и, наконец, Я использовал регулярное выражение, чтобы получить мой Lionel Richie материал работает ...
JMeter |->HTTP Request |->BeanShell PostProcessor->tagsoup > var RESPONSE |->Xpath Extractor, Apply to var RESPONSE > var XPATH_OUTPUT |->Regular Expression Extractor, Apply to var XPATH_OUTPUT
чтобы получить TagSoup работать с JMeter, просто поставить баночку в Lib каталога, а затем использовать BeanShell постпроцессора.
BeanShell код, используемый:
import org.xml.sax.*;
import org.ccil.cowan.tagsoup.*;
// getting response data of previous sampler
String rep=prev.getResponseDataAsString();
XMLReader r = new Parser();
HTMLSchema theSchema = new HTMLSchema();
r.setProperty(Parser.schemaProperty, theSchema);
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
Writer w = new OutputStreamWriter(outStream);
XMLWriter x = new XMLWriter(w);
x.setPrefix(theSchema.getURI(), "");
r.setContentHandler(x);
r.parse(new InputSource(new StringReader(rep)));
String encodedRep=outStream.toString("UTF-8");
vars.put("RESPONSE", encodedRep);
Вы можете попробовать использовать Regex? –