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 @   webzd  阅读(393)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示