科技网站设计公司有哪些,新余网站网站建设,购物中心网站模板,网站备案应该怎么做前言
Web环境模拟测试
企业开发不仅要保障业务层与数据层的功能安全有效#xff0c;也要保障表现层的功能正常。但是我们一般对表现层的测试都是通过postman手工测试的#xff0c;并没有在打包过程中代码体现表现层功能被测试通过。那么能否在测试用例中对表现层进行功能测…前言
Web环境模拟测试
企业开发不仅要保障业务层与数据层的功能安全有效也要保障表现层的功能正常。但是我们一般对表现层的测试都是通过postman手工测试的并没有在打包过程中代码体现表现层功能被测试通过。那么能否在测试用例中对表现层进行功能测试呢答案是可以的我们可以使用MockMvc来实现它。
1、测试类中启动web环境
每一个springboot的测试类上方都会标准SpringBootTest注解而注解带有一个属性叫做webEnvironment。通过该属性就可以设置在测试用例中启动web环境具体如下
SpringBootTest(webEnvironment SpringBootTest.WebEnvironment.RANDOM_PORT)
public class BookControllerTest {}
测试类中启动web环境时可以指定启动的Web环境对应的端口springboot提供了4种设置值分别如下
MOCK根据当前设置确认是否启动web环境例如使用了Servlet的API就启动web环境属于适配性的配置DEFINED_PORT使用自定义的端口作为web服务器端口RANDOM_PORT使用随机端口作为web服务器端口NONE不启动web环境
建议大家测试时使用RANDOM_PORT避免项目打包运行时由于端口冲突导致意外现象的出现。
2、测试类中发送请求
单元测试MockMvc
1、mockMvc.perform执行一个请求
2、MockMvcRequestBuilders.get(/user/1)构造一个请求
3、ResultActions.andExpect添加执行完成后的断言
4、ResultActions.andDo添加一个结果处理器表示要对结果做点什么事情比如此处使用MockMvcResultHandlers.print()输出整个响应结果信息。
5、ResultActions.andReturn表示执行完成后返回相应的结果。
MockMvcBuilder是用来构造MockMvc的构造器其主要有两个实现StandaloneMockMvcBuilder和DefaultMockMvcBuilderStandaloneMockMvcBuilder继承了DefaultMockMvcBuilder。直接使用静态工厂MockMvcBuilders创建即可
MockMvcBuilders.webAppContextSetup(WebApplicationContext context)指定WebApplicationContext将会从该上下文获取相应的控制器并得到相应的MockMvc
MockMvcBuilders.standaloneSetup(Object... controllers)通过参数指定一组控制器这样就不需要从上下文获取了 MockMvcRequestBuilders主要API
MockHttpServletRequestBuilder get(String urlTemplate, Object... urlVariables)根据uri模板和uri变量值得到一个GET请求方式的MockHttpServletRequestBuilder如get(/user/{id}, 1L)
MockHttpServletRequestBuilder post(String urlTemplate, Object... urlVariables)同get类似但是是POST方法
MockHttpServletRequestBuilder put(String urlTemplate, Object... urlVariables)同get类似但是是PUT方法
MockHttpServletRequestBuilder delete(String urlTemplate, Object... urlVariables) 同get类似但是是DELETE方法
ResultActions
调用MockMvc.perform(RequestBuilder requestBuilder)后将得到ResultActions通过ResultActions完成如下三件事ResultActions andExpect(ResultMatcher matcher) 添加验证断言来判断执行请求后的结果是否是预期的ResultActions andDo(ResultHandler handler) 添加结果处理器用于对验证成功后执行的动作如输出下请求/结果信息用于调试MvcResult andReturn() 返回验证成功后的MvcResult用于自定义验证/下一步的异步处理(主要是拿到结果进一步做自定义断言)
我们该在测试类中如何发送请求呢具体操作如下
步骤①在测试类中开启web虚拟调用功能通过注解AutoConfigureMockMvc实现此功能的开启。
步骤②定义发起虚拟调用的对象MockMVC通过自动装配的形式初始化对象。
步骤③创建一个虚拟请求对象封装请求的路径并使用MockMVC对象发送对应请求
SpringBootTest(webEnvironment SpringBootTest.WebEnvironment.RANDOM_PORT)
AutoConfigureMockMvc
public class BookControllerTest {Autowiredprivate MockMvc mockMvc;Testpublic void getBooks() throws Exception {//创建虚拟请求当前访问/books MockHttpServletRequestBuilder requestBuilder MockMvcRequestBuilders.get(/books);//执行对应的请求mvc.perform(requestBuilder);}
}
注意访问路径不要写 http://localhost:8080/books因为前面的服务器IP地址和端口使用的是当前虚拟的web环境无需指定仅指定请求的具体路径即可。
另外测试用例如果测试时产生了事务提交就会在测试过程中对数据库数据产生影响进而产生垃圾数据。这个过程不是我们希望发生的如何避免呢
我们只需要在原始测试用例中添加注解Transactional即可实现当前测试用例的事务不提交。当程序运行后只要注解Transactional出现的位置存在注解SpringBootTestspringboot就会认为这是一个测试程序无需提交事务所以也就可以避免事务的提交。
当然这里我们也可以使用h2数据库来做测试具体详情可以查看
SpringBootMockMvcH2 自动化单元测试的示例代码https://download.csdn.net/download/A_aspectJ/88879412?spm1001.2014.3001.5503SpringBootMockMvcH2 自动化单元测试的例代码开发过程总结
总结
在测试类中测试web层接口要保障测试类启动时启动web容器使用SpringBootTest注解的webEnvironment属性可以虚拟web环境用于测试为测试方法注入MockMvc对象通过MockMvc对象可以发送虚拟请求模拟web请求调用过程web虚拟调用可以对本地虚拟请求的返回响应信息进行比对分为响应头信息比对、响应体信息比对、响应状态信息比对。