Вопрос или проблема
Помогите, ребята, мне поручили исследовать Gatling с использованием JavaScript для тестирования производительности, но я довольно новичок и испытываю трудности даже с выполнением входного запроса из проекта.
Вот документация:
https://docs.gatling.io/reference/script/protocols/http/request/#request-name
Также есть хорошее видео от человека, которое я использовал для дополнительной проверки, если я пропустил какие-то предварительные условия:
https://www.youtube.com/watch?v=s4WeRrCAk-8
Пока это решение, которое я придумал:
import { atOnceUsers, scenario, simulation } from "@gatling.io/core";
import { http, status, StringBody } from "@gatling.io/http";
export default simulation((setUp) => {
const httpProtocol =
http.baseUrl('https://example.test.com')
.acceptHeader('*/*')
.contentTypeHeader('application/json');
const loginAndLogout = scenario('Login and logout')
.exec(http('Login').post('/login')
.body(StringBody("{ \"username\": \"testUser\", \"password\": \"testPass\", \"channel\": \"web\" }"))
.check(status().is(200)) // Проверка на ответ 200 OK
);
setUp(loginAndLogout.injectOpen(atOnceUsers(1))).protocols(httpProtocol);
});
Простой GET-запрос работает, но POST-запрос с телом просто не работает для меня. Я получаю:
“[ERROR] i.g.a.Gatling$ – Запуск завершился с ошибкой
org.graalvm.polyglot.PolyglotException: TypeError: undefined is not a function.”
Ошибка сама по себе не говорит мне слишком много.
Ранее я полностью завершил проект с “k6”, но здесь я в полном недоумении. Спасибо.
Ошибка заключается в импортах:
import { atOnceUsers, scenario, simulation } from "@gatling.io/core";
import { http, status, StringBody } from "@gatling.io/http";
StringBody
нужно импортировать из core
, а не из http
:
import { StringBody, atOnceUsers, scenario, simulation } from "@gatling.io/core";
import { http, status } from "@gatling.io/http";
Ответ или решение
Как вставить тело запроса в Gatling с использованием JavaScript
Вам назначили исследовать Gatling с использованием JavaScript для производительного тестирования, и вы столкнулись с проблемой отправки POST-запроса с телом. Давайте разберемся, как правильно задать тело запроса и устранить возникшие ошибки.
1. Понять структуру вашего кода
Вы начали с весьма адекватной структуры, однако существует ошибка в ваших импортах, которая приводит к возникновению ошибки TypeError: undefined is not a function
. Ошибка возникает из-за неправильного импорта StringBody
, который отвечает за формирование тела запроса. Вместо импорта из @gatling.io/http
, он должен импортироваться из @gatling.io/core
.
2. Исправление импорта
Ваш текущий импорт выглядит следующим образом:
import { atOnceUsers, scenario, simulation } from "@gatling.io/core";
import { http, status, StringBody } from "@gatling.io/http";
Вам нужно изменить этот импорт:
import { StringBody, atOnceUsers, scenario, simulation } from "@gatling.io/core";
import { http, status } from "@gatling.io/http";
Это исправление позволит вам использовать StringBody
без ошибок в дальнейшем.
3. Пример правильного кода
Итак, исправленный и полный код для выполнения POST-запроса с телом будет выглядеть следующим образом:
import { StringBody, atOnceUsers, scenario, simulation } from "@gatling.io/core";
import { http, status } from "@gatling.io/http";
export default simulation((setUp) => {
const httpProtocol =
http.baseUrl('https://example.test.com')
.acceptHeader('*/*')
.contentTypeHeader('application/json');
const loginAndLogout = scenario('Login and logout')
.exec(http('Login').post('/login')
.body(StringBody("{ \"username\": \"testUser\", \"password\": \"testPass\", \"channel\": \"web\" }"))
.check(status().is(200)) // Проверка на ответ 200 OK
);
setUp(loginAndLogout.injectOpen(atOnceUsers(1))).protocols(httpProtocol);
});
4. Проверка ответа
Важно помнить, что в вашем коде присутствует проверка статуса ответа. Вы используете .check(status().is(200))
, что является хорошей практикой для тестирования успешного выполнения запроса. Если ваш запрос возвращает разные коды, убедитесь, что вы обрабатываете их соответствующим образом, чтобы избежать недоразумений.
5. Устранение дополнительных ошибок
Если после исправления импорта у вас все еще возникают ошибки, убедитесь, что:
- Ваши зависимости в проекте установлены корректно.
- Вы используете совместимые версии Gatling и других библиотек.
- Проверьте консольные сообщения об ошибках для получения дополнительной информации о потенциальных проблемах.
Заключение
Используемый вами подход к внедрению Gatling в тестирование с помощью JavaScript имеет все шансы на успешное выполнение, если устранить ошибки в коде. С правильно импортированным StringBody
вы сможете успешно отправлять POST-запросы с телом и выполнять тестирование производительности вашего приложения.
Надеюсь, эта информация оказалась для вас полезной! Если возникнут дополнительные вопросы, не стесняйтесь обращаться.