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(需要登陆的接口)的更多相关文章

  1. App的登陆注册接口安全设计

    最近一APP产品,我担任的主要模块之一是后台登录注册模块的接口开发.基本完成,就说说并记录一下关于登录注册接口的一些东西,因为也涉及到接口的安全方面的问题. 1.先一般的app的登录注册接口安全设计上 ...

  2. 通过session模拟登陆

    import requests # 这个练习对比的是上一个登陆练习,这个是不用自己传入cookie参数,而是利用session方法登陆 # 实例化一个session session = request ...

  3. session验证登陆- 页面跳转

    用session验证登陆,当用户想访问一个页面时由于没有登录,就跳转到登录页面,登录后跳转到用户请求的页面,在session跳转中传上次请求的页面.  怎么获得这个url值并跳转到该页面呢? 以此跳转 ...

  4. 事务的编写规范与Hibernate绑定session

    一.事务的编写规范 1.事务的基本概念: 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行. 事务处理可以确保除非事 ...

  5. sonar + jacoco + mockMvc 模拟session 用户登录 配合SpringSecurity 权限 快速测试代码覆盖率.

    遇到mock 测试简直就是神器,特别是要做代码覆盖率,直接测试controller就好了,缺点,虽然可以回滚事务,但是依赖数据库数据,解决,根据SpringBoot ,再建立一个专门跑单元测试的数据库 ...

  6. 用session模拟登陆,手动输入验证码

    # 本练习是模拟登陆及验证码处理(把验证码下载到本地后手动输入) # 1 通过分析页面获得form表单的登陆接口为 action="https://www.douban.com/accoun ...

  7. session 登陆浏览,并实现session注销登陆

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  8. Python3.6下使用会话session保持登陆状态

    本次工具主要利用python easygui模块的inputbox让用户首次输入登陆信息,作为网站requests-post请求的data字段,观察XHR(异步加载)的数据包,构造post请求,利用r ...

  9. 基于cookie或session的登陆验证之安全性问题

    因为session是关了浏览器就没了.所以可以通过cookie结合session方法来做验证! 第一次登陆,生成一个cookie,保存一些加密的帐号信息,然后再生成一个session 这样去其他需要验 ...

随机推荐

  1. Hello universe!

    Hello, universe. This is my first cnblogs article.this blog apply to computer technology and another ...

  2. RCS MO_Client&server Net log 摘录

          传输过程总体来说: (1)客户端提供[客户端随机数.可选算法套件.sessionId]等信息 (2)服务端提供[服务端随机数.选用算法套件.sessionId]等信息 (3)服务端提供证书 ...

  3. LeetCode刷题--整数反转(简单)

    题目描述 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 12 ...

  4. 30(1).原型聚类---k-means

    原型聚类prototype-based clustering假设聚类结构能通过一组原型刻画. 常见的原型聚类有: k均值算法k-means 学习向量量化算法Learning Vector Quanti ...

  5. ADB常用命令(一)

    转自:https://blog.csdn.net/qq_26552691/article/details/81348222 一.操作前请确认电脑上已配置好ADB环境.可在CMD命令行输入adb,如果出 ...

  6. 关于eclipse的maven项目Java Build Path中maven依赖报错问题

    场景描述: respository仓库位置变动过,代码注解等报错 解决方法: 选中项目,点击maven ->update Project即可.

  7. Linux 部署MySQL 一主一从一备

    主服务器搭建 准备三台服务器,一主一从一备 在主服务器(master)下找到mysql配置文件. Window下为my.ini(一般在C:\ProgramData\MySQL\MySQL Server ...

  8. 05-文档编辑与yum命令

    一.Linux vi/vim vi是所有的Unix系统都会有,但是目前我们使用最多的是vim编辑器.vim具有程序编辑的能力,可以主动以字体颜色辨别语法的正确性. vim是从vi发展出来的一个文本编辑 ...

  9. shiro实战(2)--ssm

    一.web.xml的配置 <?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi=& ...

  10. Linux中长时间运行程序的方法

    一.场景: 如果临时有一个命令需要长时间运行,比如 python hello.py ,什么方法能最简便的保证它在后台稳定运行呢?解决方法:      当用户注销(logout)或者网络断开时,终端会收 ...