关于javascript:如何编写有效的接口测试

6次阅读

共计 2918 个字符,预计需要花费 8 分钟才能阅读完成。

简介:在所有的开发测试中,接口测试是必不可少的一项。无效且笼罩残缺的接口测试,不仅能保障新性能的开发品质,还能让开发在批改性能逻辑的时候有回归的能力,同时也是能优雅地进行重构的前提。编写接口测试要恪守哪些准则?测试代码的构造应该是什么样的?接口测试有哪些实际技巧?本文分享作者在接口测试上的实际总结。

一线开发同学,可能都或多或少地造成过线上 bug 甚至故障;也会遇到这样的场景,某同学在开发某性能的时候重构了代码,造成了线上 bug 或者故障;在开发某个性能时,发现须要批改公共逻辑,胆怯影响到其余性能,十分不雅观地拷贝代码,从新写套独自逻辑来反对。

下面这些状况,都蕴含了一个要害的问题,无论是性能开发还是逻辑重构,如何来保障代码开发的品质。保障的伎俩,每个人都晓得,就是测试。首先是新功能测试,保障新性能逻辑正确;其次是回归测试,保障原有业务性能逻辑正确。测试的形式,个别是两种,人工测试和自动化测试。随着测试技术和工具的继续倒退,人工测试比例逐渐升高,被自动化测试逐渐代替。自动化测试是可继续和可反复的,甚至是可 AI 化的。

一、测试分层

测试也是分层的,如下图所示:

在一个零碎内,自动化测试个别分单元测试、模块测试和接口测试。

单元测试

目前我的利用代码根本都是基于 spring 框架面向接口这种编程模式,单元测试已被弱化。单元测试的要求基本上是单个类单个办法的测试,在咱们以后模式下,编写老本太高。当然,如果是一个工具或者一段比拟内聚而又简单的逻辑 (例如算法逻辑),还是应该应用单元测试来保障逻辑的正确性。

模块测试

在零碎比拟大、模块比拟多的状况下,能够建设模块测试层,保障各模块性能的正确性。不过以后的零碎发展趋势是微服务架构,因而模块测试层并非十分必要,能够通过接口测试层来笼罩。

接口测试

集体感觉精确来说应该叫入口测试,这一层,是从零碎入口登程进行集成测试。利用入口通常是 HSF(一个分布式 RPC 服务框架)服务,音讯,定时工作。

作为开发,测试伎俩千万条,接口测试不可少。在咱们利用的接口测试无效且笼罩残缺的状况下,不仅能保障咱们新性能的开发品质,还能让咱们在批改性能逻辑的时候有回归的能力,同时这也是咱们做代码重构的前提。同时,易测性也是代码结构合理的一个指标,如果发现一段代码编写测试脚本艰难或者无奈测试,那就阐明以后代码构造不合理须要重构。接下来,我将次要谈一谈接口测试的有效性。

二、测试准则

根底准则:

  • 自动化:接口测试是非交互式的自动化执行,不须要人参加。
  • 独立性:接口测试之间不应该相互依赖。
  • 可反复:接口测试可反复执行,不受环境影响。
  • 接口测试恪守 BCDE 准则,保障接口交付品质。Border:边界测试。Correct:正确的输出,正确的预期输入。Design:依照需要和设计文档编写测试逻辑。Error:谬误输出,预期输入。
  • 数据筹备:数据筹备通过零碎服务进行,不能通过直接插入 db 形式。
  • 可测性:对于不可测的代码须要进行重形成正当的构造。
  • 覆盖性:接口测试须要笼罩所有 UC,同时代码覆盖率和分支覆盖率应达到肯定规范,新增代码必须被笼罩。
  • 持续性:如果代码批改导致已有接口测试执行失败,必须修复代码问题或者测试代码逻辑。
  • 工夫要求:接口测试应该在我的项目公布之前实现,不应放到我的项目公布之后补充。

以上的根本准则应实用于所有层的自动化测试用例,在编写接口测试时,除了下面这些准则,还有其余准则须要恪守,先看一张图:

从零碎角度来剖析入口调用,以 HSF 服务为例:

  • 外围零碎调用由咱们零碎提供的服务。
  • 零碎执行了一堆代码逻辑,其中蕴含有分支逻辑。
  • 零碎执行过程中依赖内部 HSF 服务,进行了调用,并失去了返回值。
  • 零碎执行过程中依赖 DB 查问或者落地了数据,依赖缓存查问或者落地了数据。
  • 零碎执行过程中对外发送了音讯。
  • 给上游零碎返回 HSF 执行后果。

无效接口测试的要害准则是要笼罩所有入口,mock 所有依赖,校验执行过程中所留下的痕迹,总结如下:

  • 入口笼罩:接口测试用例必须笼罩 HSF 服务入口、音讯入口、定时工作入口。
  • 依赖 mock:在根本准则中,有可反复这个准则,即接口测试不能受环境依赖,须要 mock 掉对外依赖。但对于 db 依赖,不倡议齐全 mock 掉,一方面 mock 老本高,另外可能笼罩不到 sql 和表束缚逻辑。
  • 校验残缺:无效的接口测试,应该具备残缺的校验,没有校验的接口测试是没有意义的。只有执行过程中,留下的痕迹对业务有影响,都要进行残缺校验,方能保障接口测试的有效性。HSF 接口返回值校验:依照场景和接口约定进行 HSF 返回参数校验。DB 校验:校验落地数据的正确性。缓存校验:校验存入缓存中数据的正确性。HSF 依赖入参校验:通过 mock 工具取得依赖 HSF 调用的入参,进行入参校验。音讯校验:通过 mock 工具取得发送的音讯对象,进行音讯体校验。

三、测试代码构造

在编写测试代码的时候,也应跟写业务代码一样,思考代码的可读、可扩大、可复用性。同时也能够依据零碎的业务个性,在测试框架的根底上封装适宜以后零碎的测试组件,进步测试代码编写效率,标准测试代码构造。

一个接口的测试代码,大略的构造如下:

1、测试筹备

依赖数据筹备

很多时候,咱们的测试有数据依赖,可能是配置数据,也有可能是业务数据 (例如退款须要依赖领取数据)。

  • 配置数据:能够通过定义配置文件来初始化配置。
  • 业务数据:这类数据,禁止通过直接插入数据形式产生,而是应通过调用业务服务产生。

依赖 mock

对于内部依赖,须要对被依赖的服务进行 mock,防止实在调用。

接口测试入参筹备

筹备接口方面的入参。

2、测试执行

调用接口办法,执行业务逻辑。

3、测试校验

  • 返回参数校验:校验接口的返回参数。
  • DB:校验 DB 落地数据。
  • 缓存数据校验:校验落地到缓存中的数据。
  • 音讯校验:校验对外发送的音讯对象。
  • 对外 HSF 调用校验:校验对外 HSF 调用的入参。

四、实际技巧

1、执行效率

对于接口测试,执行效率是不得不关注的一个点,若一个接口测试执行 3 分钟以上能力看到后果,会大大降低开发同学编写接口测试的激情。对于测试执行效率进步,倡议的计划为:

  • 最小化启动测试上下文,例如 spring boot 的利用,启动 spring 就能够了
  • 应用内存数据库,例如 h2
  • 将中间件依赖 mock 掉

2、测试框架抉择

对于测试框架,倡议抉择基于 testng,可能提供通过配置文件做数据筹备的测试框架。如果找不到适合的,能够本人基于 testng 进行封装。

3、接口测试覆盖度

场景的完整性影响着测试用例的覆盖度,一方面须要开发同学基于业务场景的输出和测试教训枚举出失常和异常情况,另一方面接口办法也有一些固定须要测试的点,例如幂等测试,边界值测试,参数不正确测试等等。

同时也要通过覆盖率工具查看接口未笼罩的代码或分支逻辑,进行针对性的场景笼罩测试。依据我的教训,分支残缺笼罩十分重要,特地是异样的分支。

五、总结

要保障系统线上运行稳固,品质保障伎俩必不可少。尽管当初有很多自动化的保障伎俩,但接口测试仍然是最根本的和最重要的保障伎俩之一。如能做到继续保障接口测试覆盖度和有效性,很大水平上会升高线上 bug 的产生,开发同学也会更有积极性去重构代码。

作者:开发者小助手_LS

本文为阿里云原创内容,未经容许不得转载

正文完
 0