当前位置: 首页 > 知识库问答 >
问题:

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

云宾鸿
2023-03-14

我想写一个gatling负载测试模拟类。我有三个请求:请求1、请求2和请求3。我希望能够在5秒内完成300个用户的负载测试。我还需要测试总共运行20分钟。

现在,我需要同时运行这三个请求,但需要90%的吞吐量、5%的吞吐量和5%的吞吐量。例如:如果有100个请求,90个必须是请求1和请求2的5,以及请求3的5。

到目前为止,我的课程是:

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个答案

凤衡
2023-03-14

我觉得你只有一根线。。三个连续的步骤将如何分离。。一个糟糕的方法是维护一个全局变量,并在所有线程之间共享它。。现在你可以有短路逻辑,让90请求转到步骤1,依此类推。。然而,从性能测试的角度来看,你应该运行三种不同的模拟,并为它们提供你想要的负载,而不是同时进行。。

松和安
2023-03-14

使用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留档:链接

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

 类似资料:
  • 主要内容:创建JMeter测试计划,添加采样器,添加监听器,保存并执行测试计划,验证输出,添加吞吐量控制器,验证输出在本节中,我们将学习如何使用吞吐量控制器在JMeter中创建分布式负载测试计划。 出于测试目的,我们将在我们网站 www.yiibai.com 的URL下的某些网页上创建分布式负载。这些网页包括: 主页: www.yiibai.com 第1页(Java): www.yiibai.com/cplusplus/ 第2页(C语言): www.yiibai.com/cprogramming

  • 我目前在AWS中使用Gatling加载测试我的服务。我使用HTTP做了几次负载测试,我的服务工作得很好。没有TLS握手错误。当我们移动到HTTPS时,负载测试结果显示TLS握手超时异常到处都是,最后因为未处理的请求排队而抛出OOM。 其他信息: Gatling场景如下:发送三个请求,然后使用头发送一个请求。我想模拟发送三个保持活动状态的请求,并在最后关闭它 我的服务由Kubernetes管理 我所

  • 我如何负载测试一个同时有300个用户使用jmeter的登录页面(而不是一个又一个用户。同时有300个用户登录)?线程组的设置应该是什么?

  • 假设我需要编写一个gatling负载测试脚本,它需要调用两个api A1和A2。它首先需要调用A1,A1将返回一个JSON负载,它需要在JSON负载中提取一个字段,并在调用第二个API时使用该字段值。有人能告诉我怎么做吗?此脚本用于负载测试通过HTTP的服务器restful API。

  • 我们有一个Kafka集群,由3个节点组成,每个节点有32GB内存和6个内核2.5 CPU。 我们写了一个 kafka 制作人,它接收来自 Twitter 的推文,然后分批发送给 Kafka,每批 5000 条推文。 在生产者中,我们使用

  • 嗨,我是JMeter的新手,我知道如何使用JMeter执行负载测试。我试图弄清楚压力测试或容量测试是如何通过JMeter执行的。是不是通过逐渐增加JMeter中的线程数,我们可以确定何时出现性能问题,并获得阈值,在阈值以上运行测试。那它会做压力测试吗? 在如何执行压力测试和能力测试与Jeter工具混淆。