使用三个具有不同吞吐量的 REST API 进行 gatling 负载测试

gatling load test with three REST APIs with different throughputs

我想写一个加特林负载测试模拟class。我有三个请求 req1、req2 和 req3。我希望能够在 5 秒内对 300 个用户进行负载测试。我还需要测试 运行 总共 20 分钟。

现在我需要同时向 运行 发出三个请求,但请求 1 的吞吐量为 90%,请求 2 的吞吐量为 5%,请求 3 的吞吐量为 5%。 例如:如果有 100 个请求,则 90 个必须是 req1,5 个必须是 req2,5 个必须是 req3。

这是我到目前为止的模拟 class:

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})
}

我不确定如何将这三个 api 放在一个场景中,并且 运行 它们分别具有 update(90)、read(5) 和 age(5) 吞吐量。

关于这方面的任何线索都会有所帮助。

谢谢

使用 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 文件的 Gatling 文档:Link

user666 提到的其他方法,您可以 '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/

认为你只有一个线程..如何将三个顺序步骤分开..一个不好的方法是维护一个全局变量并在所有线程之间共享它..现在你可以有短路逻辑那 90 个请求转到第 1 步,依此类推。但是从性能测试的角度来看,您应该 运行 三个不同的模拟并为它们提供您想要的负载,而不是一起做..