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

时间:2018-06-04 09:29:07

标签: maven load-testing gatling

我想编写一个加载测试模拟类。我有三个请求req1,req2和req3。我希望能够在超过5秒的时间内对300名用户进行负载测试。我还需要测试完全运行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})
}

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

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

由于

2 个答案:

答案 0 :(得分:2)

使用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

用户666提到的其他方式,您可以通过在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/

答案 1 :(得分:0)

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