一直不知道怎么测试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(编码)
整个测试过程均串行执行,即测试用例是一个接一个进行测试,而非并行测试。各阶段附加的方法,也是串行执行。使每个测试用例串行,主要考虑到测试用例与测试用例之间可能会共用同一个数据库,在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都会触发相应的事件。
发表评论
要发表评论,您必须先登录。