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

使用Gatling发送随机请求

扶冠宇
2023-03-14

我有一个文件,其中包含Json请求体。我想使用constantUsersPerSec(...)对每秒发送恒定数量请求的Web进行基准测试。

但是,每次发送请求时,我都希望从请求列表中获取请求(随机或循环,我不在乎)。

我不知道该怎么对付加特林。使用以下代码,请求被随机选择一次,同一请求被反复发送。这不是我想要的

我的代码:

class GcStressManyRequests extends Simulation{ 
  ...
  ...
    val httpProtocol: HttpProtocolBuilder = http
    .baseURL(baseUrl)
    .contentTypeHeader(contentType)  

    var requests = Source.fromResource("bodies/requests.txt").getLines().toIndexedSeq
    val random = new Random(System.currentTimeMillis())

    val scn: ScenarioBuilder = scenario("AE prod requests")
    .exec (
         http("bid_request")
         .post(endpoint)
         .body(StringBody(requests(random.nextInt(requests.length))))
         .asJSON
         .check(status.is(200))) 

         setUp(
         scn.inject(
         constantUsersPerSec(400) during (1 minutes),
         ).protocols(httpProtocol))

 }

共有3个答案

澹台鸿光
2023-03-14

第一步:在我的例子中创建输入——它是堆栈。下面是一个方法,您可以使用自己的实现

var jobsQue: Stack[InputData] = GenerateInput.creatJobsCollection()

第2步:使用它

val execScn = scenario("Requests").group("Groups") {
asLongAs(session => jobsQue.length > 0) {  exec { session =>
    var length = jobsQue.length  //Whatever
    var reportElement = jobsQue.pop(); //POP it } } }

希望这对你有足够的帮助。

邓驰
2023-03-14

为了完整起见,我想分享多明戈·克雷多对为我工作的加特林谷歌集团的回答。

val scn: ScenarioBuilder = scenario("AE prod requests")
.exec(session => {
          val session2 = session.set("therequest", requests(random.nextInt(requests.length)))
          session2
        })
.exec (
     http("bid_request")
     .post(endpoint)
     .body(StringBody("${therequest}"))
     .asJSON
     .check(status.is(200))) 
司徒英卓
2023-03-14

我看到你的请求存在文本文件中。txt。对于您的任务,我将使用进料器(检查步骤03)。使用feeder,您可以从项目列表中检索随机项目,并在通话中使用它。你必须采取哪些步骤才能使其发挥作用:

>

  • 将您的文本文件转换为csv文件,csv文件只需要一个标头,然后是值。每个值一行。假设您将标头命名为“请求”。
  • 创建馈线:

    val random_request = csv("bodies.csv").random
    

    编辑场景:

     val scn: ScenarioBuilder = scenario("AE prod requests")
       .feed(random_request) //Puts a random request in your session.
       .exec (
         http("bid_request")
         .post(endpoint)
         .body(StringBody(${request})) //Retrieve the request from current session.
         .asJSON
         .check(status.is(200))) 
    
     setUp(
       scn.inject(
       constantUsersPerSec(400) during (1 minutes),
     ).protocols(httpProtocol))
    

  •  类似资料:
    • 我正试图让盖特林为每个POST请求创建随机数据。我关注了stackoverflow和其他地方的一些帖子。我想出了这个方案- 然而,当我运行这段代码时,它只调用我的feeder一次,以创建一个UUID,并在整个负载测试中重新使用相同的UUID。 在遵循这条线索之后,我创建了上面的代码。我用的是加特林2.2.5。这是我的sbt配置-

    • 我在尝试发送超文本传输协议/2请求时遇到了使用gatling工具的问题。 我在协议设置中启用了超文本传输协议/2设置,甚至添加了映射以确保客户端将使用http2与服务器通信,但仍然使用超文本传输协议/1.1发送请求。 在控制台输出中,您将看到服务器可以使用http2进行通信,但由于某些原因,请求仅使用http1.1发送。 所有标题都是根据浏览器中的标题编写的。 有人能帮我解决这个问题吗? 在控制台

    • **使用Gatling进行随机负载测试**我想测试我构建的API以获得更高的负载,因此,我必须生成大量随机电子邮件(我知道目前服务器上没有电子邮件检查,所以我只创建随机字符串)。我使用的工具是gatling-charts-highcharts-bundle-3.0.0,我查看了关于如何解决这个问题的其他问题和网页,并获得了使用feeders的信息。我尝试了下面的代码,但我不明白为什么总是会出现一个

    • 问题内容: 是否可以使用Python的库发送SOAP请求? 问题答案: 确实有可能。 这是一个使用普通请求lib调用Weather SOAP Service的示例: 一些注意事项: 标头很重要。没有正确的标头,大多数SOAP请求将无法工作。可能是更 正确 使用的标头(但weatherservice更喜欢 这将以xml字符串形式返回响应-然后,您需要解析该xml。 为简单起见,我以纯文本形式包含了该

    • 我跟随BlazeMeter的文章,使用Grafana和InfluxDB监视Gatling测试,但没有数据发送到InfluxDB,也没有创建任何名称为“Graphite”的数据库。inflxdb已启动并侦听端口:2003。这是来自inflxdb的日志: 我将字段设置为: 我错过了什么?

    • 问题内容: 我是Web服务的新手,正在尝试使用python脚本发送以下基于JSON的请求: 如果我将以上内容粘贴到浏览器中,它将按预期工作。但是,我正在努力从Python发送请求。以下是我正在尝试的: 如何将apikey数据添加到请求中? 谢谢! 问题答案: 代替使用urllib2,您可以使用request。这个新的python lib确实写得很好,并且使用起来更加简单直观。 要发送json数据,