Karate 如何使用空手道框架将字节数组作为Json的一部分发送

Karate 如何使用空手道框架将字节数组作为Json的一部分发送,karate,Karate,我有一个端点,它使用带有两个属性的Json,比如 {id='12344', data=byte_array} 所以我写了一个测试 Feature: submitted request Scenario: submitted request * def convertToBytes = """ function(arg) { var StreamUtils = Java.type('my.utils.StreamUtils'); // it reads stream and

我有一个端点,它使用带有两个属性的Json,比如

{id='12344', data=byte_array} 
所以我写了一个测试

Feature: submitted request

Scenario: submitted request
* def convertToBytes =
"""
function(arg) {
    var StreamUtils = Java.type('my.utils.StreamUtils');
    // it reads stream and convert it to a byte array
    return StreamUtils.getBytes(arg);
}
"""

 Given url 'http://my-server/post'
 And def image = convertToBytes(read('classpath:images/image_1.jpg'));
 And request {id:1, data: "#(image)"}
 When method POST
 Then status 200
然而,空手道却有一个例外,没有太多细节

ERROR com.intuit.karate - http request failed: [B cannot be cast to [Ljava.lang.Object;

有关于如何使用空手道将字节数组作为Json的一部分提交的文章吗?

我认为你做不到。或者是(字节数组),或者是执行多部分请求,其中二进制是Base64编码的。据我所知,你不能把二进制放在JSON里面。但是有一种叫做

编辑:假设字节[]必须进行Base64编码后:

Background:
    * url demoBaseUrl
    * def Base64 = Java.type('java.util.Base64')

Scenario: json with byte-array
    Given path 'echo', 'binary'
    And def encoded = Base64.encoder.encodeToString('hello'.bytes);
    And request { message: 'hello', data: '#(encoded)' }
    When method post
    Then status 200
    And def expected = Base64.encoder.encodeToString('world'.bytes);
    And match response == { message: 'world', data: '#(expected)' }

我刚刚把这个测试添加到空手道演示中,效果很好。这是答案。

我认为你做不到。或者是(字节数组),或者是执行多部分请求,其中二进制是Base64编码的。据我所知,你不能把二进制放在JSON里面。但是有一种叫做

编辑:假设字节[]必须进行Base64编码后:

Background:
    * url demoBaseUrl
    * def Base64 = Java.type('java.util.Base64')

Scenario: json with byte-array
    Given path 'echo', 'binary'
    And def encoded = Base64.encoder.encodeToString('hello'.bytes);
    And request { message: 'hello', data: '#(encoded)' }
    When method post
    Then status 200
    And def expected = Base64.encoder.encodeToString('world'.bytes);
    And match response == { message: 'world', data: '#(expected)' }

我刚刚把这个测试添加到空手道演示中,效果很好。这是。

不,这不是我的解决方案,因为请求是json,其中包含一些二进制数据。我和泽西没什么问题,所以服务人员之间的沟通很好。现在我需要写一些集成测试,看起来空手道在这方面不灵活,非常感谢你的回答!他,这里是我如何用jersey序列化数据:@JsonProperty(“data”)byte[]getData();其余的是非常常见和默认的。你的例子是无效的,空手道grpc不是空手道,而是其他东西。我可以创建我的胶水代码并使用它。。。完全没有空手道。@osigida太棒了!不,这不是我的解决方案,因为请求是json,其中包含一些二进制数据。我和泽西没什么问题,所以服务人员之间的沟通很好。现在我需要写一些集成测试,看起来空手道在这方面不灵活,非常感谢你的回答!他,这里是我如何用jersey序列化数据:@JsonProperty(“data”)byte[]getData();其余的是非常常见和默认的。你的例子是无效的,空手道grpc不是空手道,而是其他东西。我可以创建我的胶水代码并使用它。。。完全没有空手道。@osigida太棒了!