SpringBootTest MockMVC绑定session(需要登陆的接口)
https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#testing
spring-test+JUnit实现springMVC测试用例
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.0.6.RELEASE</version>
</dependency>
创建spring-test的基类,该类主要用来加载配置文件,设置web环境的,然后所有的测试类继承该类即可,基类BaseTest类代码如下:
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration; @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring.xml","classpath:spring-mybatis.xml"})
@WebAppConfiguration("src/main/webapp")
public class BaseTest { }
@RunWith(SpringJUnit4ClassRunner.class) 使用junit4进行测试
@ContextConfiguration() 加载spring相关的配置文件
@WebAppConfiguration() 设置web项目的环境,如果是Web项目,必须配置该属性,否则无法获取 web 容器相关的信息(request、context 等信息)
https://blog.csdn.net/xingkongdeasi/article/details/79963827
再用 MockMvc 写 web 项目 controller 层的测试用例的时候,碰到登录的问题。
背景: 项目是ssm 架构,权限是用的 keycloak。 在使用 MockMvc 写测试用例,发送http 请求的时候,服务器需要验证用户信息。最开始使用过 header(HttpHeaders.AUTHORIZATION,basicDigestHeaderValue)
和 with(httpBasic(“username”,”password”) 方式在请求中添加 验证信息,但是都是不行,系统报空指针异常,最后发现 spring 有个 WithMockUser 注解可以使用,最后给方法加上 @WithMockUser 注解 成功解决了 登录的问题。

https://blog.csdn.net/sessionsong/article/details/81104906
操作很简单,只需要一个对象:MockHttpSession。
在每次构建请求的时候把session附加进去就行了,下面是示例代码
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class BlackCompanyWebApiTests {
@Autowired
private WebApplicationContext wac; private MockMvc mockMvc;
private MockHttpSession session;// 1.定义一个变量保存session @Before
public void setUp() throws Exception {
mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
session = new MockHttpSession(); //2.初始化
} @Test
public void test() throws Exception { // 登陆
MockHttpServletRequestBuilder loginRequestBuilder = MockMvcRequestBuilders.post("/auth/login")
.param("username", "test")
.param("password", "123456")
.contentType(MediaType.APPLICATION_JSON_UTF8)
.accept(MediaType.APPLICATION_JSON)
.session(session);//3.当某个请求需要session时,直接在构造器中绑定需要的session
mockMvc.perform(loginRequestBuilder)
//.andExpect(jsonPath("$.code").value("200"))//登陆成功
; // 其他操作
MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/other-api")
.contentType(MediaType.APPLICATION_JSON_UTF8)
.accept(MediaType.APPLICATION_JSON)
.session(session);// 4.需要时,绑定session
mockMvc.perform(requestBuilder)
.andDo(result -> {
System.out.println(result.getResponse().getContentAsString());
})
} }
原文链接:https://blog.csdn.net/qq_29753285/article/details/93468852
SpringBootTest MockMVC绑定session(需要登陆的接口)的更多相关文章
- App的登陆注册接口安全设计
最近一APP产品,我担任的主要模块之一是后台登录注册模块的接口开发.基本完成,就说说并记录一下关于登录注册接口的一些东西,因为也涉及到接口的安全方面的问题. 1.先一般的app的登录注册接口安全设计上 ...
- 通过session模拟登陆
import requests # 这个练习对比的是上一个登陆练习,这个是不用自己传入cookie参数,而是利用session方法登陆 # 实例化一个session session = request ...
- session验证登陆- 页面跳转
用session验证登陆,当用户想访问一个页面时由于没有登录,就跳转到登录页面,登录后跳转到用户请求的页面,在session跳转中传上次请求的页面. 怎么获得这个url值并跳转到该页面呢? 以此跳转 ...
- 事务的编写规范与Hibernate绑定session
一.事务的编写规范 1.事务的基本概念: 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行. 事务处理可以确保除非事 ...
- sonar + jacoco + mockMvc 模拟session 用户登录 配合SpringSecurity 权限 快速测试代码覆盖率.
遇到mock 测试简直就是神器,特别是要做代码覆盖率,直接测试controller就好了,缺点,虽然可以回滚事务,但是依赖数据库数据,解决,根据SpringBoot ,再建立一个专门跑单元测试的数据库 ...
- 用session模拟登陆,手动输入验证码
# 本练习是模拟登陆及验证码处理(把验证码下载到本地后手动输入) # 1 通过分析页面获得form表单的登陆接口为 action="https://www.douban.com/accoun ...
- session 登陆浏览,并实现session注销登陆
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- Python3.6下使用会话session保持登陆状态
本次工具主要利用python easygui模块的inputbox让用户首次输入登陆信息,作为网站requests-post请求的data字段,观察XHR(异步加载)的数据包,构造post请求,利用r ...
- 基于cookie或session的登陆验证之安全性问题
因为session是关了浏览器就没了.所以可以通过cookie结合session方法来做验证! 第一次登陆,生成一个cookie,保存一些加密的帐号信息,然后再生成一个session 这样去其他需要验 ...
随机推荐
- 轻松定位CPU飙高问题
以下四步轻松定位CPU飙高问题: ①top pid 查看cpu耗CPU进程 ②top -Hp pid 查看该进程所有线程的运行情况,找到占用 CPU 过高的线程 pid ③ printf %x pid ...
- 跨平台版本迁移之 XTTS 方案操作指南
本文转自 https://blog.csdn.net/Enmotech/article/details/80045576 作者 | 罗贵林: 云和恩墨技术工程师,具有8年以上的 Oracle 数据库工 ...
- RabbitMQ基础理解
RabbitMQ基本理解 MQ是消息中间件,常见的有RabbitMQ,Kafka,RocketMQ,activeMQ 等,用于分布式系统中.作用有三点 解耦 异步 削峰 RabbitMQ 整体上是一个 ...
- 【bzoj2159】Crash 的文明世界(树形dp+第二类斯特林数)
传送门 题意: 给出一颗\(n\)个结点的树,对于每个结点输出其答案,每个结点的答案为\(ans_x=\sum_{i=1}^ndis(x,i)^k\). 思路: 我们对于每个结点将其答案展开: \[ ...
- javabean的内省(Introspector)
内省是 Java 语言对 Bean 类属性.事件的一种缺省处理方法.例如类 A 中有属性 name, 那我们可以通过 getName,setName 来得到其值或者设置新的值. 通过 getName/ ...
- acwing 851. spfa求最短路 模板
地址 https://www.acwing.com/problem/content/description/853/ 给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数. 请你求出 ...
- 12. Go 语言文件处理
Go 语言文件处理 本章我们将带领大家深入了解一下 Go语言中的文件处理,重点在于文件而非目录或者通用的文件系统,特别是如何读写标准格式(如 XML 和 JSON 格式)的文件以及自定义的纯文本和二进 ...
- Java之ssh框架spring配置文件配置定时任务
最近做了一个数据同步功能,要求晚上0点去定时同步数据,这是个老项目框架用的ssh,定时任务基于quartz,废话不多说,下面详细说说相关配置. 在spring的配置文件中: <!-- 0点定时任 ...
- 利用Python进行数据分析-Pandas(第六部分-数据聚合与分组运算)
对数据集进行分组并对各组应用一个函数(无论是聚合还是转换),通常是数据分析工作中的重要环节.在将数据集加载.融合.准备好之后,通常是计算分组统计或生成透视表.pandas提供了一个灵活高效的group ...
- vs 2019 自带 反编译 与 Reflector 反编译工具比较
都是一样的 但是要看自己写的 反编译代码 还是得去 Reflector