SpringBoot——在测试阶段验证Web表现层的接口是否正常

这篇具有很好参考价值的文章主要介绍了SpringBoot——在测试阶段验证Web表现层的接口是否正常。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

验证请求状态

之前我们实现了在测试环境中开启Web环境,并且在测试阶段发送虚拟请求,并看到了返回的结果,这次我们不止要看他的请求结果,还要看他的请求过程和请求状态

匹配请求状态

首先就是查看请求的状态。主要介绍的就是一个重要的类,也是我们这一节的核心类:MockMvcResultMatchers,这个类是一个结果匹配器,他会提供不同请求状态的请求对象,然后我们可以拿到本次请求的结果对象与他的请求状态的对象做对比,查看本次请求的状态,具体的代码如下:

操作代码

package com.spring;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.RequestBuilder;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.test.web.servlet.ResultMatcher;
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.result.StatusResultMatchers;

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
@AutoConfigureMockMvc
public class SpringBootTest02ApplicationTests {
    @Test
    public void test(@Autowired MockMvc mockMvc) throws Exception {
        MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/test");
//        获得本次请求的信息
        ResultActions perform = mockMvc.perform(builder);
//        获取请求状态信息
        StatusResultMatchers status = MockMvcResultMatchers.status();
//        获取请求成功时候的请求状态
        ResultMatcher ok = status.isOk();
//        添加对比,将请求成功的状态与本次请求的状态做对比,如果匹配成功则表示请求成功,如果匹配失败,则表示亲请求失败
            ResultActions resultActions = perform.andExpect(ok);
        System.out.println(resultActions);
    }
}

大致的流程就是首先获取本次请求的结果对象,然后获取请求成功时候的对象,两者进行对比,最终的结果就可以反映出请求的结果是否和我们的预期值相同,我们来看运行结果:
SpringBoot——在测试阶段验证Web表现层的接口是否正常,spring boot,前端,后端
如果是请求成功的情况,他本身什么都不会输出,而如果是请求失败了,就会输出很多的信息,我们可以故意把他的请求地址指向一个不存在的地址让他找不到就能看到信息了:
SpringBoot——在测试阶段验证Web表现层的接口是否正常,spring boot,前端,后端
这里改一下他的请求地址,改到一个不存在的地址,这次我们再次运行代码:
SpringBoot——在测试阶段验证Web表现层的接口是否正常,spring boot,前端,后端
SpringBoot——在测试阶段验证Web表现层的接口是否正常,spring boot,前端,后端
这里面的数据就很多了,但是大概的也分为这几个类别,最下面的就是我们这次的匹配结果,很显然,我们设置的预期值是OK,但是他的真实值是not found,很明显的匹配不上,他就告诉我们了。
SpringBoot——在测试阶段验证Web表现层的接口是否正常,spring boot,前端,后端
当然这里面还有一个有意思的地方就是,如果你的预期值就是not found,那么如果你的请求真是没有找到,那么这个程序就不会报错,但是Controller不会被调用,信息也就不会显示出来。哈哈,很无用,谁会故意测试一个Bug呢。

匹配响应体

匹配响应体的过程和匹配相应状态的过程是一样的,只不过是调用的方法替换一下,之前是调用的status()方法,现在改成content()方法,流程都是一样的,设置期待值,与真实值做匹配,最终返回结果:
SpringBoot——在测试阶段验证Web表现层的接口是否正常,spring boot,前端,后端

@Test
    public void textBody(@Autowired MockMvc mockMvc) throws Exception {
        MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/test");
        ResultActions perform = mockMvc.perform(requestBuilder);
        ContentResultMatchers content = MockMvcResultMatchers.content();
        ResultMatcher string = content.string("Test Controller ……");
        ResultActions resultActions = perform.andExpect(string);
    }

我们运行代码测试一下:
SpringBoot——在测试阶段验证Web表现层的接口是否正常,spring boot,前端,后端
如果期待值和真实值是一样的,那么就会一切顺利,如果不一样,就会打印出很多的信息:
SpringBoot——在测试阶段验证Web表现层的接口是否正常,spring boot,前端,后端
之前的信息就不用看了,都是一样的,关键在于后面的信息,预期值和实际值不一样,他会告诉我们请求体是什么,预期的请求体是什么,真实的请求体是什么。

匹配响应体(JSON)

匹配JSON数据和匹配String数据基本是一样的,只不过方法不是String()而是json(),然后预期值的内容也换成json字符串即可。
返回json,最简单的方法就是使用@ResponseBody注解的特性,返回一个对象然后自动将对象转换成json格式在屏幕上显示。
首先我们创建一个类,用于被返回:
SpringBoot——在测试阶段验证Web表现层的接口是否正常,spring boot,前端,后端
这就一切从简了,有两个属性,然后用lombok提供接口方法。然后我们修改一下Controller,让他可以返回对象:
SpringBoot——在测试阶段验证Web表现层的接口是否正常,spring boot,前端,后端
然后我们启动这个SpringBoot,然后访问一下这里看是不是能顺利的打印这个JSON文件:
SpringBoot——在测试阶段验证Web表现层的接口是否正常,spring boot,前端,后端
好,他确实是输出了JSON字符串,剩下的就简单了,换一下方法,然后直接把这个JSON字符串赋值过去当作预期值,然后运行看一下效果:

@Test
    public void textBodyJson(@Autowired MockMvc mockMvc) throws Exception {
        MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/test");
        ResultActions perform = mockMvc.perform(requestBuilder);
        ContentResultMatchers content = MockMvcResultMatchers.content();
        ResultMatcher json = content.json("{\"id\":2,\"name\":\"JavaWeb编程\"}");
        ResultActions resultActions = perform.andExpect(json);
    }

SpringBoot——在测试阶段验证Web表现层的接口是否正常,spring boot,前端,后端
直接复制之后,我们稍微更改一下,让他和真实值有点不同,好让他报错,然后我们看报错信息:
SpringBoot——在测试阶段验证Web表现层的接口是否正常,spring boot,前端,后端
上面的信息就是我们的相应信息,下面的红色的字就是匹配的结果,他会告诉你是哪里的属性出现了问题,这里他就说是id属性,因为我就是修改了id属性,预期值是2,真实值是1 ,匹配不上。

匹配请求头

请求头的匹配流程和之前都是一样的,无非就是方法不一样而已,我们直接上代码:

@Test
    public void testHandler(@Autowired MockMvc mockMvc) throws Exception {
        MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.get("/test");
        ResultActions perform = mockMvc.perform(requestBuilder);
        HeaderResultMatchers header = MockMvcResultMatchers.header();
//        匹配请求头中的键值对,定义规则,当相应的数据不是JSON格式的时候就会匹配不上
        ResultMatcher heade = header.string("Content-Type", "application/json");
        ResultActions resultActions = perform.andExpect(heade);

预期值是相应的数据类型是JSON格式,也就是说当相应的文件不是JSON格式的时候,就匹配不上就会报错,我们把之前的Controller修改一下:
SpringBoot——在测试阶段验证Web表现层的接口是否正常,spring boot,前端,后端
让他的返回值类型编程String类型,这样在相应的时候就肯定不是JSON格式的了,然后我们启动测试看一下运行结果:
SpringBoot——在测试阶段验证Web表现层的接口是否正常,spring boot,前端,后端
报错了,预期是是JSON类型,实际值是String类型。
可以看到在这种匹配测试的时候其实流程都是差不多的,就是切换一下使用的方法即可。

使用场景

这种匹配测试在使用的时候,一般会多个匹配规则一起使用,比如我们第一个会先匹配响应状态,然后再匹配请求体,最后是请求头,这样我们的规则会更完善,最终的匹配结果也最精准。
大致的代码如下所示

@Test
    public void TestMatching(@Autowired MockMvc mockMvc) throws Exception {
        MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/tests");
        ResultActions perform = mockMvc.perform(builder);
//        首先测试请求状态
        StatusResultMatchers status = MockMvcResultMatchers.status();
        ResultMatcher ok = status.isNotFound();
        perform.andExpect(ok);
//        然后匹配请求体
        ContentResultMatchers content = MockMvcResultMatchers.content();
        ResultMatcher string = content.string("TestController ……");
        perform.andExpect(string);
//        最后匹配响应头
        HeaderResultMatchers header = MockMvcResultMatchers.header();
        ResultMatcher heade = header.string("Content-Type", "application/json");
        perform.andExpect(heade);
    }

当然,能测试的部分肯定不止这些,之前我们看到报错信息中:
SpringBoot——在测试阶段验证Web表现层的接口是否正常,spring boot,前端,后端
这里面的内容都可以进行匹配测试,有兴趣的可以自己尝试一下文章来源地址https://www.toymoban.com/news/detail-528298.html

到了这里,关于SpringBoot——在测试阶段验证Web表现层的接口是否正常的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 三方开放接口,Springboot通过AOP实现API接口的签名验证

    前言 对外开放的接口,需要验证请求方发送过来的数据确实是由发送方发起的,并且中途不能被篡改和伪造,所以才会对接口的访问进行签名验证,以保证双方获取到的原来的信息是没有经过篡改的。 实现方法 对请求的信息内容,通过MD5运算或者其他算法(必须是 不可逆的

    2024年02月07日
    浏览(52)
  • Jmeter验证码注册接口压力测试实战

    主要学习的内容包括发送HTTP请求、HTTP信息头管理器、HTTP cookies管理器、用户定义的变量、响应断言、CSV数据文件设置的使用。 提供的测试网址为: http://www.qk365.com/security/register 使用Chrome浏览器,先将浏览器的cookies缓存清空。 清空后,打开待测试的网址,按F12键,输入要注

    2024年01月17日
    浏览(54)
  • Web 攻防之业务安全:验证码绕过测试.

    业务安全是指保护业务系统免受安全威胁的措施或手段。 广义 的业务安全应包括业务运行的 软硬件平台 (操作系统、数据库,中间件等)、 业务系统自身 (软件或设备)、 业务所提供的服务安全 ; 狭义 的业务安全指 业务系统自有的软件与服务的安全 。 验证码绕过测试

    2023年04月10日
    浏览(42)
  • 接口自动化测试难点:数据库验证解决方案

    接口自动化中的数据库验证:确保数据的一致性和准确性 接口自动化测试是现代软件开发中不可或缺的一环,而数据库验证则是确保接口返回数据与数据库中的数据一致性的重要步骤。本文将介绍接口自动化中的数据库验证的原理、步骤以及示例代码,帮助读者深入了解和应

    2024年01月16日
    浏览(46)
  • 接口自动化测试难点:数据库验证解决方案!

    接口自动化中的数据库验证:确保数据的一致性和准确性  接口自动化测试是现代软件开发中不可或缺的一环,而 数据库验证 则是确保接口返回数据与数据库中的数据一致性的重要步骤。本文将介绍 接口自动化中的数据库验证的原理、步骤以及示例代码 ,帮助读者深入了解

    2024年02月07日
    浏览(48)
  • Jmeter接口测试 —— jmeter对图片验证码的处理

    在web端的登录接口经常会有图片验证码的输入,而且每次登录时图片验证码都是随机的;当通过jmeter做接口登录的时候要对图片验证码进行识别出图片中的字段,然后再登录接口中使用; 1、通过ocrserver工具识别图片验证码; 如下图:解压后双击OcrServer.exe;然后电脑的右下角

    2024年02月05日
    浏览(46)
  • Jmeter验证码图片识别注册接口压力测试实战_压测时,登录需要传图形验证码

    先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前! 因此收集整理了一份《2024年最新软件测试全套学习资料》

    2024年04月22日
    浏览(54)
  • Web 攻防之业务安全:验证码自动识别 测试.

    验证码安全 也可以叫《 全自动区分计算机和人类的图灵测试 》,是一种 区分用户是计算机还是人的共全自动程序。 可以防止:恶意破解密码、刷票、论坛灌水。可以有效防止黑客对某一个特定用户用特定程序暴力破解方式进行不断的登陆尝试。由于计算机无法解答CAPTCHA的

    2023年04月11日
    浏览(53)
  • 我的第一个后端项目(环境搭建,Springboot项目,运行,接口验证)

    访问Java Software | OracleOracle官方网站,下载适合你操作系统的最新版本的JDK。安装JDK并设置好JAVA_HOME环境变量。 推荐使用IntelliJ IDEA作为IDE。你可以从官方网站(IntelliJ IDEA – the Leading Java and Kotlin IDE)下载适合你操作系统的版本,并根据安装向导进行安装。最新2023.2版本需要注

    2024年02月15日
    浏览(49)
  • 单元测试、模块测试、web接口测试

    然而在功能的实现代码中并没有“单元”,也没有“模块”;只有函数、类和方法。先来分别看看它们 的定义: 单元测试(Unit testing),是指对软件中的最小可测试单元进行检查和验证。通常该代码块单独和孤立 的,如果您的测试使用了一些外部资源,如网络或数据库,它

    2024年02月06日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包