测试基础 接口测试中,应不应该用数据库

明天再学 · 2022年07月14日 · 最后由 知無涯 回复于 2022年07月15日 · 5123 次阅读

这个问题提的真好,我想很多人都没有考虑过这个问题。我抛砖引玉,尝试回答一下。

首先,接口自动化测试是分层测试的一种,那就意味着它只能测到一部分范围,就是接口的请求和响应是否正常,其他的地方它是测不到,这时候只有引入其他的测试手段才能把测试范围覆盖完全,比如 ui 测试和数据库测试,还有其他的中间件测试。

这么说来,接口自动化测试只管输入和输出,根本没必要用数据库。

但是,现实没有这么美好。 在研发中,我们想通过 单元测试、接口测试、ui 测试、端对端测试等各种测试类型来保障产品质量,但是其实很多测试类型都是缺失的,其中缺失最严重的是单元测试。

由于各种各样的原因,几乎没有几个团队重视单元测试,这也意味着,产品中调用的基本函数和类没有经过测试就直接教到测试手上了,当然,数据库是否落库,消息队列是否正常运转,缓存有没有命中,都没有经过基本的测试,就直接进入了接口测试阶段。

此时,你的接口自动化测试就要承担更多的责任,把单元测试没有完成的工作交接过来。就好像我们为了赶时间把新设计的电动车造出来,单独去测轮胎,单独去测引擎,单独去测方向盘这些都不搞了,而是直接拉出来跑。 那测试人员在车上除了关注车整体的运转情况下,一定还要多留一个心眼,对每个单独的部件也多一份关心。

接口自动化测试理论上不需要数据库干预,但是如果数据库没有单独测试,那在接口测试中就要加入这部分的工作。

数据库操作分为查库操作和写库操作。写库操作一定要重点关注,查库操作在有精力的情况下也可以适当校验。

上面都是需要用到数据的第一种场景:校验数据库。 第二种在接口自动化测试中可能会用到数据库的场景是获取数据:有一些接口测试需要的数据需要你通过数据库得到,或者通过造数方式写入到数据库中(运行完以后可以清除)。

比如你在测试注册接口的时候,会由后端发一个手机验证码,这个验证码你很有可能会通过查数据库的方式去获取,否则你就很难进行下一步操作。

两种使用数据库的场景:校验数据库和管理接口依赖数据,不知道这个回答对你有没有启发。

共收到 5 条回复 时间 点赞

为啥我看完后更迷茫啦,你在说啥子、

比如你在测试注册接口的时候,会由后端发一个手机验证码,这个验证码你很有可能会通过查数据库的方式去获取,否则你就很难进行下一步操作。

挑个小毛病,这个验证码只是临时数据,基本不会是存数据库吧。

另外,标题里 “应不应该用数据库” ,这里的 用 字很奇怪,很难理解。从文中的内容看,应该主要是说应不应该涉及数据库吧。

每种测试方法都会有自己的优势和局限性,不能因为上层的测试方法没做,就让上层的测试方法去兜底。电动车的例子不是很恰当哟。

接口测试的核心是验证交互的数据结构是否正确,保证数据能够端到端正常流转,满足业务的需求。在这里加入过多的数据层验证,其实是没有必要的。如果有涉及到数据层的操作(如数据初始化等),应该独立出来处理。

因为接口测试封装了相关的内部实现,仅仅从入参来验证出参,很多时候并不是直接查某个表就能够解决的,往往包含了很多的业务计算逻辑在内。 如果是简单的表查询,检查的意义也不大。

另外 ,关于验证码的问题,就不应该成为问题,一个万能码就可以解决了。完全没必要读库,而且这东西大概率也是放在 redis 上,不会入库的,因为有时效性,又没有什么业务价值。

分层测试的理念,就是每层干自己该干的事,做到更好的解耦,方便定位问题。

这么说来,……

这么说来,你已经说对了

但是,……此时,……测轮胎,……比如,……验证码……

但是,你又说错了

结论:蛇没有脚


首先接口自动化测试是分层测试的一种那就意味着它只能测到一部分范围就是接口的请求和响应是否正常其他的地方它是测不到这时候只有引入其他的测试手段才能把测试范围覆盖完全比如 ui 测试和数据库测试还有其他的中间件测试

这么说来接口自动化测试只管输入和输出根本没必要用数据库

这个原因不充分,不能得出这样的结论。试问接口自动化输出的报文哪里获取的?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册