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

Gatling中的简单进纸器,无需使用csv文件

姚麒
2023-03-14

如何在Gatling中创建一个简单的进纸器而不使用csv文件?我尝试了Gatling留档中的脚本。我在留档中看到了一个例子

val random = new util.Random
val feeder = Iterator.continually(Map("email" -> random.nextString(20) + "@foo.com"))

我不明白上面的代码。

我尝试了一个带有使用csv文件的进纸器的脚本并成功执行。与其从csv文件中馈送数据,不如如何编写可以取定义值的进纸器。

共有1个答案

亢胤运
2023-03-14

正如docs所述,提要只是迭代器[Map[String,T]]的别名。你只需要确保你的feeder提供了一个无限的价值流,正如Rüdiger Klaehn所强调的那样。

既然你说你已经能够使用内置的csv feeder运行一个示例,那么让我们把它转换成我们自己的feeder,这样就更清楚上面的自定义feeder代码是做什么的。

让我们看一下高级教程中的示例:

object Search {

  val feeder = csv("search.csv").random // 1, 2

  val search = exec(http("Home")
    .get("/"))
    .pause(1)
    .feed(feeder) // 3
    .exec(http("Search")
    .get("/computers?f=${searchCriterion}") // 4
    .check(css("a:contains('${searchComputerName}')", "href").saveAs("computerURL"))) // 5
    .pause(1)
    .exec(http("Select")
    .get("${computerURL}")) // 6
    .pause(1)
}

这是生成提要的部分:

  val feeder = csv("search.csv").random // 1, 2

这是search.csv文件:

searchCriterion,searchComputerName
Macbook,MacBook Pro
eee,ASUS Eee PC 1005PE

让我们用新的定制进料器来代替它:

/* This is our list of choices, we won't ready from csv anymore */
val availableComputers = List(
  Map("searchCriterion" -> "MacBook", "searchComputerName" -> "Macbook Pro"),
  Map("searchCriterion" -> "eee", "searchComputerName" -> "ASUS Eee PC 1005PE")
)

/* Everytime we call this method we get a random member of availableComputers */
def pickARandomComputerInfo() = {
  availableComputers(Random.nextInt(availableComputers.size))
}

/* Continually means every time you ask feeder for a new input entry, 
   it will call pickARandomComputerInfo to gerenate an input for you.
   So iterating over feeder will never end, you will always get
   something */
val feeder = Iterator.continually(pickARandomComputerInfo)

这在您提供的示例中很难看到,但您可以将其拆分以更好地理解它:

def getRandomEmailInfo() = Map("email" -> random.nextString(20) + "@foo.com")
val feeder = Iterator.continually(getRandomEmailInfo)
 类似资料:
  • 我有一个非常简单的场景,可以从只包含一个标题为的列的CSV文件中获取随机值。然后,我想把这个值粘贴到POST请求的主体中。我的请求主体的示例如下:。因此,我需要使用CSV文件中的值,而不是。以下是我的反馈和场景: 这个例子是我迄今为止所做的最接近的实现。但它并不像我预期的那样有效。我无法将进纸器中的值粘贴到

  • 为了在运行性能脚本之前用大量数据填充系统,我们理想的用例是使用Gatling。数据不需要不同,除了具有唯一的主ID。 上面的示例可以通过更改的值来创建任意数量的对象,但是在大范围(例如100000个对象)下,线性地这样做变得不切实际。所以我想做的是有一个共享的对象池,由100个用户创建。 当然,这就是喂食器的使用案例。而不是生成一个静态的或使用使用简单的迭代循环(例如到)似乎最简单。 我知道(从文

  • 我有一个CSV文件,其中有大约10K个条目(我的会话的请求有效负载)。我正在使用内置的CSV进纸器在我的请求中循环遍历所有这些条目。但是只执行与测试中的用户数相对应的请求数。我希望整个提要都被执行。 例如,如果我有10个用户,那么在运行时只获取CSV的前10条记录。 这是我的代码:

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

  • 我是Gatling和Scala的新手,我正在尝试创建一个测试,它有一个自定义的“feeder”,允许每个负载测试线程使用(并重用)大约250个json数据文件中的一个作为post负载。 每个post有效载荷文件有1000条以下表格记录: (每个文件约250kB) 理想情况下,我想在测试开始时像这样阅读它们: 然后通过以下方式获取文件内容: 我现在正忙于让这段代码在scala中工作,但我想知道几件事

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