程序园编程语言爱好者

Codeceptjs之REST API

2019-05-12  本文已影响0人  赵阳_c149

对于前端的E2E测试,BDD (Behavior Driven Design)风格的Codeceptjs是一个不错的选择。之前的一篇文章对其进行了简要的介绍【1】。其测试框架的搭建也是极为简单【2】。而且,可以通过javascript的npm工具对codeceptjs进行扩展,其配置之简单,使用之高效,扩展之丰富,完全不逊色于java生态环境下的maven。本文主要介绍如何扩展codeceptjs,以REST API的方式管理远程数据。同时,根据项目的具体情况还对其进行了一些定制化的工作,在这里分享给大家,欢迎讨论。

在E2E测试中,往往需要准备数据。例如,需要测试在UI中删除一个用户的功能,最直接的方式是在测试开始之前,先在UI上进行用户的添加操作。这种方式固然易于理解和实现,似乎也接近真实场景,但是却有一些问题,例如测试步骤的冗余,case更加的不稳定,等等。在这种情况下,一般是采用REST API向后台插入数据。Codeceptjs提供的方案就是apiDataFactory + REST。

对于apiDataFactory + REST的配置,官方文档中提供了详细的步骤【3】,参照起来并不困难。但是这些都是基本的配置,有的时候还要根据自己项目中的具体情况进行一些额外的工作。例如,在我们的项目中,由于REST API是一个https开头的URL,所以会遇到UNABLE_TO_VERIFY_LEAF_SIGNATURE unable to verify the first certificate:

API_SSL.png

所以需要扩展默认的Rest Helper的方法_executeRequest,在request请求被发出之前,将strictSSL设置为false。
MyBaseRest

_executeRequest(request) {    let newRequest = request;    if (request.options.body) {        let newRequest = Object.assign({}, request);        newRequest.options = Object.assign({}, request.options);        newRequest.options.body = TestUtil.processExpressionsInData(newRequest.options.body);    }    return super._executeRequest(newRequest.strictSSL(false));}

另外,REST helper的应用场景不仅包括apiDataFactory,而且还包括修改密码、设置属性等操作。前者已经被框架包装在了promise里,后者需要我们自己对其进行包装。从面向对象的角度考虑的话,需要一个新的类继承自MyBaseRest,在这个类中,_executeRequest是一个async方法:

class MyRest extends MyBaseRest {   /**     * Override base method,     * process response before returning     * Executes unirest request     *     * @param {*} request     */    async _executeRequest(request) {        let response = await super._executeRequest(request);        return TestUtil.getJsonFromResponse(response);    }}

这样,在配置文件中配置两个rest helper,一个是MyBaseRest用于支持apiDataFactory,另一个继承自MyBaseRest,在这个类中,_executeRequest是一个async方法。

我在github里面共享了代码【4】,有兴趣的朋友可以帮忙review。多谢

【1】浅析 codeceptjs
【2】第一个codeceptjs测试框架
【3】ApiDataFactory
【4】api_data_factory_rest

上一篇下一篇

猜你喜欢

热点阅读