向Gatling发送随机请求

By simon at 2018-02-07 • 0人收藏 • 69人看过

我有一个Json请求文件的文件中的文件。我想基准一个 Web每秒发送一个固定数量的请求, 使用 constantUsersPerSec(..)。 但是,每次发送请求时,我都希望将其从列表中删除 的请求(随机,或循环,我不在乎)。 我无法弄清楚如何用加特林做到这一点。使用下面的代码 请求是r随机选择一次,同样的请求被反复发送 再次。这不是我想要的 我的代码:

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 个回复 | 最后更新于 2018-02-07
2018-02-07   #1

第一步:在我的情况下创建输入是堆栈。下面只是一个方法 可以使用你自己的实现

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 } } }
希望这有助于你继续前进。

2018-02-07   #2

为了完整起见,我想分享Domingos Creado在Gatling Google上的答案 为我工作的小组。

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

2018-02-07   #3

我看到你有一个文本文件* bodies.txt *请求。为了你的任务我 会使用[Feeder](https://gatling.io/docs/2.3/advanced_tutorial /)(检查 步骤03)。使用进纸器,您可以从项目列表中检索随机项目 并在您的通话中使用它。钍您必须采取措施才能使其工作:   1.把你的文本文件转换成一个csv文件,一个csv文件只需要一个头文件和值。每个值一行。假设你把头部的名字叫做“请求”。   2.创建一个饲养者:

val random_request = csv("bodies.csv").random
  3.编辑视觉的:
 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))

登录后方可回帖

Loading...