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

Gatling更新文件,用于在调用前在feed()中馈送模拟

孙梓
2023-03-14

我需要更新包含Gatling模拟中使用的一些id的. csv文件,因为我需要事先创建数据。我试图在前()调用中更新该文件,但它不起作用。懒惰评估也不起作用。

  before {
    Helper.CreateDocuments()
  }

  lazy val documentIds = csv("data/documentIds.csv").circular

  val scn: ScenarioBuilder = scenario("PutFile")
    .feed(documentIds)
    .exec(http("Dynamic id")
      .put("files/${documentId}"))...

我怎样才能解决这个问题,用刷新的ID为模拟提供数据?

共有2个答案

秦楚
2023-03-14

您应该能够在步骤中修改csv文件。例如:

  before {
    val pw = new PrintWriter(new File("data.csv"))
    for (i <- 0 to 10) {
      pw.write(i + "\n")
    }
    pw.close
  }

记得导入库导入java.io._

然后在模拟中使用它调用文件:

val orderId = csv("data.csv").queue

但是,这可能是多余的,因为您可以使用saveAs步骤创建值,如Gatling会话API文档中所述。例如,您可以执行以下操作:

val someHttpCall = http("Create data for the feeder").get("/my/resource").saveAs("data")

然后在进料器中使用:

val scn = feed(data).exec(somethingElse)

如果这还不够,请记住,您还可以在simulation类中的任意点创建自己的馈线。

晁开宇
2023-03-14

我遇到过类似的问题,然后我决定不使用CSV,而是使用隐式馈线,并创建一个构建馈线的方法。我无法通过使用前钩子来解决这个问题,因此为我的馈线创建了一个构建器方法。它将如何工作的示例。

import io.gatling.core.Predef._
import io.gatling.core.structure.ChainBuilder
import io.gatling.http.Predef._
import org.apache.http.client.methods.{HttpGet, HttpPost}
import org.apache.http.entity.StringEntity
import org.apache.http.impl.client.HttpClientBuilder
import org.apache.http.util.EntityUtils
import spray.json.DefaultJsonProtocol._
import spray.json._

object TestFacade {    
var test_feeder = getFeeder()
    
      val test_scenario: ChainBuilder = feed(test_feeder).group("TEST_GROUP") {
        exec(
          http("POST /test")
            .post("/test")
            .header("Content-Type", Configuration.APPLICATION_JSON)
            .body(ElFileBody("test.json"))
            .asJSON
            .check(status.find.in(200))
        )
      }
    
      def getFeeder() = {
        val result = getRestContent("http://www.randomnumberapi.com/api/v1.0/random?min=100&max=1000&count=5")
    
        val ids = result.parseJson.convertTo[Array[Int]]
        var coolVars = Array.empty[Map[String, String]]
    
        for (id <- ids) {
          println(id)
          coolVars = coolVars :+ Map("coolVar" -> id.toString)
        }
    
        coolVars.random
      }
      
      def getRestContent(url: String): String = {
        val httpClient = HttpClientBuilder.create().build()
        val httpResponse = httpClient.execute(new HttpGet(url))
        val entity = httpResponse.getEntity
        var content = ""
        if (entity != null) {
          content = EntityUtils.toString(entity, "UTF-8")
        }
        httpClient.getConnectionManager.shutdown()
    
        content
      }
}
 类似资料:
  • 我使用CSV馈送器来馈送多个模拟。当使用gatlingRun运行时,每个模拟从一开始就开始读取文件。我将进料器保存在对象变量中(必须像静态变量一样): 有没有办法让所有模拟都使用相同的馈线实例,或者让每个实例在其他实例完成的地方继续?

  • 问题内容: 我想用一个新的 jar* 更新一个 .class 文件。什么是最简单的方法,尤其是在Eclipse IDE中? * 问题答案: 本教程详细介绍了如何更新jar文件 其中“ u”表示更新。

  • 问题内容: 我有一个表Product,该表显示一组产品的信息。 我正在使用下面的Ajax调用您更新表。 如何在我的Ajax调用中使用“结果”更新变量product_list? 这应该更新表吧? 谢谢 问题答案: 你不能这样。更好的方法是通过ajax加载html的那部分。 您的ajax视图: 您的主要html: table_body.html: 您的ajax看起来像这样: 你在这里使用这个load(

  • 我想在运行Gatling场景期间更改令牌,因为我想与不同的用户进行测试,这是我的HTTP协议: 如何在

  • 我有一个问题,通过phpmailer脚本发送带有附件的电子邮件。我有一个工作代码,如果我想添加一个单一的文件到邮件。但是当涉及到多个文件时,看起来它们甚至没有上传。 单个文件的我的代码: } 我尝试了一些代码,这些代码应该循环遍历$\u文件中的所有文件,但没有成功。然后我测试了以下代码: 它返回0。我知道$\u文件是空的,但我不知道原因。我需要缓冲文件或类似的东西吗? 编辑:这是我的html代码,

  • 如何在gatling模拟中运行多个空手道功能文件? 以下是我gatling模拟的代码片段: 我每次只能运行一个功能文件,如下所示: