Spring boot利用TestRestTemplate+junit5编写控制层的API单元测试


模拟真实的HTTP请求,包括token的验证,请求头的包装,利用HttpEntiy封装请求体和请求头

package com.nesun.vulnchecker.controller.test;


import com.alibaba.fastjson.JSONObject;
import com.nesun.vulnchecker.config.QueryConfig;
import com.nesun.vulnchecker.model.bean.LoginRequest;
import mrRobot.UtilFunInter;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.boot.web.client.RestTemplateBuilder;
import static org.junit.jupiter.api.Assertions.*;
import org.springframework.http.*;
import java.time.Duration;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public class ApplicationTests implements UtilFunInter {

RestTemplateBuilder builder = new RestTemplateBuilder().setReadTimeout(Duration.ofSeconds(5000));
TestRestTemplate restTemplate = new TestRestTemplate(builder);

QueryConfig queryConfig = new QueryConfig();

HttpHeaders headers = new HttpHeaders();

String URL = "http://127.0.0.1:2224";

HttpEntity request;

@BeforeEach
public void init() throws Exception {
System.out.println("开始测试-----------------");
//设置登录
LoginRequest loginRequest = new LoginRequest();
loginRequest.setUsername("admin");
loginRequest.setPassword("admin");
loginRequest.setTest(true);
HttpEntity<LoginRequest> requestHttpEntity = new HttpEntity<>(loginRequest,headers);
ResponseEntity<JSONObject> requestResult = restTemplate.postForEntity(URL+"/web/login/userLogin",requestHttpEntity,
JSONObject.class);
String headerValue = requestResult.getHeaders().get("Set-Cookie").toString().replace("[", "");//构建请求cookie
        headerValue = headerValue.replace("]", "");
JSONObject object = requestResult.getBody();
if(object != null){
String token = (String) object.get("token");
assertNotNull(token);
System.out.println("token:"+token);
headers.add(HttpHeaders.COOKIE,headerValue);
headers.add("Authorization","Bearer "+token);
request = new HttpEntity<QueryConfig>(queryConfig,headers);
}
}

@AfterEach
public void after() {
System.out.println("测试结束-----------------");
}

  
@Test
void getDomainList(){
ResponseEntity<String> requestResult = restTemplate.postForEntity(URL+"/web/domain/getDomainList",request,
String.class);
assertEquals(HttpStatus.OK,requestResult.getStatusCode().OK);
}

}
posted @ 2022-03-28 16:23  webzd  阅读(408)  评论(0)    收藏  举报