放心 - 无法使用参数和正文开机自检

2022-09-03 17:30:39

我正在使用 Rest Assured 测试 REST api。我在尝试使用URL和正文内容中的参数进行POST时遇到错误。这在手动测试时工作正常。删除 url 形式的参数不是一个选项

测试代码:

String endpoint = http://localhost:8080/x/y/z/id?custom=test;
String body = "[{\"boolField\":true,\"intField\":991},
                {\"boolField\":false,\"intField\":998}]";
expect().spec(OK).given().body(body).post(endpoint);

这会在运行时引发以下错误

You can either send parameters OR body content in the POST, not both!

java.lang.IllegalStateException: You can either send parameters OR body content in the POST, not both!
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:77)
at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrapNoCoerce.callConstructor(ConstructorSite.java:102)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:198)
at com.jayway.restassured.internal.RequestSpecificationImpl.sendRequest(RequestSpecificationImpl.groovy:282)
at com.jayway.restassured.internal.RequestSpecificationImpl.this$2$sendRequest(RequestSpecificationImpl.groovy)
at com.jayway.restassured.internal.RequestSpecificationImpl$this$2$sendRequest.callCurrent(Unknown Source)
at com.jayway.restassured.internal.RequestSpecificationImpl.post(RequestSpecificationImpl.groovy:83)
...

为什么放心不允许在 POST 中同时显示参数和正文内容?


答案 1

您需要将参数指定为 queryParameter,而不是“param”或“parameter”。POST 的参数将默认为在请求正文中发送的表单参数。

given().
        queryParam("name, "value").
        body(..).
when().
        post(..);

答案 2

我不太熟悉放心,但你应该能够将这些参数移动到身体上。这就是典型的 POST 参数的工作原理。将参数作为请求 URL 的一部分通常只对 GET 执行。也许尝试让“custom=test”成为身体的第一行?