后台参数校验
1、在model中参数校验长度进行验证需要添加注解。
例如: string 字符串参数长度校验
/**
* min为参数长度最小值
* max为参数长度最大值
* message为与参数中要求不匹配时的错误message返回结果
*/
@Size(min = 1, max = 255, message = "参数长度必须在1-255字符之间")
2、在Controller层中需要添加model方法拦截。
/**
* RequestBody 接收Json对象
* Validated 对model进行校验
* BindingResult 校验结果返回
*/
@RequestBody @Validated Model(名称) model,BindingResult bindingResult
//查看校验结果中是否存在错误
bindingResult.hasErrors()
//返回所有错误结果(结果为list) 注:每一条验证不同过为一条list数据
bindingResult.getAllErrors()
测试用例
1、测试流程
当前测试流程:
登录→新增校验→查询校验并比对新增数据与数据库中是否匹配→更改校验→查询校验并比对更新数据与数据库中是否匹配→删除校验→查询校验并检查数据库中数据是否被删除
注:每增加一种测试场景需要增加一个接口验证测试可能出现的错误拦截。
2、准备工作
/**
* 模拟MVC对象,通过MockMvcBuilders.webAppContextSetup(this.wac).build()初始化
*/
private MockMvc mockMvc;
/**
* 注入WebApplicationContext
*/
@Autowired
private WebApplicationContext wac;
/**
* 在测试开始前初始化工作
*/
@Before
public void setUp() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
}
3、测试工作
3.1、测试登录
一般系统应先登录后方可访问接口,所以第一步为登录接口校验。
(1)正常登录校验
(2)用户名、密码空值校验
(3)用户名、密码非法值校验
(4)用户名、密码空值校验
(5)用户名、密码边界值校验
//接口地址
String url = "";
//param中传入请求参数(from表单提交方法)即可
MvcResult result = mockMvc.perform(post(url).param("name", "用户名").param("password", "密码"))
.andExpect(status().is(200))// 模拟向testRest发送get请求 注:status.is(200)其中200为Response中的code值 如果code中预期值为500 此处应将200更改为500
.andReturn();// 返回执行请求的结果
//获取返回的 Response 中的 code值
result.getResponse().getStatus()
//断言验证
assert(a==b);//跟java中的对比相同 int 值对比 == string a.equals(b)
assertTrue(a==b);//验证两个值对比结果为true表是相同
assertEquals(a,b);//验证a,b两个结果比对相同
3.2、测试新增
(1)正常新增
(2)数据超出边界值校验
(3)数据空值校验
(4)数据库表上锁时新增校验
(5)传入的删除对象与接收的类型是否匹配校验
(6)根据实际业务校验添加测试场景
//接口地址
String url = "";
//测试数据
String testAddData = "";
//将测试数据放入传入到后台的对应的参数中 注:因后台进行校验过程moodel时加入RequestBody注解所以传入参数只能为json格式
String addData = "{\"name\":\"" + testAddData + "\"}";
//请求接口并传入对应接收的json数据
ResultActions perform= mockMvc.perform(post(url).content(addData).contentType(MediaType.APPLICATION_JSON));
//获取返回code值
注:status.is(200)其中200为Response中的code值 如果code中预期值为500 此处应将200更改为500
perform.andExpect(status().is(200)).andReturn().getResponse().getStatus()
//获取ResponseBody 中的 json 数据
perform.andReturn().getResponse().getContentAsString()
3.3、测试查询
(1)正常查询(无参、有参)
(2)传入的删除对象与接收的类型是否匹配校验(有参)
//接口地址
String url ="";
//请求查询接口
MockHttpServletResponse response = mockMvc.perform(get(url).andReturn().getResponse();
//获取ResponseBody中返回的json数据
String contentAsString = response.getContentAsString();
//获取返回json数据中的datas数组中的数据
JSONArray jsonArray = JSONObject.parseObject(contentAsString).getJSONArray("datas");
//jsonArray不为空时 解析jsonArray并创建对应的model对象然后放入list中
if (jsonArray != null) {
if (jsonArray.size() > 0) {
for (int i = 0; i < jsonArray.size(); i++) {
//将数据解析并放入对应的实体类中,再将每个实体类放入对应的实体类集合中
//获取string类型的数据
jsonArray.getJSONObject(i).getString("key")
//获取int类型数据
jsonArray.getJSONObject(i).getInteger("key")
//其他数据什么类型接收就get对应类型
}
}
}
3.4、测试更新
(1)正常更新
(2)数据超出边界值校验
(3)数据空值校验
(4)数据库表上锁时更新校验
(5)数据库表内数据该行上锁校验时能否更新校验
(6)传入的对象与接收对象的类型是否匹配校验
//请求地址
String url = "";
//更新数据
String testUpdateData = "";
//更新数据json 包含要更新数据的id
String updateData = "{\"name\":\"" + testUpdateData + "\",\"id\":2}";
//请求接口并传入数据 注:content中的值写更新数据 带 id 后台进行校验过程moodel时加入RequestBody注解所以传入参数只能为json格式
ResultActions perform = mockMvc.perform(post(url).content(updateData).contentType(MediaType.APPLICATION_JSON));
//获取Response中的code值
perform.andExpect(status().is(200)).andReturn().getResponse().getStatus();
//获取返回的ResponseBody中的json数据
perform.andReturn().getResponse().getContentAsString();
4、测试删除
测试删除中应目前包含测试:
(1)正常删除
(2)已删除后的数据,再次删除校验
(3)主键占用时删除校验
(4)数据库表上锁时删除校验
(5)数据库表内数据行上锁校验
(6)传入的删除对象与接收的类型是否匹配校验
//请求地址
String url = "";
//请求接口并传入数据 注:content中的值写更新数据 带 id 正常删除
ResultActions perform = mockMvc.perform(post("http://localhost/area/delete").param("id", "1"));
//获取response中的code值 status.is(200) 200为预期值 预期值根据想返回的结果进行变更
perform.andExpect(status().is(200)).andReturn().getResponse().getStatus()
//获取ResponseBody中的json数据
perform.andReturn().getResponse().getContentAsString()