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

带gRPC的转管给料机中的访问变量

苏彦君
2023-03-14

我正试图通过从csv文件中读取数据来创建我的gRPC有效载荷(它有guestID和category列)。我在这里遵循了这个例子https://github.com/phiSgr/gatling-grpc/blob/244ab372da6773102d79c65a7e4086f409d3fe94/src/test/scala/com/github/phisgr/example/GrpcExample.scala但是当我尝试同样的方法时,我看到了一个类型不匹配错误。(它需要Seq[ContextKey],但在这里我可以形成Seq[Expression[ContextKey])

val scn2: ScenarioBuilder = scenario("gRPC call - 50 users repeated 100 times")
  .feed(csv("testtext.csv"))
  .exec(
    grpc("gRPC request with test message")
      .rpc(RecommenderGrpc.METHOD_GET_RECOMMENDATIONS)
      .payload(RequestContext.of(Map("test" -> "test"),
        Seq(ContextKey.defaultInstance.updateExpr(
          _.id :~ $("guestID"),
          _.`type` :~ Type.GUEST
        ), ContextKey.defaultInstance.updateExpr(
          _.id :~ $("category"),
          _.`type` :~ Type.CATEGORY
        )),
        Seq())
      )
  )

(有效负载是一个请求上下文对象,它接收元数据、键和项目。元数据是一个映射,键是ContextKey的Seq,项目是空的Seq。ContextKey包含字符串guestID或类别和类型)。

如何在这里使用进纸器中的变量?

共有1个答案

胡飞舟
2023-03-14

跳转到底部寻找解决方案。

Expression[T]是会话的别名=

你可以考虑一个表达式[T],抽象地“包含”一个T

比如JavaScript中的promise如何“包含”未来价值。你不能给一个需要T的函数一个promiseT。如果想要转换或组合Promises,必须将该代码从内到外转换,并作为的参数提供。然后1

aPromise + 1 // wrong
aPromise.then(a => a + 1)

这与您的代码示例不编译的原因相同。

Gatling的用户不一定熟悉Scala或一般的函数式编程。让他们理解这种“包装”的东西会适得其反。2所以有代码可以帮助您组合表达式s。

对于HTTP和其他非类型化的东西,EL字符串被解析并转换为一个表达式。

Protobuf消息是强类型的,使用字符串插值无法轻松构造有效负载。因此,透镜上的:~操作符用于处理管道,这样您就不必手动处理表达式包装。

但是现在您有了一个函数,Request estContext.of,它可以构造有效负载。如果您需要该函数,镜头魔法无能为力。您必须自己编写表达式lambda。3

.payload { session =>
  for {
    guestId <- session("guestId").validate[String]
    category <- session("category").validate[String]
  } yield RequestContext.of(
    Map("test" -> "test"),
    Seq(
      ContextKey(id = guestID, `type` = Type.GUEST),
      ContextKey(id = category, `type` = Type.CATEGORY)
    ),
    Seq()
  )
}

>

表达式只是要么monad和Readermonad堆叠在一起,有什么问题?

如果我知道什么是RequestContext,我可能会写一个带有镜头的版本。当然了。

 类似资料:
  • 我正在寻找帮助,以创建简单的馈线从0递增一个整数。我发现了很多feeder示例,可以生成随机UUID、电子邮件和字符串。。。我看了文档,但没有看到增量整数(我觉得与一些相关,但我不能有任何有效的东西),我不想在“ïnfinite”行中创建一些CSV或文件。 所以我所拥有的是 谢谢你的帮助

  • 我有一个巨大的csv文件作为原始数据源(14 gb)。我想创建一个场景,其中每个请求都包含来自csv的元素,解析为JSON对象并包装为JSON数组。 我现在尝试的是使用预处理我的csv文件,并将其转储到单列下的新csv文件中,如下所述:https://stackoverflow.com/a/65845365/2290763 然后我使用我的输出csv文件(50gb)作为Gatling进纸器,并将该单

  • 一些秘密需要通过PODS获取,秘密存储在GCP秘密管理器中,什么是安全有效的方法来获取pod中的秘密? 谢谢你!

  • 问题内容: 使用Jenkins 2.x中 的Pipeline插件,如何从一个步骤中访问在阶段或节点级别某个位置定义的Groovy变量? 简单的例子: 在Jenkins输出页面上给出以下内容: 可以看到,在该步骤中将打印一个空字符串。 解决方法是通过以下方式在环境范围内定义变量 并通过打印 但是,这种滥用会破坏此任务的环境范围。 问题答案: 要使用可模板化的字符串(将变量替换为字符串),请使用双引号

  • 所以,我认为管道选项会很好,我只是在模板编译时或运行时传递一个不同的参数,但我要花很长时间访问par.do转换我需要的地方。如果我使用默认运行器并在本地运行管道,它可以正常工作,但是当我切换并构建模板时,值总是。我可以用下面的代码复制它: 云中的输出是: 但在当地: 对于本地: 当我在Dataflow控制台(浏览器)中的参数字段中创建作业时,我尝试将参数传递给作业和,但仍然显示为null。 很抱歉

  • 使用最新版本的6.2,对JBPM来说是相当新的。我正在尝试建立一个进程,通过该进程,我可以在打开某些(自定义)任务类型时调用遗留平台的REST API,并在它们完成时再次通过异步进程在未来的某个时间点。 在较高级别上,该过程应类似于: 旧版应用程序- 旧版应用程序- 我已经创建并注册了一个ProcessEventListener,并在AfterNode触发事件中创建了一个钩子来调用特定类型的节点。