Spring boot RESTful API 测试用例

RESTful API和传统API的区别:

1.1、用URL描述资源:

传统的请求用url来描述你的行为,比如/user/query?
name=xiaoming,看这个url就知道我们是要针对这个叫小明的用户进行一个查询,那么查询就是我们要进行的行为。而Restful API则是用来描述资源,比如/user/1,他既是一个查询,又是一个删除,而这个1呢就是我们用户ID为1的用户资源。

1.2、RESTful API 使用HTTP方法来描述行为。使用HTTP状态码来表示不同的结果:

RESTful API 使用GET、POST、PUT、DELETE来表述行为,比如GET就是一个获取资源的行为,POST、PUT就是增加和修改资源的行为,而DELETE则是删除资源的行为。在我们以前的传统的写法里面一个请求发出去以后,请求成功后返回200,然后会将返回的结果封装成一个JSON,请求失败了还是返回的200,具体的成功与非的判断要解析JSON后判断后才能确定到底是不是请求成功了,就跟根据我们返回的报文里的内容来判断是否成功。

1.3、使用JSON交互数据:

RESTful API 的请求和返回都是通过JSON格式进行的。

1.4、RESTful 只是一种风格,并不是强制的标准。

REST成熟度模型:

0级: 使用Http作为传输方式。
1级: 引入资源概念。每个资源都有对应的URL。
2级: 使用HTTP方法进行不同的操作。使用HTTP状态码来表示不同的结果。
3级: 使用超媒体。在资源的表达中包含了链接信息。

编写针对RestfulAPI的测试用例

//如何来运行测试用例?使用SpringRunner.class
@RunWith(SpringRunner.class)
//说明这是一个Spring boot 的测试用力
@SpringBootTest
public class UserControllerTest {

    //伪造的mvc环境,这样就不会启动tomcat也可以使用
    @Autowired
    private WebApplicationContext context;

    private MockMvc mockMvc;

    //在测试用例之前执行
    @Before
    public void setup() {
        //MockMvcBuilders.webAppContextSetup(WebApplicationContext context)
        //执行WebApplicationContext,将会从上下文获取相应的控制器并得到相应的MockMvc
        mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
    }

    @Test
    public void whenQuerySuccess() throws Exception {
        //MockMvc调用perform,执行一个RequestBuilder请求,调用controller的业务逻辑
        mockMvc.perform(MockMvcRequestBuilders.get("/user")
                .param("userName", "Ni Hao!")  //User对象中的参数
                .param("userAge", "12")   //User对象中的参数
                .param("userId", "1")   //User对象中的参数
                .param("name","test")   //UserQueryDto对象中的参数
                .param("age", "23")//UserQueryDto对象中的参数
                .param("sex","2").//UserQueryDto对象中的参数
                //MediaType.APPLICATION_JSON_UTF8 = application/json;charset=UTF-8
                contentType(MediaType.APPLICATION_JSON_UTF8)).
                //andExpect() 对请求的期望,返回的状态码是200
                andExpect(MockMvcResultMatchers.status().isOk()).
                //返回的集合里包含了三个user对象.
                andExpect(MockMvcResultMatchers.jsonPath("$.length()").value(3));
    }

}

需要测试controller

@RestController
public class UserController {

    @RequestMapping(value = "/user", method = RequestMethod.GET)
    public List<User> query(UserQueryDto queryDto, User user) {
        System.out.println(ReflectionToStringBuilder.toString(queryDto, ToStringStyle.DEFAULT_STYLE));
        System.out.println(ReflectionToStringBuilder.toString(user, ToStringStyle.DEFAULT_STYLE));
        List<User> users = new ArrayList<>();
        users.add(new User());
        users.add(new User());
        users.add(new User());
        return users;
    }

}

输出结果

com.fuiou.dto.UserQueryDto@5ca4dce5[name=test,age=23,sex=2]
com.fuiou.dto.User@40bd0f8[userId=1,userName=Ni Hao!,userAge=12]

有哪些注解可以配合 RESTful API :

@RestController 返回给浏览器一个对象
@RequestMapping 访问路径 value放路径 method放请求方式
@RequestBody 将传递的JSON转换为自己需要的对象
@PathVariable 获取url中的参数

参考:https://blog.csdn.net/kqzhu/article/details/78836275

猜你喜欢

转载自blog.csdn.net/qq_30243515/article/details/82156121