【问题标题】:gatling load test with three REST APIs with different throughputs使用三个具有不同吞吐量的 REST API 进行加特林负载测试
【发布时间】:2018-06-04 09:29:06
【问题描述】:

我想写一个加特林负载测试模拟类。我有三个请求 req1、req2 和 req3。我希望能够在 5 秒内增加 300 个用户的情况下执行负载测试。我还需要测试完全运行 20 分钟。

现在我需要三个请求同时运行,但 req1 的吞吐量为 90%,req2 为 5%,req3 为 5%。 例如:如果有 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})
}

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

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

谢谢

【问题讨论】:

    标签: maven load-testing gatling


    【解决方案1】:

    使用 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 提到的其他方式,您可以通过在 pom 文件中将其拆分为分别包含或排除来“Maven-ize”该过程:

    <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/

    【讨论】:

    • 我已经完成了 pom 更改。我想知道我们如何将请求分别分配到 90、5、5 中。
    • 已编辑,我相信您正在寻找的是在设置过程中注入场景。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-26
      • 1970-01-01
      • 2020-06-24
      • 2015-02-13
      • 1970-01-01
      • 2016-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多