什么是API测试
  什么是API

  关于定义什么的,直接维基可得:
  API(Application Programming Interface,简称:API),又称为应用编程接口,是软件系统不同组成部分衔接的约定。由于近年来软件的规模日益庞大,常常需要把复杂的系统划分成小的组成部分,编程接口的设计十分重要。程序设计的实践中,编程接口的设计首先要使软件系统的职责得到合理划分。良好的接口设计可以降低系统各部分的相互依赖,提高组成单元的内聚性,降低组成单元间的耦合程度,从而提高系统的维护性和扩展性。
  换句话说,API也可以看做程序/资源/组件的集成点。它的功能会跟UI有些类似,通过某些特定指令、参数等可以让后台的一堆代码运行起来,后得到想要的结果。不同的是它不提供可视的按钮文本框之类的界面,而通常是由一个直接和底层代码打交道的链接构成。
  什么是API功能测试
  API测试是针对系统所提供的API做各方面的验证。API的性能和安全测试根据测试策略的不同,会是一个可选测试项。这个可以作为两个单独的问题来讨论。
  API的功能测试类似于UI功能测试,都是在已知输入内容和期望结果的前提下,使用这个功能/调用这个API并且验证是否能返回期望的结果。不同的是API测试在返回结果被呈现给客户前完成了,从而对测试环境的依赖会比较小。
  为什么要做API功能测试
  测试金字塔

  在讨论这个话题之前,我们先来回顾下测试金字塔:


  
TestPyramid

  如图所示。简单来讲是说越往上层走的测试,需要投入的成本会越高,而且会越难以维护。在这个结构下,因为UT已经覆盖了绝大部分的代码,所以其上层的集成/API测试和UI测试可以去除重复测试的部分,从而量也会越来越少,并且会有不错的覆盖率。
  所以理想中的自动化测试结构应该是大量的UT+适量的集成测试(或者API测试)+少量的UI测试。
  构建API测试的价值
  测试覆盖率。UT关注点是各个单元是否能够完成期望工作,只覆盖一个单元内部工作情况;集成/API测试关注点是各个模块/单元之间协同工作,它所覆盖的场景也会比单元测试更多。而UI测试会更加关注e2e,模拟用户行为,在所有的程序依赖环境准备完成后再进行操作。相比之下API测试不依赖环境,测试成本会比UI测试更低,而且覆盖率比UT更高。
  快速反馈。API测试速度比UI测试更快(因为无需界面加载/响应),短时间内能跑很多用例。API测试也能精确的揭露是软件中哪个组件除了问题,如果把你的API测试放到CI里面,一旦代码修改破坏了现有的功能,能够快速反馈到团队中。还可以把测试中发现的BUG也写到API测试里面,让测试成为一堵墙,从而能更好的能保证产品质量。
  可复用。API测试由于不需要浏览器、GUI等环境,所以可以更加灵活的在各个环境中复用。例如你可以在产品环境中、测试环境、研发环境中使用,你需要做的只是修改下测试数据而已。另外如果是在TDD模式下工作的话,API测试可能会在产品完成前写完了,后续的工作也会减少很多。