从REST API 谈线上接口验证

在快速迭代的互联网行业,无数的接口提供了各种服务,大到系统级,小到应用级,对于纷繁复杂的接口的测试,无论测试还是线上环境,面向接口测试,变得尤为迫切。实际中测试工程师在做接口验证时,往往面临生产环境权限的掣制,或面临生产环境配置差异而无法像测试环境一样进行接口测试。相比与传统的RPC(远程过程调用,一般关注的是行为和处理),使用合适的客户端对基于面向资源的远程调用REST API,更适合做接口线上验证测试。REST 关注的是要处理的数据。

What

简洁来说,REST就是将资源的状态从最适合客户端或服务端的形式,从服务端转移到客户端(或者反过来),在REST中,资源通过URL进行识别和定位。天然地可通过HTTP的CRUD方法(create:POST,read:GET,update:PUT或PATCH,delete:DELETE)对远程REST API服务进行调用,提交请求和接受响应。而作为测试工程师,测试重点在构建请求,断言响应对象。

How

前面提到REST转移合适的资源格式于客户端和服务端之间。Spring 作为现代流行的软件开发框架,spring mvc对REST提供了良好的支持。若客户端的Accept接受格式为“application/json”,在服务端通过添加控制器注解@RestController到控制器类,就可以自动转换所有处理器方法返回结果为json格式给客户端。为处理器方法参数添加注解@RequestBody,默认的消息转换器MappingJackson2HttpMessageConverter(需要加到类路径中)会自动将客户端请求的资源(这里以json格式为例)自动转换为处理器方法需要传入的参数对象。举如下一个电商促销价格计算接口的测试为例。下面先看下服务端处理器暴露的接口。

@RestController
@RequestMapping("/api/purchaseItemsPromotionService")
public class PurchaseItemsPromotionServiceRestController {

    @Resource(name = "purchaseItemsPromotionRemoteImpl")
    private PurchaseItemsPromotionService purchaseItemsPromotionService;

    @ApiOperation(value="促销计算(结算页接口)", notes="促销计算(结算页接口")
    @PostMapping("getPromoPrice")
    public PurchaseItemPromotionComposite getPromoPrice(@RequestBody List<PurchaseItem> purchaseItems, @ModelAttribute PurchaseClient purchaseClient) {
        return purchaseItemsPromotionService.getPromoPrice(purchaseItems, purchaseClient);
    }

}

通过Swagger实现REST API文档化和交互,通过访问swagger-ui,手动入参发送请求并查看返回结果,当然你也可以用postman等工具做同样操作。


显然通过ui或者工具去做接口验证,需要手动设置参数,肉眼断言响应,并没有解放太多生产力。接口测试,天然适合做自动化。通过实践,我总结了如下的几种客户端和json处理方法来做REST api 接口测试。

**
 * @FunctionDesc 促销中心价格计算接口线上验证测试  多种方式
 * @Author bjyfxuxiaojun
 * @CreateDate 2017/12/28
 * @Reviewer 
 * @ReviewDate 2017/12/28
 */
class PurchaseItemsPromotionServiceRestSpec extends Specification {
    @Rule
    TestName name = new TestName()

    void setup() {
        println """=============
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值