Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Extract value using regex, modify it and send in new request

csv
jmeter
regexp
http
Теги: #<Tag:0x00007f7b650e8ca0> #<Tag:0x00007f7b650e8b60> #<Tag:0x00007f7b650e8980> #<Tag:0x00007f7b650e87a0>

#1

Подскажите пожалуйста как справиться с такой ситуацией:
jmeter читает мой csv file с набором GET и POST реквестов и выполняет их.

Первый GET request имеет html response в котором находится нужное мне значение - clientKey = "7413283063809473468"
В пайтоне я его считываю и модифицирую так -
clientKey = re.search('clientKey = "-?\d+"', response.text).group().replace('clientKey = ',"").replace('"',"")
Как такую же операцию провернуть в jmetere ?

И следующий шаг это я должен модифицировать POST request (https://mysite.com/viewer/-3621038377494762941/bla/bla/bla) из моего csv файлa и отправить
POST https://mysite.com/viewer/-7413283063809473468/bla/bla/bla


(Павел) #2

Первый GET request имеет html response в котором находится нужное мне значение - clientKey = “7413283063809473468”
В пайтоне я его считываю и модифицирую так -
clientKey = re.search(‘clientKey = “-?\d+”’, response.text).group().replace(‘clientKey = ‘,"").replace(’"’,"")
Как такую же операцию провернуть в jmetere ?

Можно к семплеру добавить JSR223 PostProcessor на groovy, например:

String htmlReponse = prev.getResponseDataAsString()
String clientKey = (htmlResponse =~ /clientKey = "(\d+)"/).collect { all, key -> key }[0]
vars.put('CLIENT_KEY', clientKey)

после этого в JMeter переменную CLIENT_KEY запишется то, что было распарсено по регекспу clientKey = "(\d+)" (первое вхождение)
2.

И следующий шаг это я должен модифицировать POST request (https://mysite.com/viewer/-3621038377494762941/bla/bla/bla) из моего csv файлa и отправить
POST https://mysite.com/viewer/-7413283063809473468/bla/bla/bla

Здесь не очень понятно что нужно. Если вы получили из предыдущего шага CLIENT_KEY, то для следующего семплера с POST реквестом можно указать path как /viewer/-${CLIENT_KEY}/bla/bla/bla


#3

Спасибо большое это как раз то что я искал, вот только синтаксис у меня вот такой заработал только -

def response = prev.getResponseDataAsString();
def clientKey = (response =~ /clientKey = "(-?\d+)"/).collect { all, key -> key }[0];
vars.put('CLIENT_KEY', clientKey);