使用三个具有不同吞吐量的 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 步,依此类推。但是从性能测试的角度来看,您应该 运行 三个不同的模拟并为它们提供您想要的负载,而不是一起做..
我想写一个加特林负载测试模拟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 步,依此类推。但是从性能测试的角度来看,您应该 运行 三个不同的模拟并为它们提供您想要的负载,而不是一起做..