什么是API?

目录内容



即使对于初学者,“ API”一词也会闪烁。 要么是REST API,要么是SOAP API,然后是一个API。 这是什么样的动物? 让我们弄清楚!

“为什么我需要这个?” 我实际上正在测试网络! 现在,如果我要进行自动化,那么是的...嗯,我听说他们也在企业中对其进行测试...

不! 对于任何测试人员来说,了解API都是一件好事。 因为在它上面系统相互交互。 即使在最简单,最肮脏的网站上,您也每天都能看到这种互动。
任何付款都通过付款系统API进行。 买了电影票? 在线商店中的T恤? 一本书? 一旦您单击“付款”,该站点就会将您连接到付款系统。

但是,即使您没有与其他系统集成,您仍然可以使用API​​! 因为内部系统本身也通过api进行通信。 并且,当前端开发人员大量使用GUI(图形界面)时,您可以:

  • 在等待时感到无聊;
  • 检查API工作逻辑

当然,我是第二选择! 因此,让我们了解一下API是什么。 您可以在youtube上观看视频,也可以作为文章阅读。

什么是API?


图片

API(应用程序编程接口)是程序提供的合同。 “可以通过这种方式与我联系,并承诺这样做。”

如果翻译成俄文,它将是“合同”一词。 双方之间的协议,作为购买汽车的协议:

  • 我的责任是要赚这么多钱
  • 卖方的责任是给汽车。

您可以翻译,是的。 但是,没有人做到\ \ _(ツ)_ /¯

每个人都使用“合同”一词。 如此接受。 此外,该单词包含在开发样式的名称中:

  • 首先编写代码-首先我们编写代码,然后在其上生成合同
  • 首先签约-首先我们创建一个签约,然后在其上编写或生成代码(在本文中,我将讨论这种样式)

我们不是说“汽车买卖合同”吗? 因此开发人员不会说“合同”。 默契。

API-功能集


购买汽车时,您要草拟一份合同,在其中规定所有对您重要的要点。 同样,应在计划之间制定合同。 它们指示如何访问一个或另一个程序。

因此,API回答了“如何联系我的系统?”这一问题,并且包括:

  • 我们可以执行的操作本身
  • 输入数据
  • 输出数据(数据内容或错误消息)。

图片

在这里你可以告诉我:

-等等 操作,输入数据,输出数据-某种程度上,所有这些都非常类似于功能描述!

如果您曾经经历过开发或刚刚学习了编程语言,那么您可能知道什么是函数。 实际上,我们有输入数据,有输出数据,还有一些魔术可以将一种转化为另一种。

是的! 定义相似是正确的。 怎么了 是的,因为API是一组功能。 这可能是一个功能,也可能很多。

图片

功能集如何编译


是的,无论如何。 根据开发人员的需要,它将分组。 例如,您可以按功能对API进行分组。 那就是:

  • 用于进入系统的单独API,将在其中进行注册和授权;
  • 用于报告的单独API-报告1,报告2,报告3 ...报告N。对于不同的报告,我们有不同的公式=不同的功能。 我们都将它们收集在一组api中以进行报告。
  • 单独的付款系统API-每个银行都有一个功能。
  • ...

图片

您根本无法分组,但可以创建一个通用的API。

可以制作一个通用的API,其余的可以按订单制作。 如果您有盒装产品,那么它通常包括一组标准功能。 以及所有“愿望清单”客户都是分开制作的。

图片

事实证明,在我们的系统中,有几种不同的API,对于每种API,我们都有一份书面合同。 每个合同都明确规定了可以执行的操作,将要执行的功能

图片

当然,功能可以重用。 也就是说,相同的函数可以包含在不同的API中的不同集合中。 没有人禁止这样做。

图片

事实证明,开发人员想出了他将拥有哪种API。 它要么执行常规操作,要么根据功能或它自己的某些标准进行分发,并将所需的功能集添加到每个api。

“接口”一词是什么


-等一下,奥莉亚! 您自己在上面写道,API是一个应用程序编程接口。 尽管有接口一词,您为什么还要谈论合同呢?

是的,因为在编程中合同是接口。 在OOP(面向对象编程)的经典描述中,有3条鲸鱼:

  1. 封装形式
  2. 传承
  3. 多态性

封装是我们隐藏实现的时候。 对于用户而言,一切都很简单明了。 我点击了按钮-我收到了报告。 以及它是如何从内部工作的-他不在乎。 哪个数据库隐藏在后台? 甲骨文? MySQL的? 程序用什么编程语言编写? 代码的组织方式如何? 不是重点。 该程序提供了一个接口,并使用了它。

程序并不总是提供图形界面。 它可以是SOAP,REST接口或其他API。 要使用此界面,您必须了解:

  • 输入什么
  • 结果如何;
  • 需要处理哪些异常。

用户使用GUI图形用户界面 。 程序使用API-应用程序编程接口 。 他们不需要图形,仅需要合同。

API的调用方式


您可以直接或间接调用api。

直接:

  1. 系统调用自身内部的函数。
  2. 系统调用另一个系统的方法
  3. 人称方法
  4. 自动测试拉取方法

间接地:

  1. 用户使用GUI

直接调用API


1.系统调用自身内部的函数


程序的不同部分以某种方式相互通信。 他们在程序级别(即API级别)执行此操作!

这是最简单的使用方法,因为被调用的API的作者是开发人员。 他是他的消费者! 因此,无关的文档没有问题=)

开个玩笑,文档总是有问题。 在这种情况下,作为文档,代码中将包含注释。 但是,,,它们也无关紧要。 要么开发人员是不同的,要么是一个,但是我已经忘记了我是如何完成原始api以及应该如何工作的……


2.系统调用另一个系统的方法


但这是测试人员在集成商中进行测试的典型案例。 或者是测试他们的系统与他人集成的测试人员。

一个系统通过api提取另一个系统的某种方法。 她可能会尝试从另一个系统获取数据。 反之亦然,将数据发送到该系统。

假设我决定将提示从Dadata连接到我的在线商店,以便用户轻松输入送货地址。

我正在连接API提示。 现在,当用户开始在我的网站上输入地址时,他会看到Dadata的提示。 结果如何:

  • 他在我的网站上输入了一封信
  • 我的网站在API Dadat提示中发送了一个请求
  • Dadata返回答案
  • 我的网站对其进行处理并将结果显示给用户。

有这么多步骤! 因此,对于每个输入的字符。 用户看不到这种交互,但是可以看到。

而且,当然,在开发API方法时不要忘记这种情况。 只能通过SOAP调用,在接口中找不到它。 客户订购的东西,我们做到了\ \(ツ)_ /¯

可以在“用户”中找到一个示例。 MagicSearch方法基于真实事件。 尽管我必须承认,但在原始逻辑中甚至更复杂,我将其调整到了我的站点。

但是这里的窍门是,在系统本身的用户界面中,只有常规搜索,只有输入行。 好吧,也许有几个过滤器。 但是集成需要一堆附加功能,这些附加功能是通过SOAP方法完成的。

超级搜索功能仅可通过API使用,界面中的用户感觉不到。

在这种情况下,您通常拥有TK,根据API方法可以使用TK。 您的任务是检查它。 测试人员的一项典型任务是,只需将标准测试设计添加到标准的测试设计中即可测试API测试的功能,而这全都涉及到了帽子!

(究竟需要在API中进行什么测试-我稍后会在另一篇文章中讲述)


3.人称方法


原因不同:

  1. 加快工作
  2. 使错误本地化(问题出在哪里?在服务器还是客户端上?)
  3. 测试没有边沿自旋的逻辑

如果系统提供API,通常比通过图形界面进行操作更容易。 此外,API调用可以保存在工具中。 保存后-即使每天清洗10次,您也可以在任何基础上使用。

例如,我们再次转到Users 。 如果要创建用户,则需要填写很多字段!

图片

当然,这可以使用诸如Form Filler之类的特殊插件来完成。 但是,如果您需要足够的系统测试数据怎么办? 还有俄语?

手动填写字段令人难过和沮丧! 而且,如果您需要每周或每天在干净的测试基础上重复进行此操作(通常是一场噩梦)。 这是立即执行常规操作的第一要务。

在这种情况下,自动化的角色将发挥作用。 可以通过CreateUser REST请求创建用户。 一旦注册了正常的“真实”数据,我们便每次使用它。 赢利!

无需手动填写表格(1分钟就用“ lprulpk”值填写字段,而是1分钟),然后按“发送”按钮。 在这种情况下,这些值将更加合适。

在邮递员中,您可以创建一个单独的文件夹来准备测试库,在其中塞满十几个请求。 现在,在几秒钟内,无论在任何地方,您获得的数据量都将与您手动驱动数小时的数据一样多!

如果您发现错误,并且不知道将该错误挂在谁身上-前端或后端开发人员,请删除所有不必要的内容。 在没有图形界面的情况下调用该方法。 您可以测试程序逻辑,直到接口准备就绪或断开。

4.自动测试拉取方法


有一个典型的自动化金字塔:

  • GUI测试是一个诚实的测试,“用户将如何做”。
  • API测试-我们下降到下面的水平,排除了多余的东西。
  • 单元测试-单个功能的测试

图片

API一词暗示了测试中将使用什么what

假设我们有:

  • 操作 :报告下载;
  • 在输入处 :来自手动或自动调整或来自其他地方的数据;
  • 输出 :根据某些规则构建的报告

报告构建规则:

  • 单元格1 :X-Y
  • 储存格2 :Z * 6
  • ...

图片

GUI测试是一个诚实的测试,机器人会执行用户会做的所有事情。 它会打开浏览器,按一下按钮...但是,如果有东西掉落,您将在很长一段时间内弄清楚确切的位置。

API测试是相同的,只是没有浏览器。 我们只需将数据提交到输入并检查输出中的数据即可。 例如,您可以在Excel中输入最终答案,然后让机器人进行协调,是否正确填写了数据? 查找问题变得更加容易。

单元测试是当我们分别测试每个功能时。 我们分别查看单元格1的计算,分别查看单元格2的计算,依此类推。 此类测试最快速地被追查,并且易于在其上定位错误。


间接API调用


实际上,当用户使用GUI时,他也使用API​​。 他只是不知道,他根本不需要。

也就是说,当用户打开系统并尝试下载报告时,系统的工作方式与内部的魔力无关紧要。 他具有单击“下载报告”的按钮。 用户通过GUI(图形用户界面)进行工作。

图片

但实际上,该图形用户界面下有一个API。 当用户单击该按钮时,该按钮将调用报表构建功能。

图片

必要时,报表构建功能可以调用10个其他功能。

现在,用户可以在他面前看到一份现成的报告。 他甚至不知道就调用了复杂的API!

API测试是什么意思?


首先,我们的意思是测试VIA API。 他们确实这么说,“ API测试”是一个常用术语,但从技术上讲,该术语是不正确的。 我们不测试API,也不测试GUI(图形界面)。 我们正在通过图形或软件界面测试某种功能。

但这是一个确定的表达。 您可以使用它并说“ API测试”。 当我们谈论它时,是指:

  • API级自检
  • 或两个不同系统之间的集成。

集成-当一个系统通过某种数据传输协议与另一个系统进行通信时。 这称为远程API,即通过网络,某种协议(HTTP,JMS等)进行的通信。 与此相反,还有本地API(也称为“共享内存API”)-这是程序与之通信或与同一虚拟内存中的另一个程序进行通信的API。

图片

当我们谈论测试API时,通常是指测试远程API。 当我们有两个位于不同计算机上的系统以某种方式相互通信时。

而且,如果您在空缺中看到“ API测试”,则最有可能暗示了调用SOAP或REST服务并对其进行测试的能力。 虽然总是值得澄清的!

总结


API(应用程序编程接口)是程序提供的合同。 “可以通过这种方式与我联系,并承诺这样做。”

合同包括:

  • 我们可以执行的操作本身
  • 输入数据
  • 输出数据(数据内容或错误消息)。 ”。

Source: https://habr.com/ru/post/zh-CN464261/


All Articles