Отправить случайный запрос с Гатлингом
У меня есть файл с телами запросов Json в файле. Я хотел бы сравнить веб-отправку с постоянным количеством запросов в секунду, используя constantUsersPerSec(..).
Однако каждый раз, когда отправляется запрос, я бы хотел, чтобы он был взят из списка запросов (случайным образом или в цикле, мне все равно).
Я не могу понять, как это сделать с Гатлингом. Используя следующий код, запрос выбирается случайным образом один раз, и один и тот же запрос отправляется снова и снова. Что не то, что я хочу
Мой код:
class GcStressManyRequests extends Simulation{
...
...
val httpProtocol: HttpProtocolBuilder = http
.baseURL(baseUrl)
.contentTypeHeader(contentType)
var requests = Source.fromResource("bodies/requests.txt").getLines().toIndexedSeq
val random = new Random(System.currentTimeMillis())
val scn: ScenarioBuilder = scenario("AE prod requests")
.exec (
http("bid_request")
.post(endpoint)
.body(StringBody(requests(random.nextInt(requests.length))))
.asJSON
.check(status.is(200)))
setUp(
scn.inject(
constantUsersPerSec(400) during (1 minutes),
).protocols(httpProtocol))
}
3 ответа
Я вижу, у вас есть ваши запросы в текстовом файле body.txt. Для вашей задачи я бы использовал Feeder (см. Шаг 03). С помощью фидера вы можете извлечь случайный элемент из списка элементов и использовать его в своих звонках. Шаги, которые вы должны предпринять, чтобы заставить его работать:
- Преобразуйте ваш текстовый файл в файл CSV, для файла CSV нужен только заголовок, а затем значения. Одна строка для каждого значения. Допустим, вы называете заголовок "запрос".
Создать фидер:
val random_request = csv("bodies.csv").random
Изменить сценарий:
val scn: ScenarioBuilder = scenario("AE prod requests") .feed(random_request) //Puts a random request in your session. .exec ( http("bid_request") .post(endpoint) .body(StringBody(${request})) //Retrieve the request from current session. .asJSON .check(status.is(200))) setUp( scn.inject( constantUsersPerSec(400) during (1 minutes), ).protocols(httpProtocol))
Для полноты картины я хотел бы поделиться ответом Домингоса Кредо о Gatling Google Groups, который работал для меня.
val scn: ScenarioBuilder = scenario("AE prod requests")
.exec(session => {
val session2 = session.set("therequest", requests(random.nextInt(requests.length)))
session2
})
.exec (
http("bid_request")
.post(endpoint)
.body(StringBody("${therequest}"))
.asJSON
.check(status.is(200)))
Шаг 1: Создать Input в моем случае это стек. Ниже приведен только метод, который вы можете использовать в своей собственной реализации
var jobsQue: Stack[InputData] = GenerateInput.creatJobsCollection()
Шаг 2: Используйте это
val execScn = scenario("Requests").group("Groups") {
asLongAs(session => jobsQue.length > 0) { exec { session =>
var length = jobsQue.length //Whatever
var reportElement = jobsQue.pop(); //POP it } } }
Надеюсь, что это поможет вам.