Get请求url不超过4000字节
Rest成熟度:level 0:使用http作为传输方式,leve 1:引入资源概念,每个资源有对应的url,level 2:使用http方法进行不同操作,使用http状态码表示不同结果,level 3:使用超媒体,在资源表达式中包含链接信息,一般做到level 2
测试依赖:org.springframework.boot:spring-boot-starter-test
测试类:
package com.example.security;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
@RunWith(SpringRunner.class) //使用SpringRunner运行
@SpringBootTest //表明这是一个测试用例
public class SecurityApplicationTests {
@Autowired
private WebApplicationContext wac; //注入web环境,但是并不会启动Tomcat,所以很快
private MockMvc mockMvc; //模拟web环境
@Before //@Before会在每个@Test之前执行,在里面初始化模拟的web环境
public void setup() {
mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
}
}
Rest请求单元测试举例(推荐先写好测试用例,执行,失败红色,然后去写Rest api,过程中不断执行测试用例,直到测试用例通过):
@Test
public void queryUsersOK() throws Exception {
mockMvc.perform(MockMvcRequestBuilders.get("/users")
.contentType(MediaType.APPLICATION_JSON_UTF8))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.length()").value(2));
}
该测试用例向/users发送get请求,contentType为application/json;charset=UTF-8,期望响应状态码200,期望响应json字符串数组长度为2。其中jsonPath是用来解析响应的json。请求格式错误会报400。请求的method不匹配会报405。
这里的$代表返回的json文档,具体可在github搜索jsonPath第一个项目json-path/JsonPath即可,具体使用参考, size=10, sort = "username, asc") Pageable page) {
page.getPageNumber();
page.getPageSize();
page.getSort();
return new ArrayList<>();
}
\",\"date\":" + System.currentTimeMillis()+ "}";
String result = mockMvc.perform(post("/user").contentType(MediaType.APPLICATION_JSON_UTF8).content(content)) //put与post的测试用例写法相同,只是把post改成put,url改成如/usr/1
.andExpect(status().isOk()).andExpect(jsonPath("$.id").value("1"))
.andReturn().getResponse().getContentAsString();
System.out.println(result); //时间属性,向后台传参是System.currentTImeMillis();,返回的是2019-08-24T04:06:49.154+0000
}
如果参数对象有Date属性,可以用yyyy-MM-dd或yyyy-MM-dd HH:mm:ss等时间格式字符串转换,但是需要转换且需要适配不同的展示格式,因此直接在json中传递时间戳(毫秒值)更方便,入库存时间戳,前台展示什么样式由js控制。前台时间戳和后台Date类型能够自由转换(经测试,从浏览器url传的date=时间戳转换失败)。
删除单元测试(请求方法使用多了,直接引用*即可):
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
@Test
public void deleteUser() throws Exception {
mockMvc.perform(delete("/user/1").contentType(MediaType.APPLICATION_JSON_UTF8)).andExpect(status().isOk());
}

Rest接口单元测试的更多相关文章

  1. .Net Core ----通过XUnit进行接口单元测试(带请求头及参数)并用output输出结果

    最近在做core的接口单元测试,所以在这拿出来分享一下,添加XUnit的nuget包 话不多说,直接上代码了: 输出结果(需要的命名空间using Xunit.Abstractions;): ITes ...

  2. .ashx接口单元测试

    最近项目中需要修改一个文件上传的.ashx处理,代码的大概形式是这样的: public void ProcessRequest(HttpContext context) { CallA(context ...

  3. 安卓端后台登录接口单元测试demo

    package com.js.ai.modules.pointwall.interfac; import java.io.IOException; import java.io.Unsupported ...

  4. 一起买beta版模块单元测试

    一起买beta版模块接口单元测试 测试目的 保证代码质量,对各个模块进行单元测试,不仅可以有效地保证代码的可靠性,让模块在与别的模块整合时出现更少的错误. 而且不用每次启动程序而等待浪费时间. 单元描 ...

  5. 基于python+Testlink+Jenkins实现的接口自动化测试框架V3.0

    基于python+Testlink+Jenkins实现的接口自动化测试框架V3.0 目录 1. 开发环境2. 主要功能逻辑介绍3. 框架功能简介 4. 数据库的创建 5. 框架模块详细介绍6. Tes ...

  6. 8点了解Java服务端单元测试

    一. 前言 单元测试并不只是为了验证你当前所写的代码是否存在问题,更为重要的是它可以很大程度的保障日后因业务变更.修复Bug或重构等引起的代码变更而导致(或新增)的风险. 同时将单元测试提前到编写正式 ...

  7. Mock测试你的Spring MVC接口

    1. 前言 在Java开发中接触的开发者大多数不太注重对接口的测试,结果在联调对接中出现各种问题.也有的使用Postman等工具进行测试,虽然在使用上没有什么问题,如果接口增加了权限测试起来就比较恶心 ...

  8. Adaptive Code Via C#读书笔记

    原书链接: http://www.amazon.com/Adaptive-Code-via-principles-Developer-ebook/dp/B00OCLLYTY/ref=dp_kinw_s ...

  9. Spring+MVC+Mybatis整合

    本文是对慕课网上"搞定SSM开发"路径的系列课程的总结,详细的项目文档和课程总结放在github上了.点击查看 什么是秒杀业务 网站售卖某产品时,规定在某个日期开始售卖限量的产品, ...

随机推荐

  1. Python的五大数据类型的作用、定义方式、使用方法

    一.简述Python的五大数据类型的作用.定义方式.使用方法: 1. 数字类型int: 1.整形 作用:可以表示人的年龄,身份证号码,身高和体重等 定义方式:  weight = 130 print( ...

  2. qt05 音乐播放器

    这些步骤可实现音乐播放,但是列表不能显示 music = new QMediaPlayer(this); playlist = new QMediaPlaylist(this); playlist-& ...

  3. ps:HSB色彩模式

    前面我们已经学习过了两大色彩模式RGB和CMYK.色彩模式有很多种,但这两种是最重要和最基础的.其余的色彩模式,实际上在显示的时候都需要转换为RGB,在打印或印刷(又称为输出)的时候都需要转为CMYK ...

  4. pandas数据读取(DataFrame & Series)

    1.pandas数据的读取 pandas需要先读取表格类型的数据,然后进行分析 数据说明 说明 pandas读取方法 csv.tsv.txt 用逗号分割.tab分割的纯文本文件 pd.read_csv ...

  5. uboot中Kconfig架构的理解

    1./u-boot-2019.07/Kconfig 是顶层Kconfig mainmenu "U-Boot $UBOOTVERSION Configuration"  #这是总me ...

  6. 前端每日实战:35# 视频演示如何把 CSS 径向渐变用得出神入化,只用一个 DOM 元素就能画出国宝熊猫

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/odKrpy 可交互视频教程 此视频 ...

  7. 【leetcode】1035. Uncrossed Lines

    题目如下: We write the integers of A and B (in the order they are given) on two separate horizontal line ...

  8. FTP错误 [ftp: connect: No route to host] 解决方法

    问题: 昨天在局域网内的两台机器上用ftp命令传文件.因为是新机器所以没安装ftp. 分别在两台机器上安装了ftp的服务端和客户端,并启动了ftp服务器进程. 当用启动ftp连接另一台机器时发生了如下 ...

  9. 做网站用php还是python

    单纯说做网站,显然是php更适合,php是专为web而生,而Python只是可以做web.php也比python更简单,更容易学,对于新手更友好. 从权威技术网站w3techs.com2017年7月2 ...

  10. 2017 ICPC HongKong B:Black and White(扫描线+线段树)

    题目描述 Consider a square map with N × N cells. We indicate the coordinate of a cell by (i, j), where 1 ...