用于测试rest api的nodejs测试框架

一直不知道怎么测试rest api,或者说没有一个比较方便的方法来测试rest api。后来想了一下,测试一个api是否可行,该是这样一个过程:给予一些参数,然后发起一个请求,获得响应,检查返回的值是否与预想的一致,一致则正确

于是用nodejs写了一段代码,来测试rest请求(http请求)。整体的思路,希望减少测试的逻辑代码量。也就是使提供测试数据成为编写测试用例的主要工作量。写了一个RestTester对象,用于接收测试数据,以及测试的上下文。即只要提供测试数据和测试服务器的相关信息。

  • 测试数据:
    • input(http请求数据):(http方法(GET/POST),请求时使用的headers,如果是post请提供body的数据,body为一个json,目前仅支持json格式的body)
    • expect(预期值):预想要返回的结果(响应码,headers,json body)
    • setup/before/after/teardown为该测试特定阶段执行的方法(可选)(具体意义见下文)
  • 测试服务器(测试上下文)的相关信息:
    • server(nodejs的server对象)(可选,不提供则服务器对象不为测试程序启动)
    • host(主机名)
    • port(端口)
    • timeout(请求超时时间)
    • encoding(编码)

下图为该测试框架的一个简单的流程图:这是一副关于testful的测试简单流程图

整个测试过程均串行执行,即测试用例是一个接一个进行测试,而非并行测试。各阶段附加的方法,也是串行执行。使每个测试用例串行,主要考虑到测试用例与测试用例之间可能会共用同一个数据库,在setup和teardown可能会相互影响。

另外为每个阶段附加方法的形式有两种,一则可写在测试用例的定义里(前面提到);还有就是通过RestTester的onSetup/onTeardown/onBefore/onAfter/onInit/onClose方法来添加,每个方法的一个参数,均为一个函数,当方法结束时,请调用这个函数,以告知,所添加的阶段方法执行完毕。如:

var tester = new RestTester(...)
tester.onSetup(functon(next, title, case){
   //todo do what you want to do during setup period
   next();
});

在每个阶段执行完后,RestTester都会触发相应的事件。

详细内容见:https://github.com/codelint/testful

发表评论