Automated tests 空手道:在javascript中将字符串转换为空手道本机变量

Automated tests 空手道:在javascript中将字符串转换为空手道本机变量,automated-tests,karate,Automated Tests,Karate,我们的测试自动化需要与卡夫卡互动,我们正在研究如何通过空手道实现这一点 我们有一个java类,它读取kafka的内容,并将记录放入内部列表中。然后,我们从空手道中请求这些记录,过滤掉后台流量中的所有消息,并返回与我们的过滤器匹配的第一条消息 因此,我们的消费者看起来像这样: // consume.js function(bootstrapServers, topic, filter, timeout, interval) { var KafkaLib = Java.type('kafka.K

我们的测试自动化需要与卡夫卡互动,我们正在研究如何通过空手道实现这一点

我们有一个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案例。 在这种情况下,鉴于卡夫卡有这样一个信息: {correlationId:b3e6bbc7-e5a6-4b2a-a8f9-a0ddf435de67,文本:Hello world} 这将作为字符串加载到上面的记录变量中

我们希望将其转换为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中将字符串转换为本机空手道变量?可能没看到。顺便说一下,var jsonRecord=karate.toJsonrecord不起作用,jsonRecord.uuid未定义

编辑:我在这里举了一个我想要实现的例子:

非常感谢你能试试吗

* json payload = { correlationId: uuid, text: "Hello world" }
参考:

对于javascript中的类型转换,理想情况下karate.toMapobject或karate.toJsonobject应该是

我建议将调用记录的部分保留在JS之外,让空手道来执行,而不是将所有内容都封装到一个JS函数中

* json records = Java.type('kafka.KafkaLib').getRecords(bootstrapServers, topic)
* consume(records, filter, timeout, interval)
你能试试吗

* json payload = { correlationId: uuid, text: "Hello world" }
参考:

对于javascript中的类型转换,理想情况下karate.toMapobject或karate.toJsonobject应该是

我建议将调用记录的部分保留在JS之外,让空手道来执行,而不是将所有内容都封装到一个JS函数中

* json records = Java.type('kafka.KafkaLib').getRecords(bootstrapServers, topic)
* consume(records, filter, timeout, interval)

正如在另一个答案的评论中提到的,现在有一张空手道的增强票,以实现本文中讨论的内容,请参阅

在这之前,我通过在Java中将字符串解析为JSON并将其返回给空手道,获得了关于JSON的大部分我想要的东西

Map<String,Object> result = new ObjectMapper().readValue(record, HashMap.class);
不确定是否可以为xml解决同样的问题

您可以在此处看到正在运行的解决方案:

正如另一个答案的评论中提到的,现在有一张空手道强化票,以实现本帖中讨论的内容,请参阅

在这之前,我通过在Java中将字符串解析为JSON并将其返回给空手道,获得了关于JSON的大部分我想要的东西

Map<String,Object> result = new ObjectMapper().readValue(record, HashMap.class);
不确定是否可以为xml解决同样的问题

您可以在此处看到正在运行的解决方案:

不久前,我制作了一个可以从空手道中测试卡夫卡的东西。请看是否有帮助。如果它对你有帮助的话,我很高兴能加以改进。

不久前,我准备了一个可以从空手道内部测试卡夫卡的东西。请看是否有帮助。如果它对您有帮助,我很高兴对您进行增强/改进。

Hello@Babu,感谢您的回复,我想在使用javascript函数时实现这一点。我上传了一个简化的示例来展示我的问题:是否可以更改KafkaLib.getRecords ti返回列表而不是列表?您好,Babu,我们不知道这些记录将是什么,例如,在某些情况下,它们将是json,而在其他情况下是xml。我们的java消费代码不知道具体细节,所以justs作为字符串读取,以便能够正常工作。当工程师测试一个特定的案例时,他们将了解更多,并且他们可以使用这些知识编写过滤器及其匹配和断言。此外,我们还试图使语法尽可能简单,以便我们组织中更多的人能够参与进来。我们可以尝试在java类中添加更多的方法,例如getRecordsAsJson、getRecordsAsXml,并将我们想要的类型传递给可重用的Consumer.Feature,它假设主题中的消息是同质的,这听起来很公平。但是,如果我们可以重用def X=。。。使用来派生类型似乎更可取。我需要试一试上面的内容,看看它作为DSL的感觉如何,如果works@KonstantinosKollias空手道开发人员-我愿意添加一些JS助手。空手道的逻辑非常简单——如果它以Hello@Babu开头,感谢您的回复,我想在javascript函数中实现这一点。我上传了一个简化的示例来展示我的问题:是否可以更改KafkaLib.getRecords ti返回列表而不是列表?您好,Babu,我们不知道这些记录将是什么,例如,在某些情况下,它们将是json,而在其他情况下是xml。我们的java消费代码不知道具体细节,所以justs作为字符串读取,以便能够正常工作。当工程师测试一个特定的案例时,他们将了解更多,并且他们可以使用这些知识编写过滤器及其匹配和断言。此外,我们还试图使语法尽可能简单,以便组织中有更多的人参与进来。我们可以尝试在java类中添加更多的方法,例如getRecordsAsJson、getRecordsAsXml,并将所需的类型传递给可重用的Consumer.Feature,它假设主题中的消息是同质的,这听起来很奇怪
ir。但是,如果我们可以重用def X=。。。使用来派生类型似乎更可取。我需要试一试上面的内容,看看它作为DSL的感觉如何,如果works@KonstantinosKollias空手道开发人员-我愿意添加一些JS助手。空手道的逻辑非常简单-如果它以Hello@sdaas开头,谢谢你的反馈!我看了自述,很有趣!你还在积极地测试卡夫卡吗?我做了一些类似的东西,但只有引导服务器是可配置的。然而,在消费者方面,我一直在努力实现以下目标,但仍在不断发展。如果你在空手道松弛给我留言!抱歉@KonstantinosKollias,离开了一段时间,没有看到这个。我再次重新启动了空手道卡夫卡的开发,与上面的链接相同。是的,我在空手道松弛-我会给你一个便条。您好@sdaas,谢谢您的反馈!我看了自述,很有趣!你还在积极地测试卡夫卡吗?我做了一些类似的东西,但只有引导服务器是可配置的。然而,在消费者方面,我一直在努力实现以下目标,但仍在不断发展。如果你在空手道松弛给我留言!抱歉@KonstantinosKollias,离开了一段时间,没有看到这个。我再次重新启动了空手道卡夫卡的开发,和上面的链接相同。是的,我在空手道松弛-我会给你一个便条。