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

karate:在javascript中将字符串转换为karate本机变量

华衡
2023-03-14

我们的测试自动化需要与kafka交互,我们正在研究如何用空手道来实现这一点。

我们有一个java类,它从kafka读取并将记录放入内部列表中。我们然后从空手道中要求这些记录,从后台流量中过滤掉所有消息,并返回与我们的过滤器匹配的第一条消息。

所以我们的消费者看起来是这样的(简化的):

// consume.js
function(bootstrapServers, topic, filter, timeout, interval) {
  var KafkaLib = Java.type('kafka.KafkaLib')
  var records = KafkaLib.getRecords(bootstrapServers, topic)

  for (record_id in records) {
    // TODO here we want to convert record to a json (and later xml for xml records) so that
    // we can access them as 'native' karate data types and use notation like: cat.cat.scores.score[1]
    var record = records[record_id]
    if (filter(record)) {
      karate.log("Record matched: " + record)
      return record
    }
  }

  throw "No records found matching the filter: " + filter
}

记录可以是json、xml或纯文本,但现在查看的是json案例。在本例中,假设在kafka中有这样的消息:{“correlationId”:“b3e6bbc7-e5a6-4b2a-a8f9-a0ddf435de67”,“text”:“hello world”}这将作为字符串加载到上面的record变量中。

我们想要将其转换为json,这样像这样的过滤器就可以工作了:

* def uuid = java.util.UUID.randomUUID() + ''
# This is what we are publishing to kafka
* def payload = ({ correlationId: uuid, text: "Hello world" })
* def filter = function(m) { return m.correlationId == uuid }

有没有方法在JavaScript中将字符串转换为原生空手道变量?在查看https://intuit.github.io/karate/#the-karate-object时可能会错过它。顺便说一下,var jsonRecord=karate.tojson(record)不起作用,jsonRecord.uuid未定义。

编辑:我在这里给出了一个我试图实现的示例:https://github.com/kostaskgr/karate-issues/blob/java_json_interop/src/test/java/examples/consumption/consump.feature

多谢

共有1个答案

凤自珍
2023-03-14

一段时间前,我做了一个东西,可以用来测试Kafaka从空手道。请看看https://github.com/sdaas/karate-kafka是否有帮助。如果对你有帮助,很乐意提高/改进。

 类似资料:
  • 问题内容: 我一直在寻找解决方案,但找不到任何可行的方法。 我有一个名为的变量。 字符串被传递给函数。我想将函数内部的变量设置为某种值。我怎样才能做到这一点? (可以在函数中调用许多变量,因此我需要它动态地工作,而不是硬编码的语句。) 编辑:可能有更好的方法来做您要尝试做的事情。 我在JavaScript冒险的早期就曾问过这个问题。查看JavaScript对象的工作方式。 一个简单的介绍: 问题答

  • 问题内容: 如何在JavaScript中将字符串转换为日期? 问题答案: 字符串解析的最佳字符串格式是日期ISO格式以及JavaScript Date对象构造函数。 ISO格式的示例:或。 可是等等! 仅仅使用“ ISO格式”本身不能可靠地工作。字符串有时会解析为UTC,有时会解析为本地时间(基于浏览器供应商和版本)。最佳做法应始终是将日期存储为UTC并进行计算为UTC。 要将日期解析为UTC,请

  • 问题内容: 我想将python变量名称转换为等效的字符串,如图所示。有什么想法吗? 问题答案: TL; DR:不可能。参见最后的“结论”。 在一个使用场景中,您可能需要此场景。我并不是在暗示没有更好的方法或实现相同的功能。 为了在调试,模式和其他类似情况下出现错误时“转储”任意词典列表,这将很有用。 需要的是该功能的反向功能: 它将以标识符名称(“变量”,“字典”等)作为参数,并返回包含标识符名称

  • 问题内容: 我有类似的问题,但是我不知道这个词是什么 它应该打印出来 所以我想知道是否有实际的方法或函数可以用来检索用作字符串的变量名。 问题答案: 您基本上是在问“我的代码如何发现对象的名称?” 一个报价从弗雷德里克Lundh开发(在comp.lang.python)是 特别 适用于本案。 获得在门廊上找到的那只猫的名字的方法相同:猫(对象)本身无法告诉您它的名字,并且它并不在乎–因此,找出猫叫

  • 问题内容: 如何将字节数组转换为字符串? 我发现这些功能相反: 但是,如何使功能以其他方式起作用? 谢谢。 o 问题答案: 您需要将每个八位位组解析回数字,并使用该值来获取字符,如下所示: 编辑: 是的,您的当前时间可以写得更短: 但是通过查看您链接的文档,我认为该方法期望blob数组包含十进制数字,而不是 位字符串 ,因此您可以编写如下内容:

  • 问题内容: 我有与此类似的要求:将HH:MM:SS格式的时间仅转换为秒? 但在javascript中。我已经看到了许多将秒转换为不同格式的示例,但没有将HH:MM:SS转换为秒的示例。任何帮助,将不胜感激。 问题答案: 尝试这个: