#selenium #jmeter
#selenium #jметр
Вопрос:
Я пытаюсь использовать логин из selenium для использования в следующем http-запросе в jmeter. В настоящее время у меня есть следующее
Мой скрипт selenium работает отлично и регистрирует меня на моем веб-сайте в соответствии с приведенным ниже
WDS.sampleResult.sampleStart()
WDS.browser.get('https://www.testwebsite.com')
WDS.browser.findElement(org.openqa.selenium.By.linkText("Login")).click();
WDS.browser.findElement(org.openqa.selenium.By.id("username")).sendKeys("myusername");
WDS.browser.findElement(org.openqa.selenium.By.id("password")).sendKeys("mypassword");
WDS.browser.findElement(org.openqa.selenium.By.xpath("//button[@type='submit']")).click();
java.lang.Thread.sleep(5000)
WDS.browser.findElement(org.openqa.selenium.By.xpath("//*[contains(text(),'Skip for now')]")).click();
var cookies = WDS.browser.manage().getCookies()
java.lang.Thread.sleep(5000)
WDS.sampleResult.sampleEnd()
Что я хочу сделать, так это сохранить этот сеанс, а затем при следующем запросе использовать что-то вроде этого
ПОЛУЧИТЬ — https://test/anotherpage.com
поэтому я хочу, чтобы он распознал, что я все еще вошел в систему. Как я могу поддерживать сеанс в рабочем состоянии, чтобы мой http-запрос jmeter мог работать?
Ответ №1:
- В вашем сэмплере WebDriver вам необходимо сохранить
cookies
объект в переменных JMeter, таких как:WDS.vars.putObject('cookies', cookies)
- Добавьте HTTP Cookie Manager в свой план тестирования
- Добавьте препроцессор JSR223 в качестве дочернего элемента средства выборки HTTP-запросов, где вам нужно получить контекст аутентификации, и поместите следующий код в область «Script»:
def cookies = vars.getObject('cookies') log.info('cookies=' cookies) cookies.collect { cookie -> new org.apache.jmeter.protocol.http.control.Cookie(cookie.getName(), cookie.getValue(), cookie.getDomain(), cookie.getPath(), cookie.isSecure(), cookie.getExpiry().getTime()) }.each { cookie -> sampler.getCookieManager().add(cookie) }
Таким образом, вы можете скопировать файлы cookie из браузера в пробоотборник HTTP-запросов, чтобы запрос был аутентифицирован
Дополнительная информация: изменение файлов cookie в JMeter с помощью Groovy
Комментарии:
1. Спасибо, Дмитрий, куда мне поместить блок кода cookie в сэмплер webdriver, поскольку я добавил его в конец, и я получаю сообщение об ошибке «»cookies» не определены в <eval> в строке номер 9″
2. Я внес в него изменения, и я больше не получаю ошибку, но я не вижу, чтобы какие-либо файлы cookie сохранялись, поскольку другой запрос в другом потоке не пропускает файл cookie и просто говорит, что файлов cookie нет, даже если в том же потоке я получаю тот же результат. Я вижу файл cookie в отладочном сэмплере как часть ответа Chrome, поэтому я не уверен, почему он его не сохраняет
3. Теперь я вижу ошибку, в ней говорится javax.script.ScriptException: org.codehaus.groovy.control. Ошибка множественной компиляции: сбой запуска: Script38.groovy: 9: ожидание ‘)’, найдено ‘}’ @ строка 9, столбец 1. }.каждый { cookie -> sampler.getCookieManager().add(cookie) } ^
4. Скрипт не работает для jsr223, но я смог получить файлы cookie из webdriver, поэтому я приму ответ и задам другой вопрос
Ответ №2:
Использование файлов cookie в selenium, которые, похоже, вы извлекли все из них: https://www.selenium.dev/documentation/en/support_packages/working_with_cookies /
Вы должны иметь возможность хранить эти файлы cookie, которых должно быть достаточно для сохранения вашего сеанса. https://www.blazemeter.com/blog/using-http-cookie-manager-jmeter
Чтобы сохранить файлы cookie как переменные, определите свойство «CookieManager.save.cookies=true». Имена файлов cookie содержат префикс «COOKIE_» перед их сохранением (это позволяет избежать случайного повреждения локальных переменных). Чтобы вернуться к исходному поведению, определите свойство «CookieManager.name.prefix= » (с одним или несколькими пробелами). Если включено, значение файла cookie с именем TEST может называться ${COOKIE_TEST}.
При этом вам, вероятно, не нужно использовать selenium (и запускать полноценный браузер) для входа в систему, вы, вероятно, могли бы запустить простой http-запрос для отправки формы входа. Это было бы меньше над головой https://guide.blazemeter.com/hc/en-us/articles/207421705-How-to-use-JMeter-for-Login-Authentication-How-to-use-JMeter-for-Login-Authentication
Комментарии:
1. Привет, Dmart, я не могу сделать это с помощью стандартного http-запроса, так как веб-сайт не разрешает запросы POST через jmeter, поэтому я должен использовать selenium. Я посмотрю на эту ссылку дальше, так как запрос webdriver, похоже, не сохраняет файл cookie в запросе
2. Я считаю, что вам нужно затем СОХРАНИТЬ файлы cookie, как указано в моем ответе.
3. Кажется, я не могу сохранить файл cookie. В запросе я вижу com.googlecode.jmeter.plugins. webdriver.sampler. WebDriverSampler @3d602040 и больше ничего не показывает. Если я попытаюсь использовать переменную для файлов cookie, ничего не произойдет. Похоже, что он не может получить файл cookie из браузера и вернуть его в jmeter