В този урок за JMeter разглеждаме как можем да споделяме и предаваме променливи между групи нишки.
Когато разработвате разширени JMeter скриптове, най-вероятно ще имате множество групи нишки. Всяка група нишки ще изпълнява различни заявки.
Добър пример за това е, когато трябва да удостоверим потребителите с токени на носител. Една група нишки прави удостоверяването и запазва маркера. Друга група нишки трябва да осъществи достъп до този маркер и да го използва в друга заявка.
Следователно се нуждаем от механизъм за предаване на променливи между групи нишки.
В този пример нашият план за тестване ще има две групи нишки. Първата група нишки отправя GET заявка към уеб услуга. След това използваме Екстрактор JSON плъгин за анализиране на JSON отговора.
Използвайки JSONPath, извличаме стойността за определен ключ и я запазваме като променлива JMeter.
Ето как изглежда нашата заявка за JMeter:
Резултатът от горната заявка води до следния отговор във формат JSON:
и нашият JSONPath за извличане на първия url изглежда така:
Стойността на заявката JSONPath се записва като first_url
. Тази променлива е достъпна само в рамките на една и съща група нишки и можем да получим нейната стойност, като използваме ${first_url}
Сега, как ще направим тази променлива достъпна чрез други групи нишки?
Отговорът е да се използва BeanShell Assertion
за да запазите променливата като глобално свойство. По този начин можем да предаваме променливи между групи нишки.
За да добавите BeanShell Assertion, щракнете с десния бутон върху Test Plan> Add> Assertion> BeanShell Assertion
В нашето твърдение за BeanShell можем да въведем следния код
${__setProperty(first_url, ${first_url})};
Сега в група от нишки 2, можем да осъществим директен достъп до тази променлива, като използваме ${__property(first_url)}
както е показано по-долу:
Или можем да използваме BeanShell PreProcessor
за манипулиране на променливата:
В PreProcessor на BeanShell можем да получим достъп до променливата, предадена от друга група Thread, като използваме props.get('name_of_variable')
След това можем да извършим някои манипулации с низове и да запишем резултата като нова променлива.
В горния пример премахваме http://
от променливата, която е предадена от Thread Group 1, и записваме резултата като променлива host
Променливата host
вече е локален за Thread Group 2 и има директен достъп до него чрез ${host}
както е показано по-долу: