大家平时如何测试REST API
发布于 8 年前 作者 sigoden 6223 次浏览 来自 问答

我现在用mocha和supertest进行API测试,存在如下问题:

  • 数据难以隔离;为了测试订单相关接口,需要先填充商品类目,属性,商品列表等等数据。如果不隔离,上游的变动又会对测试产生影响
  • 代码量很大;不管是用那种异步模型,测试代码量至少是功能代码的3倍以上

关于RestfulAPI接口测试,大家有没有什么经验分享?

来自酷炫的 CNodeMD

7 回复

难以避免复杂的逻辑需要先填充数据,甚至模拟前面部分流程以测试后面流程。 测试代码多是事实,且不得不做,如果不写单元测试,后面功能改动很可能不知不觉导致功能不可用了。 为了有效测试,队列,数据库,api都得按照真实的架好才做单元测试。最多写些工具函数方便写接口提高下效率。

难道不mock?加个测试环境变量,判断一下,用mock方法测试数据啊。。。

我自己有项目,包含【文档】【测试】【mock】,测试部分数据模拟使用的是faker 😈

mock 和 stub 是基本方法,工具选择看个人.

我的做法是利用 https://www.npmjs.com/package/restspec 之后api的集成测试让用例之间保持依赖关系,后面的测试依赖前面的测试,新加的测试一律加到尾部。 这样整个api测试下来不需要过多的mock,简化了测试用例的复杂度。 具体做法参考我的一个样本工程 https://github.com/open-node/open-rest-es6-boilerplate ./specs 下就是api测试用例的写法。

有问题随时联系我。手把手教你。我这套玩法有一些弊端,就是每个用例之间不是隔离的,但是好处也是大大的,测试用例写起来非常轻松。

supertest 它可以直接集成express框架,配上mocha+should.js,可以满足一般功能性测试。 基于http接口测试我认为已经属于集成测试的范畴了,尽量不去mock数据,需要什么样的数据就在测试数据里面事先做好 每次测试基于事先预定义的测试数据库跑就可以了。 关于测试我想说几句

  1. 结构稳定后再开始测试,尽量少做无用功
  2. 测试不能保证没有bug,不必为了追求覆盖率写无用的测试
  3. 测试不会让你写出更好的代码,这里我非常同意王垠的一篇文章 测试的道理 不管你同不同意其中的道理,都要仔细读一下,想一下
回到顶部