我使用的是junit4提供的restassured。在我的测试方法中,我在mongodb中创建了一个对象,当我运行测试时,它也成功地持久化了。但是我需要存储创建的id,所以我尝试获取响应体。但是< code>response.getBody()。asString()为空。
@Test
public void testA() throws JSONException {
Map<String,Object> createVideoAssignmentParm = new HashMap<String,Object>();
createVideoAssignmentParm.put("test1", "123");
Response response = expect().statusCode(201).when().given().contentType("application/json;charset=UTF-8")
.headers(createVideoAssignmentParm).body(assignment).post("videoAssignments");
JSONObject jsonObject = new JSONObject(response.getBody().asString());
id= (String)jsonObject.getString("assignmentId");
}
当我从外部调用restendpoint时,它会返回带有相关字段的响应体,因此rest API没有问题。
如果上述问题没有答案,那么你们将如何测试带有返回身体的帖子,请放心,以便我可以尝试这种方式。
我的控制器方法看起来像,
@RequestMapping(value = "/videoAssignment", produces = APPLICATION_JSON_VALUE, consumes = APPLICATION_JSON_VALUE, method = RequestMethod.POST)
@ResponseBody
public HttpEntity<VideoAssignment> createVideoAssingnment(
//@ApiParam are there..){
//other methods
return new ResponseEntity<>(va, HttpStatus.CREATED);
}
您可以尝试log(). all()方法来检查response.The以下cide片段的内容可能会对您有所帮助。
@Test
public void test(){
Map<String,Object> createVideoAssignmentParm = new HashMap<String,Object>();
createVideoAssignmentParm.put("test1", "123");
Response response=given()
.spec(request)
.contentType(ContentType.JSON)
.body(assignment)
.post("videoAssignments");
response.then()
.statusCode(201).log().all();
assignmentId=response.path("assignmentId");
}
这就是REST-Asure的亮点,它流畅的界面对于找到要使用的正确方法非常有帮助。如果您使用的是Spring Boot,测试应该在不添加依赖项或配置的情况下工作(当然,除了放心:)
示例控制器
@RestController
@RequestMapping("/api")
public class Endpoints {
public static class Assignment {
public int id = 1;
public String name = "Example assignment";
}
@RequestMapping(value = "/example",
method = RequestMethod.POST,
produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Assignment> example(@RequestBody Assignment assignment) {
return ResponseEntity.created(URI.create("/example/1"))
.body(assignment);
}
}
并测试:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
@IntegrationTest("server.port:0")
public class EndpointsTest {
@Autowired
private ObjectMapper objectMapper;
@Value("${local.server.port}")
private int port;
@Before
public void setUp() {
RestAssured.port = port;
}
@Test
public void exampleTest() throws Exception {
Endpoints.Assignment assignment =
given()
.contentType(ContentType.JSON)
.body(objectMapper.writeValueAsBytes(new Endpoints.Assignment()))
.when()
.post("/api/example")
.then().statusCode(HttpStatus.SC_CREATED)
.extract().response()
.as(Endpoints.Assignment.class);
// We can now save the assignment.id
assertEquals(1, assignment.id);
}
}
我们使用不同的wat调用重新发布的服务。但是,如果得到一个空字符串,则可以通过使用<code>.peek()
您可以使用此测试:
@Test
public void testStatus()
{
String response =
given()
.contentType("application/json")
.body(assignment)
.when()
.post("videoAssignments")
.peek() // Use peek() to print the ouput
.then()
.statusCode(201) // check http status code
.body("assignmentId", equalTo("584")) // whatever id you want
.extract()
.asString();
assertNotNull(response);
}
我的JSON响应如下所示: 我正在尝试提取成功消息和数据。但是,我的控制台输出保持为null。 提取响应后,我的代码将使用Rest Assured接收空响应: 我对成功和数据的响应均为空
问题内容: 所以我在与node.js一起运行的server.js文件中有以下代码。我正在使用express处理HTTP请求。 我在终端中运行以下命令: 运行该server.js后,将输出以下内容。 所以req.body是。我阅读了其他有关类似问题的Stack Overflow帖子,其中由于正文解析器,内容类型不正确。但这不是问题,因为内容类型是application / json。 有什么想法如何
我如何用放心(2.4.0)检查响应json是否为空列表? 给定响应(带有标头),我尝试了:
所以我想打印响应的结果,然后使用gson为模型生成数据,但响应永远不会得到返回,因为调用了onResponse。! 如果你注意到Logcat,日志。我的回答没有显示。。!?但是在使用该请求的活动的onSuccess中,它通常会显示日志,但是如果日志包含响应对象,它不会显示哪个非常奇怪,也没有任何意义。。!? Logcat公司 我尝试使用具有相同url和参数的PostMan测试请求,它通常返回jso
代码: 我已经检查了代码,但没有发现任何线索,这是什么错误,导致这个空白响应的POST类型,而它的工作良好的GET类型。我认为它应该适用于POST类型,因为代码规范对这两种类型都是正确的。请在此指定任何问题。提前致谢
我一直试图向facebook发送HTTP POST请求,但没有成功。我从服务器收到以下响应: HTTP/1.1 400不良请求内容-类型:text/html;charset=utf-8日期:2016年12月10日星期六21:28:17 GMT连接:关闭内容-长度:2959 Facebook |错误 抱歉,出了点问题,我们正在修理,会尽快修好的 我的密码 我做错了什么?