нагрузочный тест с тремя API REST с различной пропускной способностью - PullRequest
0 голосов
/ 04 июня 2018

Я хочу написать класс имитации нагрузочного теста Гатлинга.У меня есть три запроса req1, req2 и req3.Я хочу быть в состоянии выполнить нагрузочный тест с 300 пользователями, усиленными в течение 5 секунд.Мне также нужно, чтобы тест проходил в течение 20 минут полностью.

Теперь мне нужно, чтобы три запроса выполнялись одновременно, но с req1 пропускной способностью 90%, 5% req2 и 5% req3.Например: если есть 100 запросов, 90 должны быть из req1 и 5 из req2 и 5 из req3.

Пока мой класс моделирования:

package simulations;

import io.gatling.core.Predef._ 
import io.gatling.http.Predef._
import scala.concurrent.duration._

class LoadSimulation extends Simulation{

    val httpConfig = http
        .baseURL("http://url.com")
        .acceptHeader("text/html,application/xhtml+xml,application/xml")

    val update = scenario("Update").exec(Api.update)
    val read= scenario("Read").exec(Api.read)
    val age= scenario("Age").exec(Api.age)

    setUp(
        postToChannel.inject(rampUsers(300) over (5 seconds))
        ).protocols(httpConf)
        .maxDuration(20 minutes)
}

object Api{
    val channelFeeder = csv(test.csv).random

    val update = feed(channelFeeder)
        .exec(http("Update")
        .get("/update?key=${key}&${url}")

    val read= feed(channelFeeder)
        .exec(http("Read")
        .get("/app/${id}/data/1/1.json?key=${key}")

    val age= feed(channelFeeder)
        .exec(http("Age")
        .get(/app/${id}/data/1/age?key=${key})
}

Я не уверенкак поместить эти три apis в один сценарий и запустить их с обновлениями update (90), read (5) и age (5) соответственно.

Любые ссылки на это будут полезны.

Спасибо

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Думаю, у вас есть только один поток ... как будут разделены три последовательных шага ... один плохой способ сделать это - сохранить глобальную переменную и разделить ее между всеми вашими потоками ... теперь у вас может быть логика короткого замыкания, что 90запрос перейдите к шагу 1 и т. д. однако с точки зрения тестирования производительности вы должны запустить три разных моделирования и предоставить им необходимую нагрузку, а не делать все вместе.

0 голосов
/ 04 июня 2018

нагрузочное тестирование с Maven потребует от вас создания файла под названием "pom" (модель объекта проекта) .В начальном сегменте файла pom.xml вам нужно будет определить зависимости, которые вы будете использовать как:

<dependencies>
   <dependency>
      ...
      <scope>test</scope>
   </dependency>
</dependencies>

В дополнение к объявлению других плагинов, которые будут использоваться для содействия выполнению файла:

<plugin>
   <groupId>io.gatling</groupId>
   <artifactId>gatling-maven-plugin</artifactId>
   <version>X.Y.Z</version>
</plugin>

Вы можете определить несколько сегментов плагинов, как указано выше, столько, сколько вам нужно, чтобы оправдать использование, необходимое для тестирования.

Теперь с этим предположением (я полагаю) вы будетеиспользовать Jenkins для использования плагинов Maven и Gatling.Вот документация Гатлинга по созданию файлов pom.xml: Ссылка

Дополнительный способ, как упомянул пользователь 666, вы можете 'Maven-ize' процесс, разделив его во время файла pom, как включаетили исключает соответственно:

<configuration>
   <!--   ...  -->
   <runMultipleSimulations>true</runMultipleSimulations>
   <includes>
      <param>my.package.MySimu1</param>
      <param>my.package.MySimu2</param>
    </includes>
    <excludes>
      <param>my.package.MySimuNotToRun</param>
    </excludes>
 </configuration>

Редактировать: Я думаю, что я неправильно понял! Я полагаю, что вы ищете, имеет множество сценариев, как описано:

setUp(scenario1.inject(rampUsers(300)over (5)). protocols(...),
      scenario2.inject(rampUsers(95) over (ramp seconds))
      .protocols(...)

Вы можете проверить больше здесь: https://gatling.io/docs/current/general/simulation_setup/

...